cacontinuoustimecooking.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. class CAContinuousTimeCooking : CAContinuousBase
  2. {
  3. const float TIME_DAMAGE_THRESHOLD = 5.0;
  4. protected float m_LocalTimeElpased;
  5. protected float m_TimeElapsed;
  6. protected float m_TimeElapsedRepeat;
  7. protected float m_TimeElapsedDamage;
  8. protected ref Param1<float> m_SpentUnits;
  9. protected float m_TimeToCook;
  10. protected float m_AdjustedTimeToCook;
  11. protected Cooking m_CookingProcess;
  12. protected Edible_Base m_ItemToCook;
  13. protected float m_CookingUpdateTime;
  14. protected float m_AdjustedCookingUpdateTime;
  15. protected float m_MinTempToCook;
  16. void CAContinuousTimeCooking(float cooking_update_time)
  17. {
  18. m_CookingUpdateTime = cooking_update_time;
  19. }
  20. override void Setup(ActionData action_data)
  21. {
  22. m_TimeElapsedRepeat = 0;
  23. m_TimeElapsedDamage = 0;
  24. if (!m_SpentUnits)
  25. {
  26. m_SpentUnits = new Param1<float>(0);
  27. }
  28. else
  29. {
  30. m_SpentUnits.param1 = 0;
  31. }
  32. //fireplace & cooking process
  33. FireplaceBase fireplace = FireplaceBase.Cast(action_data.m_Target.GetObject());
  34. m_CookingProcess = fireplace.GetCookingProcess();
  35. m_ItemToCook = m_CookingProcess.GetFoodOnStick(action_data.m_MainItem);
  36. m_TimeToCook = m_CookingProcess.GetTimeToCook(m_ItemToCook, CookingMethodType.BAKING);
  37. m_MinTempToCook = m_CookingProcess.GetMinTempToCook(m_ItemToCook, CookingMethodType.BAKING);
  38. //update elapsed time
  39. m_TimeElapsed = m_ItemToCook.GetFoodStage().GetCookingTime();
  40. m_AdjustedCookingUpdateTime = m_CookingUpdateTime;
  41. m_AdjustedTimeToCook = m_TimeToCook;
  42. }
  43. override int Execute(ActionData action_data)
  44. {
  45. if ( !action_data.m_Player )
  46. {
  47. return UA_ERROR;
  48. }
  49. int cooking_state_update = 0;
  50. float cooking_time = m_ItemToCook.GetFoodStage().GetCookingTime();
  51. if (m_AdjustedTimeToCook > cooking_time)
  52. {
  53. m_TimeElapsed += action_data.m_Player.GetDeltaT();
  54. m_TimeElapsedRepeat += action_data.m_Player.GetDeltaT();
  55. if (m_ItemToCook.GetTemperature() < m_MinTempToCook)
  56. m_AdjustedTimeToCook += action_data.m_Player.GetDeltaT();
  57. if (m_TimeElapsedRepeat >= m_AdjustedCookingUpdateTime)
  58. {
  59. cooking_state_update = m_CookingProcess.CookOnStick(m_ItemToCook, m_CookingUpdateTime);
  60. if (GetGame().IsServer() && m_ItemToCook.GetTemperature() >= m_MinTempToCook)
  61. {
  62. m_TimeElapsedDamage += m_TimeElapsedRepeat;
  63. if (m_TimeElapsedDamage >= TIME_DAMAGE_THRESHOLD)
  64. {
  65. m_TimeElapsedDamage = 0;
  66. action_data.m_MainItem.DecreaseHealth(GameConstants.FIRE_ATTACHMENT_DAMAGE_PER_SECOND * TIME_DAMAGE_THRESHOLD, false);
  67. }
  68. }
  69. if (cooking_state_update == 1)
  70. {
  71. Setup(action_data);
  72. if (!GetGame().IsServer())
  73. {
  74. if (m_ItemToCook.IsMeat() && m_ItemToCook.GetFoodStage().GetFoodStageType() == FoodStageType.BAKED)
  75. {
  76. GetGame().GetAnalyticsClient().OnActionCookedSteak();
  77. }
  78. }
  79. }
  80. m_TimeElapsedRepeat = 0;
  81. }
  82. return UA_PROCESSING;
  83. }
  84. else
  85. {
  86. if (m_SpentUnits)
  87. {
  88. m_SpentUnits.param1 = m_TimeElapsed;
  89. SetACData(m_SpentUnits);
  90. }
  91. OnCompletePogress(action_data);
  92. return UA_FINISHED;
  93. }
  94. }
  95. override float GetProgress()
  96. {
  97. if (m_AdjustedTimeToCook != 0)
  98. {
  99. return m_TimeElapsed/m_AdjustedTimeToCook;
  100. }
  101. return 1;
  102. }
  103. };