Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 18
- class MagicTarget
- {
- public:
- virtual ~MagicTarget();
- virtual UInt8 Unk_01(int);
- virtual Character * Unk_02(void);
- virtual UInt8 Unk_03(void);
- virtual bool Unk_04(void);
- virtual int Unk_05(int);
- virtual bool Unk_06(void); // pure 030
- virtual void GetActiveEffects(void); // This changed to return BSLocklessSimpleList<ActiveEffect *>, instead we will implement the Visitor and let the game do the work for traversal
- virtual int Unk_08(int);
- virtual void Unk_09(int);
- virtual double Unk_0A(int, int, int);
- virtual UInt8 Unk_0B(int, int, int);
- // void ** _vtbl; // 00
- UInt64 unk04; // 08
- UInt64 unk08; // 10
- class ForEachActiveEffectVisitor
- {
- public:
- virtual ~ForEachActiveEffectVisitor() { };
- virtual bool Visit(ActiveEffect* effect) = 0;
- };
- class GetEffectCount : public MagicTarget::ForEachActiveEffectVisitor
- {
- public:
- GetEffectCount() : m_count(0) { }
- virtual bool Visit(ActiveEffect* effect) override
- {
- m_count++;
- return true;
- }
- UInt32 GetCount() const { return m_count; }
- private:
- UInt32 m_count;
- };
- class GetNthEffect : public MagicTarget::ForEachActiveEffectVisitor
- {
- public:
- GetNthEffect(UInt32 n) : m_result(nullptr), m_n(n), m_count(0) { }
- virtual bool Visit(ActiveEffect* effect) override
- {
- if (m_count == m_n)
- {
- m_result = effect;
- return false;
- }
- m_count++;
- return true;
- }
- ActiveEffect* GetResult() { return m_result; }
- private:
- ActiveEffect* m_result;
- UInt32 m_n;
- UInt32 m_count;
- };
- class EffectVisitor : public MagicTarget::ForEachActiveEffectVisitor
- {
- public:
- EffectVisitor(std::function<bool(ActiveEffect*)> func) : m_functor(func) { }
- virtual bool Visit(ActiveEffect* effect) override
- {
- return m_functor(effect);
- }
- protected:
- std::function<bool(ActiveEffect*)> m_functor;
- };
- void VisitActiveEffects(std::function<bool(ActiveEffect*)> func)
- {
- ForEachActiveEffect(EffectVisitor(func));
- }
- DEFINE_MEMBER_FN_1(ForEachActiveEffect, void, 0x00558580, MagicTarget::ForEachActiveEffectVisitor& visitor);
- };
- STATIC_ASSERT(sizeof(MagicTarget) == 0x18);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement