cacontinuousquantityedible.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. class CAContinuousQuantityEdible : CAContinuousQuantityRepeat
  2. {
  3. protected float m_InitItemQuantity;
  4. protected float m_SpentQuantityTotal;
  5. protected float m_QuantityUsedPerSecondStart;
  6. void CAContinuousQuantityEdible(float quantity_used_per_second, float time_to_repeat)
  7. {
  8. m_QuantityUsedPerSecondStart = quantity_used_per_second;
  9. m_DefaultTimeToRepeat = time_to_repeat;
  10. m_InitItemQuantity = -1;
  11. m_SpentQuantityTotal = 0;
  12. }
  13. override void Setup(ActionData action_data)
  14. {
  15. super.Setup(action_data);
  16. if (m_InitItemQuantity < 0)
  17. m_InitItemQuantity = action_data.m_MainItem.GetQuantity();
  18. m_QuantityUsedPerSecond = m_QuantityUsedPerSecondStart;
  19. //qty adjustments based on item properties:
  20. if (action_data.m_MainItem.GetTemperature() > PlayerConstants.CONSUMPTION_DAMAGE_TEMP_THRESHOLD)
  21. m_QuantityUsedPerSecond = m_QuantityUsedPerSecondStart / UAMisc.CONSUMPTION_SLOWDOWN_COEF_HOT;
  22. }
  23. override void CalcAndSetQuantity(ActionData action_data)
  24. {
  25. if (m_SpentUnits)
  26. {
  27. m_SpentUnits.param1 = m_SpentQuantity;
  28. SetACData(m_SpentUnits);
  29. m_SpentQuantityTotal += m_SpentQuantity;
  30. }
  31. PlayerConsumeData consumeData = new PlayerConsumeData();
  32. consumeData.m_Type = EConsumeType.ITEM_CONTINUOUS;
  33. consumeData.m_Amount = m_SpentQuantity;
  34. consumeData.m_Source = action_data.m_MainItem;
  35. consumeData.m_Agents = 0;
  36. Edible_Base edibleItem;
  37. if (Edible_Base.CastTo(edibleItem, action_data.m_MainItem))
  38. {
  39. if (edibleItem.GetConsumptionPenaltyContext() & (EConsumptionPenaltyContext.DRINK|EConsumptionPenaltyContext.EAT) != EConsumptionPenaltyContext.NONE)
  40. consumeData.m_Agents = action_data.m_Player.GetBloodyHandsPenaltyAgents();
  41. }
  42. if (GetGame().IsServer())
  43. {
  44. PlayerBase ntarget = PlayerBase.Cast(action_data.m_Target.GetObject());
  45. if (ntarget)
  46. ntarget.Consume(consumeData);
  47. else
  48. action_data.m_Player.Consume(consumeData);
  49. }
  50. }
  51. override float GetProgress()
  52. {
  53. if (m_SpentQuantity > 0)
  54. return Math.Clamp((1 - (m_InitItemQuantity - m_SpentQuantity - m_SpentQuantityTotal ) / m_InitItemQuantity), 0, 1);
  55. else
  56. return Math.Clamp((1 - (m_InitItemQuantity - m_SpentQuantityTotal ) / m_InitItemQuantity), 0, 1);
  57. }
  58. }