Exemplo n.º 1
0
    /*animations:
     *      step (|dy| <= 1) (simultaneous slide)
     *      hop (|dy| == 2) (simultaneous slide)
     *      jump (dy > 2) (jump, then slide)
     *      fall (dy < -2) (slide, then fall)
     *      leap (|dx/dz| > 1) (slide with arc)
     *
     *      special (|dy| <= 1) (simultaneous slide)
     *      special-fall (|dy| > 1) (slide, then fall)*/

    public MoveType MoveTypeForMove(Vector3 to, Vector3 from)
    {
        float dx  = to.x - from.x;
        float dy  = to.y - from.y;
        float dz  = map.AbsDZForMove(to, from);
        float adz = Mathf.Abs(dz);

        if (specialMoving)
        {
            if (dz != 0)
            {
                return(MoveType.SpecialFall);
            }
            if (dx != 0 || dy != 0)
            {
                return(MoveType.Special);
            }
            return(MoveType.None);
        }
        if (Mathf.Abs(dx) + Mathf.Abs(dy) > 1)
        {
            return(MoveType.Leap);
        }
        if (adz <= 1)
        {
            return(MoveType.Step);
        }
        if (adz == 2)
        {
            return(MoveType.Hop);
        }
        if (dz > 2)
        {
            return(MoveType.Jump);
        }
        if (dz < -2)
        {
            return(MoveType.Fall);
        }
        return(MoveType.None);
    }