arrowmanagerbase.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. class ArrowManagerBase
  2. {
  3. protected const int VERSION = 2;
  4. protected ref array<EntityAI> m_Arrows;
  5. protected EntityAI m_Owner;
  6. void ArrowManagerBase(EntityAI owner)
  7. {
  8. m_Owner = owner;
  9. m_Arrows = new array<EntityAI>();
  10. }
  11. void AddArrow(EntityAI arrow)
  12. {
  13. m_Arrows.Insert(arrow);
  14. }
  15. void RemoveArrow(EntityAI arrow)
  16. {
  17. m_Arrows.RemoveItem(arrow);
  18. }
  19. void ClearArrows()
  20. {
  21. foreach (EntityAI arrow : m_Arrows)
  22. {
  23. if (arrow)
  24. arrow.DeleteSafe();
  25. }
  26. m_Arrows.Clear();
  27. }
  28. int GetArrowsCount()
  29. {
  30. return m_Arrows.Count();
  31. }
  32. void DropArrow(int index)
  33. {
  34. if (m_Arrows.Count() > index)
  35. {
  36. EntityAI arrow = m_Arrows.Get(index);
  37. vector pos = arrow.GetPosition();
  38. m_Owner.RemoveChild(arrow);
  39. vector m4[4];
  40. Math3D.MatrixIdentity4(m4);
  41. m4[3] = pos;
  42. arrow.PlaceOnSurfaceRotated(m4, pos);
  43. arrow.SetTransform(m4);
  44. arrow.PlaceOnSurface();
  45. }
  46. }
  47. void DropFirstArrow()
  48. {
  49. DropArrow(0);
  50. }
  51. void DropAllArrows()
  52. {
  53. for (int i = m_Arrows.Count() - 1; i >= 0 ; i--)
  54. {
  55. DropArrow(i);
  56. }
  57. }
  58. EntityAI GetArrow(int index)
  59. {
  60. if (m_Arrows.Count() > index)
  61. {
  62. return m_Arrows.Get(index);
  63. }
  64. return null;
  65. }
  66. EntityAI GetFirstArrow()
  67. {
  68. if (m_Arrows.Count())
  69. {
  70. return m_Arrows.Get(0);
  71. }
  72. return null;
  73. }
  74. EntityAI AcquireFirstArrow(bool keepTransform = false)
  75. {
  76. EntityAI entity = GetFirstArrow();
  77. m_Owner.RemoveChild(entity, keepTransform);
  78. return entity;
  79. }
  80. }