mirror of
https://github.com/zeldaret/botw
synced 2026-10-23 09:46:11 -04:00
419f8f46bb
DamageManagerBase's root base class (previously DamageManagerBase_UnknownBase1) holds the damage callback list, and its code is linked among the ActorSystem objects rather than with the Game/Actor/Damage files. It appears to be an engine-side abstract base, so let's move it to KingSystem/ActorSystem as ksys::act::IDamageManager (unofficial name, following the ksys IManager/Manager pattern and Actor::getDamageMgr), together with DamageCallback and Struct20Base, and have Actor::getDamageMgr return it. DamageManagerBase now overrides its getters and inherits addDamageCallback/removeDamageCallback from it. The rest of the damage code stays in Game/Actor/Damage but is regrouped to match link order: Struct20::combineMaybe moves into actDamageManagerBase.cpp, Struct20::reset becomes inline and dmgStruct20.cpp becomes actDamageMgr.cpp. The uking::dmg namespace is merged into uking::act, so the files there take the act prefix too, and dmgInfoManager becomes actDamageInfoMgr after the class it holds. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
65 lines
1.4 KiB
C++
65 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include <basis/seadTypes.h>
|
|
#include <container/seadBuffer.h>
|
|
#include <prim/seadRuntimeTypeInfo.h>
|
|
|
|
namespace ksys::act {
|
|
|
|
class Actor;
|
|
class IDamageManager;
|
|
|
|
class DamageCallback {
|
|
public:
|
|
virtual ~DamageCallback() {}
|
|
virtual void call(u32* a1, s32* a2, u32* a3, u32* a4, u32* a5, u64 a6);
|
|
|
|
DamageCallback* mPrev;
|
|
DamageCallback* mNext;
|
|
IDamageManager* mDamageManager;
|
|
u32 mEventId;
|
|
};
|
|
|
|
class Struct20Base {
|
|
SEAD_RTTI_BASE(Struct20Base)
|
|
|
|
public:
|
|
virtual ~Struct20Base() = default;
|
|
|
|
virtual void reset();
|
|
virtual void combineMaybe(Struct20Base* other);
|
|
};
|
|
|
|
class IDamageManager {
|
|
public:
|
|
explicit IDamageManager(Actor* actor) : mActor(actor) {}
|
|
|
|
SEAD_RTTI_BASE(IDamageManager)
|
|
|
|
virtual ~IDamageManager() = default;
|
|
|
|
virtual u32 getDamage() = 0;
|
|
virtual s32 getField48() = 0;
|
|
virtual s32 getMinDmg() = 0;
|
|
virtual s32 getField50() = 0;
|
|
virtual s32 getField54() = 0;
|
|
virtual bool checkDamageFlags() = 0;
|
|
virtual s32 getFlags2() = 0;
|
|
virtual void addDamageCallback(s32 eventId, DamageCallback* callback);
|
|
virtual void removeDamageCallback(DamageCallback* callback);
|
|
|
|
// Sturct20 for Damage receive/send?
|
|
Struct20Base* mStruct20_a = nullptr;
|
|
Struct20Base* mStruct20_b = nullptr;
|
|
|
|
Actor* mActor = nullptr;
|
|
|
|
sead::Buffer<DamageCallback*> mCallbacks{};
|
|
|
|
// Callback status flags?
|
|
s32 mField_30 = 0;
|
|
s8 mField_34 = 0;
|
|
};
|
|
|
|
} // namespace ksys::act
|