diff options
| author | Léo Lam <leo@leolam.fr> | 2020-11-17 00:54:46 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-17 00:54:46 +0100 |
| commit | 4d4edbfe87e77c4e712e7fef7ed8087fff18220e (patch) | |
| tree | 05b09142b74869f74779a00deff410019b8dcaac /src/KingSystem/Map/mapObject.h | |
| parent | b0498a15bf6f1782f1429ffbd0b03c187f61d7c9 (diff) | |
| parent | d4f80d7cf97641742dd56cabc0b1d503cfdf7b0d (diff) | |
Merge pull request #15 from notyourav/placement
implement map::Object getters
Diffstat (limited to 'src/KingSystem/Map/mapObject.h')
| -rw-r--r-- | src/KingSystem/Map/mapObject.h | 105 |
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; |
