summaryrefslogtreecommitdiff
path: root/src/KingSystem/Map/mapObject.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/KingSystem/Map/mapObject.h')
-rw-r--r--src/KingSystem/Map/mapObject.h105
1 files changed, 92 insertions, 13 deletions
diff --git a/src/KingSystem/Map/mapObject.h b/src/KingSystem/Map/mapObject.h
index 648ad3a2..3f62b226 100644
--- a/src/KingSystem/Map/mapObject.h
+++ b/src/KingSystem/Map/mapObject.h
@@ -1,8 +1,15 @@
#pragma once
#include <basis/seadTypes.h>
+#include <heap/seadHeap.h>
#include <prim/seadTypedBitFlag.h>
+#include "KingSystem/ActorSystem/actActor.h"
+#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
+#include "KingSystem/ActorSystem/actDebug.h"
+#include "KingSystem/Map/mapDebug.h"
#include "KingSystem/Map/mapMubinIter.h"
+#include "KingSystem/Map/mapObjectLink.h"
+#include "KingSystem/Map/mapPlacementMgr.h"
#include "KingSystem/Utils/Types.h"
namespace ksys::act {
@@ -11,14 +18,30 @@ class BaseProc;
namespace ksys::map {
-class LinkData;
+class Object;
+
+class ObjectLinkData;
+struct ObjectLink;
+struct ObjectLinkArray;
+
+class LinkTag;
// FIXME: incomplete
class Object {
public:
// TODO: rename
- enum class Flag0 {
-
+ enum class Flag0 : u32 {
+ _2 = 0x2,
+ _4 = 0x4,
+ _8 = 0x8,
+ _10 = 0x10,
+ _20 = 0x20,
+ _80 = 0x80,
+ _8000 = 0x8000,
+ _40000 = 0x40000,
+ _80000 = 0x80000,
+ Freed = 0xC65067E6,
+ _80000000 = 0x80000000,
};
enum class Flag {
@@ -39,11 +62,6 @@ public:
IsTurnActorBowChargeAndHasBasicSigLink = 0x8000,
};
- // TODO: rename
- enum class ActorFlag8 {
-
- };
-
enum class HardModeFlag {
ActorCreated = 0x1,
/// This actor only spawns in master mode (hard mode).
@@ -57,6 +75,69 @@ public:
Object();
~Object();
+ void free();
+
+ bool getActorWithAccessor(act::ActorLinkConstDataAccess& accessor) const;
+ act::Actor* getActor() const;
+ void registerBaseProc(act::BaseProc* proc);
+ void setBaseProcDirect(act::BaseProc* proc);
+
+ bool isEnemyOrNpcOrActiveOrMapPassive() const;
+ bool isFlags8Cleared() const;
+ bool isNpcOrActiveOrMapPassiveOrFlag1() const;
+ bool isMapPassive(const PlacementActors* pa) const;
+ bool checkActorDataFlag(const PlacementActors* pa, ActorData::Flag flag) const;
+ bool isEnemyOrNpc(const PlacementActors* pa) const;
+
+ f32 getDispDistanceMultiplier() const {
+ f32 mult = 1.0;
+
+ if (act::ActorDebug::instance() != nullptr)
+ mult = act::ActorDebug::instance()->mDispDistanceMultiplier;
+
+ return mult;
+ }
+
+ f32 getDispDistance(const PlacementActors* pa, bool get_diameter, bool ignore_radius) const;
+ f32 getDispDistance(const ActorData* data, bool get_diameter, u32 unused,
+ bool ignore_radius) const;
+ f32 getDispDistance(bool get_diameter, bool ignore_radius) const;
+
+ f32 getTraverseDist(const ActorData* data, bool get_diameter, u32 unused,
+ bool ignore_radius) const;
+ f32 getTraverseDistForLOD() const;
+ sead::Vector3f getScale() const;
+
+ const char* getUnitConfigName() const;
+ const char* getUnitConfigNameFromByaml() const;
+
+ Object* findPlacementLODLinkObject(const PlacementActors* unused) const;
+ Object* findPlacementLODLinkObject() const;
+
+ const char* getHashIdStringDebug() const;
+ const char* getHashIdStringDebug_0() const;
+
+ void* getRails() const;
+ void* getRails_0() const;
+ bool allocLinkData(sead::Heap* heap);
+ bool hasGenGroup() const;
+ void incrementLinkNum();
+ void decrementLinkNum();
+
+ sead::Vector3f getRotate() const;
+ void getTraversePosAndLoadDistance(sead::Vector3f* traverse_pos, f32* load_dist) const;
+ void getUniqueName(const char** out) const;
+ void setTranslate(const sead::Vector3f& translate);
+
+ // TODO:
+ void initData(MubinIter* iter, u8 idx, u32 actor_data_idx, ActorData* data);
+ void initRevivalGameDataFlagAndMiscFlags(ActorData* data, bool zero);
+ act::BaseProc* getActor_0(bool a1) const;
+ LinkTag* x_10(bool a1) const;
+ f32 getLoadDistance(bool get_diameter) const;
+ Object* findSrcLODLinkObject() const;
+ bool isRevivalGameDataFlagOn() const;
+
auto getFlags0() const { return mFlags0; }
auto getFlags() const { return mFlags; }
auto getActorFlags8() const { return mActorFlags8; }
@@ -71,19 +152,17 @@ public:
const MubinIter& getMubinIter() const { return mMubinIter; }
act::BaseProc* getProc() const { return mProc; }
- LinkData* getLinkData() const { return mLinkData; }
+ ObjectLinkData* getLinkData() const { return mLinkData; }
u32 getRevivalGameDataFlagHash() const { return mRevivalGameDataFlagHash; }
u32 getHashId() const { return mHashId; }
const sead::Vector3f& getTranslate() const { return mTranslate; }
- void setTranslate(const sead::Vector3f& translate);
- auto getTraverseDist() const { return mTraverseDist; }
auto getTraverseDistInt() const { return mTraverseDistInt; }
private:
- sead::TypedBitFlag<Flag0, u32> mFlags0;
+ sead::TypedBitFlag<Flag0, sead::Atomic<u32>> mFlags0;
u16 mActorDataIdx = 0xffff;
sead::TypedBitFlag<Flag, u16> mFlags;
u8 mIdx = 0;
@@ -97,7 +176,7 @@ private:
void* _20 = nullptr;
MubinIter mMubinIter;
act::BaseProc* mProc = nullptr;
- LinkData* mLinkData = nullptr;
+ ObjectLinkData* mLinkData = nullptr;
u32 mRevivalGameDataFlagHash = 0xffffffff;
void* _50 = nullptr;
u32 mHashId = 0;