Advertisement
expired6978

Untitled

Dec 12th, 2019
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.18 KB | None | 0 0
  1. // 18
  2. class MagicTarget
  3. {
  4. public:
  5.     virtual ~MagicTarget();
  6.  
  7.     virtual UInt8                   Unk_01(int);
  8.     virtual Character               * Unk_02(void);
  9.     virtual UInt8                   Unk_03(void);
  10.     virtual bool                    Unk_04(void);
  11.     virtual int                     Unk_05(int);
  12.     virtual bool                    Unk_06(void); // pure   030
  13.     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
  14.     virtual int                     Unk_08(int);
  15.     virtual void                    Unk_09(int);
  16.     virtual double                  Unk_0A(int, int, int);
  17.     virtual UInt8                   Unk_0B(int, int, int);
  18.  
  19. //  void    ** _vtbl;   // 00
  20.     UInt64 unk04;       // 08
  21.     UInt64 unk08;       // 10
  22.  
  23.     class ForEachActiveEffectVisitor
  24.     {
  25.     public:
  26.         virtual ~ForEachActiveEffectVisitor() { };
  27.  
  28.         virtual bool Visit(ActiveEffect* effect) = 0;
  29.     };
  30.  
  31.     class GetEffectCount : public MagicTarget::ForEachActiveEffectVisitor
  32.     {
  33.     public:
  34.         GetEffectCount() : m_count(0) { }
  35.  
  36.         virtual bool Visit(ActiveEffect* effect) override
  37.         {
  38.             m_count++;
  39.             return true;
  40.         }
  41.  
  42.         UInt32 GetCount() const { return m_count; }
  43.     private:
  44.         UInt32 m_count;
  45.     };
  46.  
  47.     class GetNthEffect : public MagicTarget::ForEachActiveEffectVisitor
  48.     {
  49.     public:
  50.         GetNthEffect(UInt32 n) : m_result(nullptr), m_n(n), m_count(0) { }
  51.  
  52.         virtual bool Visit(ActiveEffect* effect) override
  53.         {
  54.             if (m_count == m_n)
  55.             {
  56.                 m_result = effect;
  57.                 return false;
  58.             }
  59.             m_count++;
  60.             return true;
  61.         }
  62.  
  63.         ActiveEffect* GetResult() { return m_result; }
  64.     private:
  65.         ActiveEffect* m_result;
  66.         UInt32 m_n;
  67.         UInt32 m_count;
  68.     };
  69.  
  70.     class EffectVisitor : public MagicTarget::ForEachActiveEffectVisitor
  71.     {
  72.     public:
  73.         EffectVisitor(std::function<bool(ActiveEffect*)> func) : m_functor(func) { }
  74.  
  75.         virtual bool Visit(ActiveEffect* effect) override
  76.         {
  77.             return m_functor(effect);
  78.         }
  79.  
  80.     protected:
  81.         std::function<bool(ActiveEffect*)> m_functor;
  82.     };
  83.  
  84.     void VisitActiveEffects(std::function<bool(ActiveEffect*)> func)
  85.     {
  86.         ForEachActiveEffect(EffectVisitor(func));
  87.     }
  88.  
  89.     DEFINE_MEMBER_FN_1(ForEachActiveEffect, void, 0x00558580, MagicTarget::ForEachActiveEffectVisitor& visitor);
  90. };
  91. STATIC_ASSERT(sizeof(MagicTarget) == 0x18);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement