Esempio n. 1
0
    public void Reset()
    {
        currentCollider = null;
        prevCollider    = null;
        pickedCollider  = null;
        isPinching      = false;
        wasPinching     = false;

        currentPickState = GameController.PickState.None;
        prevPickState    = GameController.PickState.None;
    }
Esempio n. 2
0
    void StateTransition()
    {
        switch (prevPickState)
        {
        case GameController.PickState.None:

            if (isPinching != wasPinching)               // None to PickingNothing
            {
                Assert(wasPinching == false);
                wasPinching   = isPinching;
                prevPickState = currentPickState = GameController.PickState.PickingNothing;
            }
            else if (currentCollider != prevCollider && currentCollider != null)                 // None to Hovering
            {
                prevCollider  = currentCollider;
                prevPickState = currentPickState = GameController.PickState.Hovering;
                gameController.OnPickStateChanged(
                    GameController.PickState.None,
                    GameController.PickState.Hovering,
                    this,
                    currentCollider.gameObject);
            }

            break;


        case GameController.PickState.Hovering:

            if (isPinching != wasPinching && currentCollider != null)               // Hovering to Picking
            {
                Assert(wasPinching == false);
                wasPinching    = isPinching;
                prevPickState  = currentPickState = GameController.PickState.Picking;
                pickedCollider = currentCollider;
                gameController.OnPickStateChanged(
                    GameController.PickState.Hovering,
                    GameController.PickState.Picking,
                    this,
                    currentCollider.gameObject);
            }
            else if (currentCollider != prevCollider && prevCollider != null)                 // Hovering to None
            {
                prevPickState = currentPickState = GameController.PickState.None;
                gameController.OnPickStateChanged(
                    GameController.PickState.Hovering,
                    GameController.PickState.None,
                    this,
                    prevCollider.gameObject);
                prevCollider   = currentCollider;
                pickedCollider = null;
            }
            else
            {
                Assert(false);
            }

            break;


        case GameController.PickState.Picking:

            if (isPinching != wasPinching && currentCollider != null)               // Picking to Hovering
            {
                Assert(wasPinching == true);
                wasPinching   = isPinching;
                prevPickState = currentPickState = GameController.PickState.Hovering;
                gameController.OnPickStateChanged(
                    GameController.PickState.Picking,
                    GameController.PickState.Hovering,
                    this,
                    currentCollider.gameObject);
                pickedCollider = null;
            }
            else if (currentCollider != prevCollider)                 // Picking to Pulling
            {
                Assert(prevCollider != null);
                Assert(currentCollider == null);
                Assert(pickedCollider != null);
                prevCollider  = currentCollider;                //null
                prevPickState = currentPickState = GameController.PickState.Pulling;
                gameController.OnPickStateChanged(
                    GameController.PickState.Picking,
                    GameController.PickState.Pulling,
                    this,
                    pickedCollider.gameObject);
            }
            else
            {
                Assert(false);
            }

            break;


        case GameController.PickState.Pulling:

            if (isPinching != wasPinching)               // Pulling to None
            {
                Assert(wasPinching == true);
                Assert(isPinching == false);
                Assert(pickedCollider != null);
                wasPinching   = isPinching;
                prevPickState = currentPickState = GameController.PickState.None;
                gameController.OnPickStateChanged(
                    GameController.PickState.Pulling,
                    GameController.PickState.None,
                    this,
                    pickedCollider.gameObject);
                pickedCollider = null;
            }
            else if (currentCollider != prevCollider)                 // Pulling to Picking
            {
                Assert(isPinching == true);

                if (currentCollider != pickedCollider)
                {
                    currentCollider = null;
                    return;                     // ignore entering other than previously picked collider
                }
                else
                {
                    Assert(currentCollider == pickedCollider);
                    prevCollider = pickedCollider;
                    gameController.OnPickStateChanged(
                        GameController.PickState.Pulling,
                        GameController.PickState.Picking,
                        this,
                        currentCollider.gameObject);
                }
            }

            break;


        case GameController.PickState.PickingNothing:

            if (isPinching != wasPinching)               // PickNothing to None
            {
                Assert(wasPinching == true);
                wasPinching   = isPinching;
                prevPickState = currentPickState = GameController.PickState.None;
            }
            else if (prevCollider != currentCollider)                 // PickNothing to PickNothingColliding
            {
                prevCollider    = null;
                currentCollider = null;
            }

            break;


        case GameController.PickState.PickingNothingColliding:

            if (isPinching != wasPinching)               // PickNothingColliding to Hovering
            {
                Assert(wasPinching == true);
                wasPinching = isPinching;
                gameController.OnPickStateChanged(
                    GameController.PickState.None,
                    GameController.PickState.Hovering,
                    this,
                    currentCollider.gameObject);
            }
            else if (prevCollider != currentCollider)                 // PickNothingColliding to PickNothing
            {
                Assert(prevCollider != null);
                Assert(currentCollider == null);
                prevCollider = currentCollider;                 //null
            }
            else
            {
                Assert(false);
            }

            break;
        }
    }