123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- class CAContinuousQuantityEdible : CAContinuousQuantityRepeat
- {
- protected float m_InitItemQuantity;
- protected float m_SpentQuantityTotal;
- protected float m_QuantityUsedPerSecondStart;
-
- void CAContinuousQuantityEdible(float quantity_used_per_second, float time_to_repeat)
- {
- m_QuantityUsedPerSecondStart = quantity_used_per_second;
- m_DefaultTimeToRepeat = time_to_repeat;
- m_InitItemQuantity = -1;
- m_SpentQuantityTotal = 0;
- }
-
- override void Setup(ActionData action_data)
- {
- super.Setup(action_data);
-
- if (m_InitItemQuantity < 0)
- m_InitItemQuantity = action_data.m_MainItem.GetQuantity();
-
- m_QuantityUsedPerSecond = m_QuantityUsedPerSecondStart;
- //qty adjustments based on item properties:
- if (action_data.m_MainItem.GetTemperature() > PlayerConstants.CONSUMPTION_DAMAGE_TEMP_THRESHOLD)
- m_QuantityUsedPerSecond = m_QuantityUsedPerSecondStart / UAMisc.CONSUMPTION_SLOWDOWN_COEF_HOT;
- }
-
- override void CalcAndSetQuantity(ActionData action_data)
- {
- if (m_SpentUnits)
- {
- m_SpentUnits.param1 = m_SpentQuantity;
- SetACData(m_SpentUnits);
-
- m_SpentQuantityTotal += m_SpentQuantity;
- }
-
- PlayerConsumeData consumeData = new PlayerConsumeData();
- consumeData.m_Type = EConsumeType.ITEM_CONTINUOUS;
- consumeData.m_Amount = m_SpentQuantity;
- consumeData.m_Source = action_data.m_MainItem;
- consumeData.m_Agents = 0;
- Edible_Base edibleItem;
- if (Edible_Base.CastTo(edibleItem, action_data.m_MainItem))
- {
- if (edibleItem.GetConsumptionPenaltyContext() & (EConsumptionPenaltyContext.DRINK|EConsumptionPenaltyContext.EAT) != EConsumptionPenaltyContext.NONE)
- consumeData.m_Agents = action_data.m_Player.GetBloodyHandsPenaltyAgents();
- }
-
- if (GetGame().IsServer())
- {
- PlayerBase ntarget = PlayerBase.Cast(action_data.m_Target.GetObject());
- if (ntarget)
- ntarget.Consume(consumeData);
- else
- action_data.m_Player.Consume(consumeData);
- }
- }
-
- override float GetProgress()
- {
- if (m_SpentQuantity > 0)
- return Math.Clamp((1 - (m_InitItemQuantity - m_SpentQuantity - m_SpentQuantityTotal ) / m_InitItemQuantity), 0, 1);
- else
- return Math.Clamp((1 - (m_InitItemQuantity - m_SpentQuantityTotal ) / m_InitItemQuantity), 0, 1);
- }
- }
|