public void SetState(StateID stateID)
    {
        if (!states.ContainsKey (stateID))
        {
            return;
        }

        if (currentState != null)
        {
            currentState.Leave();
        }

        currentState = states [stateID];
        currentState.Enter ();
    }