/*
	--------------------------------------------------------------
	KF_UseableMover
	--------------------------------------------------------------

    A Type of mover that is triggered by 'Use Objectives' in KF Story missions
    It interpolates while the player is holding the Use key and resets to
    its original position if the player lets go of the key.  (unless the Objective
    condition is set to keep use progress, in which case it will just freeze
    where it was at).

	Author :  Alex Quick

	--------------------------------------------------------------
*/

class KF_UseableMover extends Mover;

/* reference to the Use condition which controls this mover's interpolation */
var  ObjCondition_Use     ControllingCondition;

var  float                InitialMoveTime;

/* Interaction stubs -  Called by the Controlling Condition */
function Startedusing();
function StoppedUsing();


/* Called when a use condition 'possesses' this Mover */
function Notify_Controlled(ObjCondition_Use NewController)
{
    if(NewController != none)
    {
        ControllingCondition = NewController;
        InitialMoveTime = ControllingCondition.GetRemainingUseTime() ;
        MoveTime = InitialMoveTime;

        InitialState = 'UseControlled' ;
        Backup_InitialState = InitialState;
        GoToState('UseControlled');
    }
}

/* state the mover enters when it is being controlled by a player */
state UseControlled
{
    function StartedUsing()
    {
        InitialMoveTime = ControllingCondition.GetRemainingUseTime() ;
        MoveTime = InitialMoveTime;
        GoToState('UseControlled','Open');
    }

    function StoppedUsing()
    {
        if(ControllingCondition.bKeepUseProgress)
        {
            GoToState('UseControlled','Freeze');
        }
        else
        {
            InitialMoveTime = ControllingCondition.GetRemainingUseTime() * 0.1 ;
            MoveTime = InitialMoveTime;
            GoToState('UseControlled','Close');
        }
    }

Open:
	bClosed = false;
	DoOpen();
	FinishInterpolation();
	FinishedOpening();
	Stop;
Close:
	DoClose();
	FinishInterpolation();
	FinishedClosing();
	SetResetStatus( false );
Freeze:
	bInterpolating   = false;
    FinishInterpolation();
}


