cacontinuousquantity.c 2.0 KB

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