cacontinuousfillfuel.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. class CAContinuousFillFuel : CAContinuousBase
  2. {
  3. protected float m_ItemQuantity;
  4. protected float m_SpentQuantity;
  5. protected float m_SpentQuantity_total;
  6. protected float m_EmptySpace; //basically free capacity
  7. protected float m_TimeElpased;
  8. protected float m_QuantityUsedPerSecond;
  9. protected float m_AdjustedQuantityUsedPerSecond;
  10. protected float m_DefaultTimeStep;
  11. protected ref Param1<float> m_SpentUnits;
  12. protected PlayerBase m_Player;
  13. void CAContinuousFillFuel( float quantity_used_per_second, float time_to_progress )
  14. {
  15. m_QuantityUsedPerSecond = quantity_used_per_second;
  16. m_DefaultTimeStep = time_to_progress;
  17. }
  18. //---------------------------------------------------------------------------
  19. override void Setup( ActionData action_data )
  20. {
  21. m_Player = action_data.m_Player;
  22. m_TimeElpased = 0;
  23. m_SpentQuantity = 0;
  24. if ( !m_SpentUnits )
  25. {
  26. m_SpentUnits = new Param1<float>( 0 );
  27. }
  28. else
  29. {
  30. m_SpentUnits.param1 = 0;
  31. }
  32. Transport vehicle = Transport.Cast(action_data.m_Target.GetObject());
  33. m_QuantityUsedPerSecond *= Math.Min(action_data.m_MainItem.GetLiquidThroughputCoef(),vehicle.GetLiquidThroughputCoef());
  34. Car car = Car.Cast(vehicle);
  35. Boat boat = Boat.Cast(vehicle);
  36. float fuelCapacity, currentFuel;
  37. if (car)
  38. {
  39. fuelCapacity = car.GetFluidCapacity( CarFluid.FUEL );
  40. currentFuel = car.GetFluidFraction( CarFluid.FUEL );
  41. }
  42. else if (boat)
  43. {
  44. fuelCapacity = boat.GetFluidCapacity( BoatFluid.FUEL );
  45. currentFuel = boat.GetFluidFraction( BoatFluid.FUEL );
  46. }
  47. currentFuel = currentFuel * fuelCapacity;
  48. m_EmptySpace = (fuelCapacity - currentFuel) * 1000;
  49. m_ItemQuantity = action_data.m_MainItem.GetQuantity();
  50. if ( m_EmptySpace <= m_ItemQuantity )
  51. m_ItemQuantity = m_EmptySpace;
  52. }
  53. //---------------------------------------------------------------------------
  54. override int Execute( ActionData action_data )
  55. {
  56. if ( !action_data.m_Player )
  57. {
  58. return UA_ERROR;
  59. }
  60. if ( m_ItemQuantity <= 0 )
  61. {
  62. return UA_FINISHED;
  63. }
  64. else
  65. {
  66. if ( m_SpentQuantity_total < m_ItemQuantity )
  67. {
  68. m_AdjustedQuantityUsedPerSecond = m_QuantityUsedPerSecond;//removed softskills
  69. m_SpentQuantity += m_AdjustedQuantityUsedPerSecond * action_data.m_Player.GetDeltaT();
  70. m_TimeElpased += action_data.m_Player.GetDeltaT();
  71. if ( m_TimeElpased >= m_DefaultTimeStep )
  72. {
  73. CalcAndSetQuantity( action_data );
  74. m_TimeElpased = 0;
  75. //Setup(action_data); //reset data after repeat
  76. }
  77. return UA_PROCESSING;
  78. }
  79. else
  80. {
  81. CalcAndSetQuantity( action_data );
  82. OnCompletePogress(action_data);
  83. return UA_FINISHED;
  84. }
  85. }
  86. }
  87. //---------------------------------------------------------------------------
  88. override int Cancel( ActionData action_data )
  89. {
  90. if ( !action_data.m_Player )
  91. {
  92. return UA_ERROR;
  93. }
  94. CalcAndSetQuantity( action_data );
  95. return UA_CANCEL;
  96. }
  97. //---------------------------------------------------------------------------
  98. override float GetProgress()
  99. {
  100. if ( m_ItemQuantity <= 0 )
  101. return 1;
  102. return -(m_SpentQuantity_total / m_ItemQuantity);
  103. }
  104. //---------------------------------------------------------------------------
  105. void CalcAndSetQuantity( ActionData action_data )
  106. {
  107. m_SpentQuantity_total += m_SpentQuantity;
  108. if ( m_SpentUnits )
  109. {
  110. m_SpentUnits.param1 = m_SpentQuantity;
  111. SetACData(m_SpentUnits);
  112. }
  113. if ( GetGame().IsServer() )
  114. {
  115. Car car = Car.Cast(action_data.m_Target.GetObject());
  116. Boat boat = Boat.Cast(action_data.m_Target.GetObject());
  117. if (car)
  118. {
  119. action_data.m_MainItem.AddQuantity( -m_SpentQuantity );
  120. car.Fill( CarFluid.FUEL, (m_SpentQuantity * 0.001) );
  121. }
  122. else if (boat)
  123. {
  124. action_data.m_MainItem.AddQuantity( -m_SpentQuantity );
  125. boat.Fill( BoatFluid.FUEL, (m_SpentQuantity * 0.001) );
  126. }
  127. }
  128. m_SpentQuantity = 0;
  129. }
  130. }