cacontinuousquantityrepeat.c 2.3 KB

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