Files
botw/src/KingSystem/ActorSystem/actIDamageManager.h
T
Léo Lam 419f8f46bb ksys/act: split IDamageManager out of DamageManagerBase
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)
2026-10-11 04:53:08 +02:00

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