cpp_aggregate_de.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // This header file defines the base aggregate structure. Every
  2. // aggregate must have a link to its next one and a pointer
  3. // to certain functions that an aggregate must supply.
  4. // When implementing an aggregate, you MUST derive from this!
  5. // (In C, just put it as the first member in your structure..)
  6. #ifndef __CPPAGGREGATE_DE__
  7. #define __CPPAGGREGATE_DE__
  8. #include "serverobj_de.h"
  9. class Aggregate
  10. {
  11. public :
  12. // Very important that these data members are EXACTLY the same as
  13. // the C version of this class (Aggregate_t)...
  14. Aggregate *m_pNextAggregate;
  15. // Hook functions for the aggregate..
  16. AggregateEngineMessageFn m_EngineMessageFn;
  17. AggregateObjectMessageFn m_ObjectMessageFn;
  18. Aggregate()
  19. {
  20. m_EngineMessageFn = _EngineMessageFn;
  21. m_ObjectMessageFn = _ObjectMessageFn;
  22. }
  23. virtual ~Aggregate() {}
  24. protected :
  25. virtual DDWORD EngineMessageFn(LPBASECLASS pObject, DDWORD messageID, void *pData, DFLOAT lData) { return 1; }
  26. virtual DDWORD ObjectMessageFn(LPBASECLASS pObject, HOBJECT hSender, DDWORD messageID, HMESSAGEREAD hRead) { return 1; }
  27. private :
  28. static DDWORD _EngineMessageFn(LPBASECLASS pObject, LPAGGREGATE pAggregate, DDWORD messageID, void *pData, DFLOAT lData);
  29. static DDWORD _ObjectMessageFn(LPBASECLASS pObject, LPAGGREGATE pAggregate, HOBJECT hSender, DDWORD messageID, HMESSAGEREAD hRead);
  30. };
  31. // Inlines...
  32. inline DDWORD Aggregate::_EngineMessageFn(LPBASECLASS pObject, LPAGGREGATE pAggregate, DDWORD messageID, void *pData, DFLOAT lData)
  33. {
  34. if (pAggregate)
  35. {
  36. return pAggregate->EngineMessageFn(pObject, messageID, pData, lData);
  37. }
  38. return 0;
  39. }
  40. inline DDWORD Aggregate::_ObjectMessageFn(LPBASECLASS pObject, LPAGGREGATE pAggregate, HOBJECT hSender, DDWORD messageID, HMESSAGEREAD hRead)
  41. {
  42. if (pAggregate)
  43. {
  44. return pAggregate->ObjectMessageFn(pObject, hSender, messageID, hRead);
  45. }
  46. return 0;
  47. }
  48. #endif // __CPP_AGGREGATE_DE__