class CAContinuousWaterPlant : CAContinuousQuantity { protected float m_PlantThirstyness; protected float m_TimeToComplete; void CAContinuousWaterPlant( float quantity_used_per_second ) { m_QuantityUsedPerSecond = quantity_used_per_second; } override void Setup( ActionData action_data ) { PlantBase target_PB; if (Class.CastTo(target_PB, action_data.m_Target.GetObject())) { m_SpentQuantity = 0; if ( !m_SpentUnits ) { m_SpentUnits = new Param1(0); } else { m_SpentUnits.param1 = 0; } if ( action_data.m_MainItem ) { m_ItemQuantity = action_data.m_MainItem.GetQuantity(); } if ( target_PB ) { m_PlantThirstyness = target_PB.GetWaterMax() - target_PB.GetWater(); } m_TimeToComplete = (Math.Min(m_PlantThirstyness,m_ItemQuantity))/m_QuantityUsedPerSecond; } } override int Execute( ActionData action_data ) { if ( !action_data.m_Player ) { return UA_ERROR; } if ( m_ItemQuantity <= 0 ) { return UA_FINISHED; } else { if ( m_SpentQuantity < m_ItemQuantity && m_SpentQuantity < m_PlantThirstyness ) { m_AdjustedQuantityUsedPerSecond = m_QuantityUsedPerSecond; //removed softskills m_SpentQuantity += m_QuantityUsedPerSecond * action_data.m_Player.GetDeltaT(); if ( m_Action ) { PlantBase plant; Class.CastTo(plant, action_data.m_Target.GetObject() ); Slot slot = plant.GetSlot(); slot.GiveWater( m_SpentQuantity ); } return UA_PROCESSING; } else { CalcAndSetQuantity( action_data ); OnCompletePogress(action_data); return UA_FINISHED; } } } override float GetProgress() { //float progress = (m_SpentQuantity*m_QuantityUsedPerSecond)/m_TimeToComplete; return (m_SpentQuantity*m_QuantityUsedPerSecond)/m_TimeToComplete; } };