cacontinuousfertilizegardenslot.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. class CAContinuousFertilizeGardenSlot : CAContinuousQuantity
  2. {
  3. protected float m_SlotFertilizerNeed;
  4. protected float m_TimeToComplete;
  5. protected float m_SpentQuantityTotal;
  6. protected float m_StartQuantity;
  7. protected Slot m_Slot;
  8. protected string m_Selection;
  9. void CAContinuousFertilizeGardenSlot( float quantity_used_per_second )
  10. {
  11. m_QuantityUsedPerSecond = quantity_used_per_second;
  12. m_TimeToComplete = 0;
  13. }
  14. override void Setup( ActionData action_data )
  15. {
  16. GardenBase target_GB;
  17. if ( Class.CastTo(target_GB, action_data.m_Target.GetObject() ) )
  18. {
  19. m_SpentQuantity = 0;
  20. m_StartQuantity = action_data.m_MainItem.GetQuantity();
  21. if ( !m_SpentUnits )
  22. {
  23. m_SpentUnits = new Param1<float>(0);
  24. }
  25. else
  26. {
  27. m_SpentUnits.param1 = 0;
  28. }
  29. if ( action_data.m_MainItem )
  30. m_ItemQuantity = action_data.m_MainItem.GetQuantity();
  31. if ( target_GB )
  32. {
  33. /*string selection = target_GB.GetActionComponentName(action_data.m_Target.GetComponentIndex());
  34. Slot slot = target_GB.GetSlotBySelection( selection );*/
  35. array<string> selections = new array<string>;
  36. target_GB.GetActionComponentNameList(action_data.m_Target.GetComponentIndex(), selections);
  37. for (int s = 0; s < selections.Count(); s++)
  38. {
  39. //string selection = selections[s];
  40. m_Selection = selections[s];
  41. m_Slot = target_GB.GetSlotBySelection( m_Selection );
  42. if (m_Slot)
  43. break;
  44. }
  45. string item_type = action_data.m_MainItem.GetType();
  46. float consumed_quantity = GetGame().ConfigGetFloat( "cfgVehicles " + item_type + " Horticulture ConsumedQuantity" );
  47. float max = m_Slot.GetFertilizerQuantityMax();
  48. m_SlotFertilizerNeed = max - consumed_quantity;
  49. }
  50. m_TimeToComplete = (Math.Min(m_SlotFertilizerNeed,m_ItemQuantity))/m_QuantityUsedPerSecond;
  51. }
  52. }
  53. override int Execute( ActionData action_data )
  54. {
  55. if ( !action_data.m_Player )
  56. {
  57. return UA_ERROR;
  58. }
  59. if ( m_SpentQuantity >= m_ItemQuantity )
  60. {
  61. return UA_FINISHED;
  62. }
  63. else
  64. {
  65. if ( m_SpentQuantity <= m_ItemQuantity )
  66. {
  67. m_SpentQuantity += m_QuantityUsedPerSecond * action_data.m_Player.GetDeltaT();
  68. GardenBase garden_base;
  69. Class.CastTo(garden_base, action_data.m_Target.GetObject() );
  70. //string selection = garden_base.GetActionComponentName(action_data.m_Target.GetComponentIndex());
  71. m_SpentQuantityTotal += m_SpentQuantity;
  72. if (GetGame().IsServer())
  73. {
  74. action_data.m_MainItem.AddQuantity( -m_SpentQuantity );
  75. }
  76. garden_base.Fertilize( action_data.m_Player, action_data.m_MainItem, m_SpentQuantity, m_Selection );
  77. return UA_PROCESSING;
  78. }
  79. else
  80. {
  81. CalcAndSetQuantity( action_data );
  82. OnCompletePogress(action_data);
  83. return UA_FINISHED;
  84. }
  85. }
  86. }
  87. override float GetProgress()
  88. {
  89. /*if ( m_TimeToComplete == 0) //Prevent division by 0 case
  90. {
  91. return -1;
  92. }*/
  93. return -(m_SpentQuantityTotal / m_StartQuantity);
  94. //return (m_SpentQuantity)/m_ItemQuantity;///(m_TimeToComplete * m_QuantityUsedPerSecond)/m_ItemQuantity;
  95. }
  96. };