summaryrefslogtreecommitdiff
path: root/src/KingSystem/Map
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2022-03-17 13:29:27 +0100
committerLéo Lam <leo@leolam.fr>2022-03-18 01:19:59 +0100
commitbd1c2b6ed69bde46dabf27ea239b68c00c117e26 (patch)
tree58c9714275b9c79c533e7814fe338fabd1ae0248 /src/KingSystem/Map
parent8d88461c52f6e118a0997edc1b8230724021558a (diff)
ksys/phys: Start adding RayCast
Diffstat (limited to 'src/KingSystem/Map')
-rw-r--r--src/KingSystem/Map/mapAutoPlacement.cpp31
-rw-r--r--src/KingSystem/Map/mapAutoPlacement.h13
2 files changed, 22 insertions, 22 deletions
diff --git a/src/KingSystem/Map/mapAutoPlacement.cpp b/src/KingSystem/Map/mapAutoPlacement.cpp
index 886a65da..a49e6153 100644
--- a/src/KingSystem/Map/mapAutoPlacement.cpp
+++ b/src/KingSystem/Map/mapAutoPlacement.cpp
@@ -7,11 +7,23 @@
#include "KingSystem/Map/mapAutoPlacementFlowMgr.h"
#include "KingSystem/Map/mapAutoPlacementMgr.h"
#include "KingSystem/Physics/RigidBody/physRigidBody.h"
+#include "KingSystem/Physics/System/physRayCast.h"
#include "KingSystem/Utils/Byaml/Byaml.h"
#include "KingSystem/World/worldWeatherMgr.h"
namespace ksys::map {
+// TODO: this phys::RayCast derived class should be moved to phys::
+struct Raycast : phys::RayCast {
+ Raycast();
+ ~Raycast() override;
+
+ static Raycast* create(void*, u32);
+
+ void sub_7100FC55AC(u32);
+ void release();
+};
+
AutoPlacement::AutoPlacement() = default;
AutoPlacement::~AutoPlacement() = default;
@@ -128,23 +140,22 @@ bool PlacementThing::invoke() {
if (mRaycast == nullptr || mState != State::Initialized)
return false;
- mRaycast->addContactLayer(phys::ContactLayer::EntityGround);
- mRaycast->addContactLayer(phys::ContactLayer::EntityGroundRough);
- mRaycast->addContactLayer(phys::ContactLayer::EntityGroundSmooth);
- mRaycast->addContactLayer(phys::ContactLayer::EntityAirWall);
- mRaycast->addContactLayer(phys::ContactLayer::EntityGroundObject);
- mRaycast->addContactLayer(phys::ContactLayer::EntityTree);
+ mRaycast->enableLayer(phys::ContactLayer::EntityGround);
+ mRaycast->enableLayer(phys::ContactLayer::EntityGroundRough);
+ mRaycast->enableLayer(phys::ContactLayer::EntityGroundSmooth);
+ mRaycast->enableLayer(phys::ContactLayer::EntityAirWall);
+ mRaycast->enableLayer(phys::ContactLayer::EntityGroundObject);
+ mRaycast->enableLayer(phys::ContactLayer::EntityTree);
if (_8944) {
sead::Vector3f v1 = mVec1 + sead::Vector3f{0, 4, 30};
sead::Vector3f v2 = mVec1 - sead::Vector3f{0, 4, 30};
- mRaycast->sub_7100FC38A0(v1, v2);
+ mRaycast->setStartAndEnd(v1, v2);
} else {
sead::Vector3f v1{mVec1.x, 2000.0f, mVec1.z};
sead::Vector3f v2{mVec1.x, -100.0f, mVec1.z};
- mRaycast->sub_7100FC38A0(v1, v2);
- // void** p = &mRaycast->mGroups[0]._68;
- // *p = &mDelegate;
+ mRaycast->setStartAndEnd(v1, v2);
+ mRaycast->setCallback(&mDelegate);
}
mState = State::LayersDone;
diff --git a/src/KingSystem/Map/mapAutoPlacement.h b/src/KingSystem/Map/mapAutoPlacement.h
index ecdb3a36..0ec68ba8 100644
--- a/src/KingSystem/Map/mapAutoPlacement.h
+++ b/src/KingSystem/Map/mapAutoPlacement.h
@@ -20,18 +20,7 @@ class AutoPlacement;
struct AutoPlacementFlowRes;
class PlacementThing;
-// TODO: move this
-struct Raycast {
- Raycast();
- virtual ~Raycast();
-
- static Raycast* create(void*, u32);
-
- void addContactLayer(phys::ContactLayer layer);
- void sub_7100FC55AC(u32);
- void release();
- void sub_7100FC38A0(const sead::Vector3f&, const sead::Vector3f&);
-};
+struct Raycast;
struct PlacementGroup {
sead::SafeString a;