cacontinuousemptymagazine.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. class CAContinuousEmptyMagazine : CAContinuousBase
  2. {
  3. protected float m_TargetUnits;
  4. protected float m_SpentQuantity;
  5. protected float m_Time;
  6. protected float m_TimeToEjectOneBullet;
  7. protected ref Param1<float> m_SpentUnits;
  8. void CAContinuousEmptyMagazine( float eject_time )
  9. {
  10. m_TimeToEjectOneBullet = eject_time;
  11. m_Time = 0;
  12. }
  13. override void Setup( ActionData action_data )
  14. {
  15. if ( !m_SpentUnits )
  16. {
  17. m_SpentUnits = new Param1<float>(0);
  18. }
  19. else
  20. {
  21. m_SpentUnits.param1 = 0;
  22. }
  23. m_SpentQuantity = 0;
  24. Magazine itm;
  25. Class.CastTo(itm, action_data.m_MainItem);
  26. m_TargetUnits = itm.GetAmmoCount();
  27. }
  28. override int Execute( ActionData action_data )
  29. {
  30. if ( !action_data.m_Player )
  31. {
  32. return UA_ERROR;
  33. }
  34. if ( m_TargetUnits == 0 )
  35. {
  36. return UA_FINISHED;
  37. }
  38. else
  39. {
  40. if ( m_SpentQuantity < m_TargetUnits )
  41. {
  42. m_Time += action_data.m_Player.GetDeltaT();
  43. if ( m_Time > m_TimeToEjectOneBullet )
  44. {
  45. m_Time = 0;
  46. m_SpentQuantity += 1;
  47. }
  48. return UA_PROCESSING;
  49. }
  50. else
  51. {
  52. CalcAndSetQuantity( action_data );
  53. OnCompletePogress(action_data);
  54. return UA_FINISHED;
  55. }
  56. }
  57. }
  58. override int Cancel( ActionData action_data )
  59. {
  60. if ( !action_data.m_Player || !action_data.m_MainItem )
  61. {
  62. return UA_ERROR;
  63. }
  64. CalcAndSetQuantity( action_data );
  65. return UA_CANCEL;
  66. }
  67. override float GetProgress()
  68. {
  69. //float progress = m_SpentQuantity/m_TargetUnits;
  70. return m_SpentQuantity/m_TargetUnits;
  71. }
  72. //---------------------------------------------------------------------------
  73. void CalcAndSetQuantity( ActionData action_data )
  74. {
  75. if ( GetGame().IsServer() )
  76. {
  77. if ( action_data.m_MainItem )
  78. {
  79. Magazine itm;
  80. Class.CastTo(itm, action_data.m_MainItem);
  81. if ( m_SpentUnits )
  82. {
  83. m_SpentUnits.param1 = m_SpentQuantity;
  84. SetACData(m_SpentUnits);
  85. }
  86. itm.ServerAddAmmoCount(-m_SpentQuantity);
  87. }
  88. }
  89. }
  90. };