diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 2806fda8..eee2aca6 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -73900,9 +73900,9 @@ 0x0000007100d4e310,sub_7100D4E310,28,_ZN4ksys3map10ObjectLink14sub_7100D4E310ENS0_14MapLinkDefTypeE? 0x0000007100d4e32c,isPlacementLODOrForSaleLink,24,_ZN4ksys3map10ObjectLink27isPlacementLODOrForSaleLinkENS0_14MapLinkDefTypeE 0x0000007100d4e344,PlacementLinkData::ctor,44,_ZN4ksys3map14ObjectLinkDataC1Ev -0x0000007100d4e370,PlacementLinkData::deleteArrays,136,_ZN4ksys3map14ObjectLinkData12deleteArraysEv! +0x0000007100d4e370,PlacementLinkData::deleteArrays,136,_ZN4ksys3map14ObjectLinkData12deleteArraysEv 0x0000007100d4e3f8,PlacementLinkData::allocLinks,556, -0x0000007100d4e624,PlacementLinkData::allocLinksToSelf,212,_ZN4ksys3map14ObjectLinkData16allocLinksToSelfEiPN4sead4HeapE! +0x0000007100d4e624,PlacementLinkData::allocLinksToSelf,212,_ZN4ksys3map14ObjectLinkData16allocLinksToSelfEiPN4sead4HeapE 0x0000007100d4e6f8,PlacementLinkData::dtor,292, 0x0000007100d4e81c,PlacementObj::x,256, 0x0000007100d4e91c,PlacementLinkData::addLink,440, diff --git a/src/KingSystem/ActorSystem/CMakeLists.txt b/src/KingSystem/ActorSystem/CMakeLists.txt index 27fd0a4a..fe74e421 100644 --- a/src/KingSystem/ActorSystem/CMakeLists.txt +++ b/src/KingSystem/ActorSystem/CMakeLists.txt @@ -86,6 +86,8 @@ target_sources(uking PRIVATE actBaseProcMgr.h actBaseProcUnit.cpp actBaseProcUnit.h + actClusteredRenderer.cpp + actClusteredRenderer.h actDebug.cpp actDebug.h actGlobalParameter.cpp diff --git a/src/KingSystem/ActorSystem/actClusteredRenderer.cpp b/src/KingSystem/ActorSystem/actClusteredRenderer.cpp new file mode 100644 index 00000000..fdf4b2fd --- /dev/null +++ b/src/KingSystem/ActorSystem/actClusteredRenderer.cpp @@ -0,0 +1 @@ +#include "KingSystem/ActorSystem/actClusteredRenderer.h" diff --git a/src/KingSystem/Map/mapClusteredRenderer.h b/src/KingSystem/ActorSystem/actClusteredRenderer.h similarity index 61% rename from src/KingSystem/Map/mapClusteredRenderer.h rename to src/KingSystem/ActorSystem/actClusteredRenderer.h index 91103d68..d9e68db9 100644 --- a/src/KingSystem/Map/mapClusteredRenderer.h +++ b/src/KingSystem/ActorSystem/actClusteredRenderer.h @@ -1,10 +1,10 @@ #pragma once -namespace ksys::map { +namespace ksys::act { class ClusteredRenderer { public: void startThread(); }; -} // namespace ksys::map +} // namespace ksys::act diff --git a/src/KingSystem/CMakeLists.txt b/src/KingSystem/CMakeLists.txt index 80c07ae8..9c40f3ff 100644 --- a/src/KingSystem/CMakeLists.txt +++ b/src/KingSystem/CMakeLists.txt @@ -9,6 +9,7 @@ add_subdirectory(Ecosystem) add_subdirectory(Effect) add_subdirectory(Event) add_subdirectory(Framework) +add_subdirectory(Graphics) add_subdirectory(Map) add_subdirectory(Mii) add_subdirectory(Physics) diff --git a/src/KingSystem/Graphics/CMakeLists.txt b/src/KingSystem/Graphics/CMakeLists.txt new file mode 100644 index 00000000..fdc1c04b --- /dev/null +++ b/src/KingSystem/Graphics/CMakeLists.txt @@ -0,0 +1,4 @@ +target_sources(uking PRIVATE + gfxForestRenderer.cpp + gfxForestRenderer.h +) diff --git a/src/KingSystem/Graphics/gfxForestRenderer.cpp b/src/KingSystem/Graphics/gfxForestRenderer.cpp new file mode 100644 index 00000000..8055101d --- /dev/null +++ b/src/KingSystem/Graphics/gfxForestRenderer.cpp @@ -0,0 +1 @@ +#include "KingSystem/Graphics/gfxForestRenderer.h" diff --git a/src/KingSystem/Graphics/gfxForestRenderer.h b/src/KingSystem/Graphics/gfxForestRenderer.h new file mode 100644 index 00000000..ec4d76c3 --- /dev/null +++ b/src/KingSystem/Graphics/gfxForestRenderer.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +namespace ksys::gfx { + +class ForestRenderer { +public: + s32 x_7(const sead::Vector3f& vec); +}; + +} // namespace ksys::gfx diff --git a/src/KingSystem/Map/CMakeLists.txt b/src/KingSystem/Map/CMakeLists.txt index 47c18a8c..7336bfd1 100644 --- a/src/KingSystem/Map/CMakeLists.txt +++ b/src/KingSystem/Map/CMakeLists.txt @@ -1,6 +1,4 @@ target_sources(uking PRIVATE - mapClusteredRenderer.cpp - mapClusteredRenderer.h mapTypes.h mapDebug.cpp mapDebug.h @@ -18,6 +16,8 @@ target_sources(uking PRIVATE mapPlacementMgr.h mapPlacementTree.cpp mapPlacementTree.h + mapRail.cpp + mapRail.h mapStagePreActorCache.cpp mapStagePreActorCache.h ) diff --git a/src/KingSystem/Map/mapClusteredRenderer.cpp b/src/KingSystem/Map/mapClusteredRenderer.cpp deleted file mode 100644 index 20b3f086..00000000 --- a/src/KingSystem/Map/mapClusteredRenderer.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "KingSystem/Map/mapClusteredRenderer.h" diff --git a/src/KingSystem/Map/mapObject.cpp b/src/KingSystem/Map/mapObject.cpp index d198ab44..4cdc137f 100644 --- a/src/KingSystem/Map/mapObject.cpp +++ b/src/KingSystem/Map/mapObject.cpp @@ -2,6 +2,7 @@ #include "KingSystem/ActorSystem/actBaseProcMgr.h" #include "KingSystem/ActorSystem/actInfoData.h" #include "KingSystem/GameData/gdtManager.h" +#include "KingSystem/Graphics/gfxForestRenderer.h" #include "KingSystem/Map/mapObjectLink.h" #include "KingSystem/Map/mapPlacementMgr.h" #include "KingSystem/Map/mapStagePreActorCache.h" @@ -430,7 +431,7 @@ bool Object::setupTargetLinks(Object* src, ObjectLink* link, sead::Heap* heap) { return false; } - if (mLinkData->mLinksToSelf.links != nullptr) + if (mLinkData->mLinksToSelf.links.isBufferReady()) return mLinkData->sub_7100D4EC40(src, link, this); if (!mLinkData->allocLinksToSelf(mNumLinksPointingToMe, heap)) @@ -498,7 +499,7 @@ void* Object::getRails() const { void* Object::getRails_0() const { if (mLinkData == nullptr) return nullptr; - return mLinkData->mRails; + return mLinkData->mRail; } bool Object::allocLinkData(sead::Heap* heap) { diff --git a/src/KingSystem/Map/mapObjectLink.cpp b/src/KingSystem/Map/mapObjectLink.cpp index fbfca297..2f2d44ca 100644 --- a/src/KingSystem/Map/mapObjectLink.cpp +++ b/src/KingSystem/Map/mapObjectLink.cpp @@ -138,44 +138,24 @@ bool ObjectLink::getObjectProcWithAccessor(act::ActorLinkConstDataAccess& access ObjectLinkData::ObjectLinkData() = default; void ObjectLinkData::deleteArrays() { - if (mRails) { - delete mRails; - mRails = nullptr; + if (mRail) { + delete mRail; + mRail = nullptr; } - if (mLinksOther.links) { - delete mLinksOther.links; - mLinksOther.links = nullptr; - mLinksOther.num_links = 0; - } - - if (mLinksCs.links) { - delete mLinksCs.links; - mLinksCs.links = nullptr; - mLinksCs.num_links = 0; - } - - if (mLinksReference) { - delete mLinksReference; - mLinksReference = nullptr; - mNumLinksReference = 0; - } - - if (mLinksToSelf.links) { - delete mLinksToSelf.links; - mLinksToSelf.links = nullptr; - mLinksToSelf.num_links = 0; - } + mLinksOther.links.freeBuffer(); + mLinksCs.links.freeBuffer(); + mObjects.freeBuffer(); + mLinksToSelf.links.freeBuffer(); } bool ObjectLinkData::allocLinksToSelf(s32 num_links, sead::Heap* heap) { - if (num_links < 1) - return true; - - mLinksToSelf.links = new (heap, std::nothrow_t()) ObjectLink[num_links](); - mLinksToSelf.num_links = num_links; - - return mLinksToSelf.links != nullptr; + if (num_links >= 1) { + mLinksToSelf.links.tryAllocBuffer(num_links, heap); + if (!mLinksToSelf.links.isBufferReady()) + return false; + } + return true; } ObjectLink* ObjectLinkData::findLinkWithType(MapLinkDefType t) { @@ -241,7 +221,7 @@ ObjectLink* ObjectLinkArray::findLinkWithType(MapLinkDefType type) { } ObjectLink* ObjectLinkArray::findLinkWithType_0(MapLinkDefType type) { - for (int i = 0; i != num_links; ++i) { + for (int i = 0; i < links.size(); ++i) { if (links[i].type == type) return &links[i]; } diff --git a/src/KingSystem/Map/mapObjectLink.h b/src/KingSystem/Map/mapObjectLink.h index d58a1c32..0068fe9f 100644 --- a/src/KingSystem/Map/mapObjectLink.h +++ b/src/KingSystem/Map/mapObjectLink.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include "KingSystem/Map/mapMubinIter.h" #include "KingSystem/Utils/Types.h" @@ -13,6 +14,7 @@ namespace ksys::map { class GenGroup; class Object; +class Rail; enum class MapLinkDefType { BasicSig = 0, @@ -61,6 +63,7 @@ enum class MapLinkDefType { }; struct ObjectLink { + ~ObjectLink() {} act::Actor* getObjectActor() const; bool getObjectProcWithAccessor(act::ActorLinkConstDataAccess& accessor) const; const char* getDescription() const; @@ -81,8 +84,7 @@ struct ObjectLinkArray { ObjectLink* findLinkWithType(MapLinkDefType type); ObjectLink* findLinkWithType_0(MapLinkDefType type); - s32 num_links = 0; - ObjectLink* links = nullptr; + sead::Buffer links; }; KSYS_CHECK_SIZE_NX150(ObjectLinkArray, 0x10); @@ -112,9 +114,8 @@ public: Object* mCreateLinksSrcObj = nullptr; Object* mDeleteLinksSrcObj = nullptr; - u32 mNumLinksReference = 0; - void* mLinksReference = nullptr; + sead::Buffer mObjects; ObjectLinkArray mLinksOther{}; ObjectLinkArray mLinksCs{}; ObjectLinkArray mLinksToSelf{}; @@ -126,7 +127,7 @@ public: bool field_57 = false; GenGroup* mGenGroup = nullptr; - void* mRails = nullptr; + Rail* mRail = nullptr; }; KSYS_CHECK_SIZE_NX150(ObjectLinkData, 0x68); diff --git a/src/KingSystem/Map/mapPlacementMgr.cpp b/src/KingSystem/Map/mapPlacementMgr.cpp index 6e6c3f9b..807dc199 100644 --- a/src/KingSystem/Map/mapPlacementMgr.cpp +++ b/src/KingSystem/Map/mapPlacementMgr.cpp @@ -1,9 +1,9 @@ #include "KingSystem/Map/mapPlacementMgr.h" #include #include "KingSystem/ActorSystem/actActorCreator.h" +#include "KingSystem/ActorSystem/actClusteredRenderer.h" #include "KingSystem/ActorSystem/actInfoData.h" #include "KingSystem/ActorSystem/actInstParamPack.h" -#include "KingSystem/Map/mapClusteredRenderer.h" #include "KingSystem/Map/mapObject.h" #include "KingSystem/Map/mapPlacementActors.h" #include "KingSystem/Map/mapPlacementTree.h" diff --git a/src/KingSystem/Map/mapPlacementMgr.h b/src/KingSystem/Map/mapPlacementMgr.h index 40ca95d6..d8189dfd 100644 --- a/src/KingSystem/Map/mapPlacementMgr.h +++ b/src/KingSystem/Map/mapPlacementMgr.h @@ -7,12 +7,12 @@ #include "KingSystem/ActorSystem/actActor.h" namespace ksys::act { +class ClusteredRenderer; class InstParamPack; -} +} // namespace ksys::act namespace ksys::map { -class ClusteredRenderer; class Object; class PlacementTree; class PlacementActors; @@ -131,7 +131,7 @@ public: PlacementTree* mPlacementTree = nullptr; u32 _7a8; void* mMassRenderer = nullptr; - ClusteredRenderer* mClusteredRenderer = nullptr; + act::ClusteredRenderer* mClusteredRenderer = nullptr; void* mPlacementNavi = nullptr; u32 mMassRendererReqCount = 0; u32 mMassRendererStatus = 0; diff --git a/src/KingSystem/Map/mapRail.cpp b/src/KingSystem/Map/mapRail.cpp new file mode 100644 index 00000000..939707d6 --- /dev/null +++ b/src/KingSystem/Map/mapRail.cpp @@ -0,0 +1 @@ +#include "KingSystem/Map/mapRail.h" diff --git a/src/KingSystem/Map/mapRail.h b/src/KingSystem/Map/mapRail.h new file mode 100644 index 00000000..dbbfca39 --- /dev/null +++ b/src/KingSystem/Map/mapRail.h @@ -0,0 +1,7 @@ +#pragma once + +namespace ksys::map { + +class Rail {}; + +} // namespace ksys::map diff --git a/src/KingSystem/Map/mapStagePreActorCache.h b/src/KingSystem/Map/mapStagePreActorCache.h index a739f1ba..7d87c958 100644 --- a/src/KingSystem/Map/mapStagePreActorCache.h +++ b/src/KingSystem/Map/mapStagePreActorCache.h @@ -3,12 +3,11 @@ #include #include -namespace ksys::map { +namespace ksys::gfx { +class ForestRenderer; +} -class ForestRenderer { -public: - s32 x_7(const sead::Vector3f& vec); -}; +namespace ksys::map { // TODO class StagePreActorCache { @@ -19,7 +18,7 @@ public: auto* getForestRenderer() { return mForestRenderer; } private: - ForestRenderer* mForestRenderer; + gfx::ForestRenderer* mForestRenderer; }; } // namespace ksys::map