class CAContinuousQuantity : CAContinuousBase { protected float m_ItemQuantity; protected float m_SpentQuantity; protected float m_ItemMaxQuantity; protected float m_QuantityUsedPerSecond; protected float m_AdjustedQuantityUsedPerSecond; protected ref Param1 m_SpentUnits; void CAContinuousQuantity( float quantity_used_per_second ) { m_QuantityUsedPerSecond = quantity_used_per_second; } override void Setup( ActionData action_data ) { m_SpentQuantity = 0; if ( !m_SpentUnits ) { m_SpentUnits = new Param1(0); } else { m_SpentUnits.param1 = 0; } m_ItemMaxQuantity = action_data.m_MainItem.GetQuantityMax(); m_ItemQuantity = action_data.m_MainItem.GetQuantity(); } 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_AdjustedQuantityUsedPerSecond = m_QuantityUsedPerSecond; m_SpentQuantity += m_AdjustedQuantityUsedPerSecond * action_data.m_Player.GetDeltaT(); return UA_PROCESSING; } else { CalcAndSetQuantity( action_data ); OnCompletePogress(action_data); return UA_FINISHED; } } } override int Cancel( ActionData action_data ) { if ( !action_data.m_Player ) { return UA_ERROR; } CalcAndSetQuantity( action_data ); return UA_CANCEL; } override float GetProgress() { //float progress = m_SpentQuantity/m_ItemQuantity; return m_SpentQuantity/m_ItemQuantity; } //--------------------------------------------------------------------------- void CalcAndSetQuantity( ActionData action_data ) { if ( GetGame().IsServer() ) { if ( m_SpentUnits ) { m_SpentUnits.param1 = m_SpentQuantity; SetACData(m_SpentUnits); } if (action_data.m_MainItem) { action_data.m_MainItem.AddQuantity(- m_SpentQuantity,false,false); } } } };