Exemplo n.º 1
0
    // Update is called once per frame
    void Update()
    {
        if (Game.s_instance.m_gameState != Game.GAMESTATE.PLAYING)
        {
            return;
        }

        Vector3 directionVector = Vector3.zero;

        switch (m_directionComponent.m_direction)
        {
        case Direction.DIRECTION_ENUM.NORTH:
            directionVector = Vector3.up;
            break;

        case Direction.DIRECTION_ENUM.EAST:
            directionVector = Vector3.right;
            break;

        case Direction.DIRECTION_ENUM.SOUTH:
            directionVector = Vector3.down;
            break;

        case Direction.DIRECTION_ENUM.WEST:
            directionVector = Vector3.left;
            break;
        }

        // Move
        gameObject.transform.position += directionVector * Time.deltaTime * m_speed;

        if (m_lastCollidedJunction)
        {
            bool turn = false;
            switch (m_directionComponent.m_direction)
            {
            case Direction.DIRECTION_ENUM.NORTH:
                if (gameObject.transform.position.y >= m_lastCollidedJunction.gameObject.transform.position.y)
                {
                    turn = true;
                }
                break;

            case Direction.DIRECTION_ENUM.EAST:
                if (gameObject.transform.position.x >= m_lastCollidedJunction.gameObject.transform.position.x)
                {
                    turn = true;
                }
                break;

            case Direction.DIRECTION_ENUM.SOUTH:
                if (gameObject.transform.position.y <= m_lastCollidedJunction.gameObject.transform.position.y)
                {
                    turn = true;
                }
                break;

            case Direction.DIRECTION_ENUM.WEST:
                if (gameObject.transform.position.x <= m_lastCollidedJunction.gameObject.transform.position.x)
                {
                    turn = true;
                }
                break;
            }
            if (turn)
            {
                gameObject.transform.position    = m_lastCollidedJunction.gameObject.transform.position;
                m_directionComponent.m_direction = m_lastCollidedJunction.GetCurrentOutputDirection();
                m_lastCollidedJunction           = null;
            }
        }

        // Clamp
        if (gameObject.transform.position.x < Game.s_instance.m_screenExtents.xMin ||
            gameObject.transform.position.x > Game.s_instance.m_screenExtents.xMax ||
            gameObject.transform.position.y < Game.s_instance.m_screenExtents.yMin ||
            gameObject.transform.position.y > Game.s_instance.m_screenExtents.yMax)
        {
            gameObject.transform.position    = m_originalPosition;
            m_directionComponent.m_direction = m_originalDirection;
        }

        // Force Z depth
        gameObject.transform.position = new Vector3(gameObject.transform.position.x, gameObject.transform.position.y, -1.0f);
    }