Example #1
0
    void Start()
    {
        characterAnimator = Player.GetChild(0).GetComponent <Animator>();

        Player.eulerAngles = new Vector3(0, 0, 0); // TEMP - could initial start rot be decided by the level?
        currentFaceDir     = EFaceDirection.East;  // TEMP
    }
Example #2
0
    /// <param name="rotateTimes">0向上, 90向左, -90(270)向右, 180向下</param>
    public static bool GetFaceDirection(out int distance, out EFaceDirection faceDirection, Pos checkPos, char checkCode, int rotateTimes = 0)
    {
        faceDirection = EFaceDirection.Forward;
        distance      = 0;
        var rawDir = dirs[rotateTimes];
        var dir    = rawDir / rawDir.Length;

        for (int i = 0, max = offsets.Length; i < max; i++)
        {
            var v = offsets[i];
            if (MapManager.GetCode(checkPos._x + v._x, checkPos._y + v._y) != checkCode)
            {
                continue;
            }
//			Debug.LogError("v: " + v);
            string label = "";
            if (dir._y == 0)             // 角色朝向为左右
            {
                Pos xp = new Pos(0, v._y);
                Pos yp = new Pos(v._x, 0);
//				// 正交,判断角色左右
//				if (xp.Length != 0)
//				{
//					label += dir._x * v._y > 0 ? "左" : "右";
//				}
//				// 平行,判断角色前后
//				if(yp.Length != 0)
//				{
//					label += (dir._x * v._x > 0 ? "前" : "后");
//				}

                // 确定朝向
                if (xp.Length == 0)
                {
                    faceDirection = dir._x * v._x > 0 ? EFaceDirection.Forward : EFaceDirection.Backward;
                }
                else if (yp.Length == 0)
                {
                    faceDirection = dir._x * v._y > 0 ? EFaceDirection.Left : EFaceDirection.Right;
                }
                else
                {
                    if (dir._x * v._y > 0)
                    {
                        faceDirection = dir._x * v._x > 0 ? EFaceDirection.LeftForward : EFaceDirection.LeftBackward;
                    }
                    else
                    {
                        faceDirection = dir._x * v._x > 0 ? EFaceDirection.RightForward : EFaceDirection.RightBackward;
                    }
                }
            }
            if (dir._x == 0)             // 角色朝向为上下
            {
                // 正交,判断角色左右
                Pos xp = new Pos(v._x, 0);
                Pos yp = new Pos(0, v._y);
//				if (xp.Length != 0)
//				{
//					label += dir._y * v._x < 0 ? "左" : "右";
//				}
//				// 平行,判断角色前后
//				if(yp.Length != 0)
//				{
//					label += (dir._y * v._y > 0 ? "前" : "后");
//				}

                // 确定朝向
                if (xp.Length == 0)
                {
                    faceDirection = dir._y * v._y > 0 ? EFaceDirection.Forward : EFaceDirection.Backward;
                }
                else if (yp.Length == 0)
                {
                    faceDirection = dir._y * v._x < 0 ? EFaceDirection.Left : EFaceDirection.Right;
                }
                else
                {
                    if (dir._y * v._x < 0)
                    {
                        faceDirection = dir._y * v._y > 0 ? EFaceDirection.LeftForward : EFaceDirection.LeftBackward;
                    }
                    else
                    {
                        faceDirection = dir._y * v._y > 0 ? EFaceDirection.RightForward : EFaceDirection.RightBackward;
                    }
                }
            }
//			label += "方" + (v.Length == 1 ? "一" : "两") + "米";
            distance = v.Length;
//			UIManager._Instance.SetTipInfo(string.Format(TipMessage._dirTip, label));
            return(true);
        }
        return(false);
    }
Example #3
0
    private void PlayerInput()
    {
        if (!bInputDisabled)
        {
            #region MoveNorth
            if (Input.GetKey(KeyCode.W))
            {
                switch (currentFaceDir)
                {
                case EFaceDirection.North:
                    movePlayer(orientation[(int)EFaceDirection.North]);
                    break;

                case EFaceDirection.East:
                    bIsTurningLeft = true;
                    StartCoroutine(HandleTurnRotation());
                    currentFaceDir = EFaceDirection.North;
                    break;

                case EFaceDirection.South:
                    bIsTurningLeft = false;
                    StartCoroutine(HandleTurnRotation());
                    currentFaceDir = EFaceDirection.West;
                    break;

                case EFaceDirection.West:
                    bIsTurningLeft = false;
                    StartCoroutine(HandleTurnRotation());
                    currentFaceDir = EFaceDirection.North;
                    break;
                }
            }
            #endregion

            #region MoveEast
            if (Input.GetKey(KeyCode.D))
            {
                switch (currentFaceDir)
                {
                case EFaceDirection.North:
                    bIsTurningLeft = false;
                    StartCoroutine(HandleTurnRotation());
                    currentFaceDir = EFaceDirection.East;
                    break;

                case EFaceDirection.East:
                    movePlayer(orientation[(int)EFaceDirection.East]);
                    break;

                case EFaceDirection.South:
                    bIsTurningLeft = true;
                    StartCoroutine(HandleTurnRotation());
                    currentFaceDir = EFaceDirection.East;
                    break;

                case EFaceDirection.West:
                    bIsTurningLeft = true;
                    StartCoroutine(HandleTurnRotation());
                    currentFaceDir = EFaceDirection.South;
                    break;
                }
            }
            #endregion

            #region MoveSouth
            if (Input.GetKey(KeyCode.S))
            {
                switch (currentFaceDir)
                {
                case EFaceDirection.North:
                    bIsTurningLeft = true;
                    StartCoroutine(HandleTurnRotation());
                    currentFaceDir = EFaceDirection.West;
                    break;

                case EFaceDirection.East:
                    bIsTurningLeft = false;
                    StartCoroutine(HandleTurnRotation());
                    currentFaceDir = EFaceDirection.South;
                    break;

                case EFaceDirection.South:
                    movePlayer(orientation[(int)EFaceDirection.South]);
                    break;

                case EFaceDirection.West:
                    bIsTurningLeft = true;
                    StartCoroutine(HandleTurnRotation());
                    currentFaceDir = EFaceDirection.South;
                    break;
                }
            }
            #endregion

            #region MoveWest
            if (Input.GetKey(KeyCode.A))
            {
                switch (currentFaceDir)
                {
                case EFaceDirection.North:
                    bIsTurningLeft = true;
                    StartCoroutine(HandleTurnRotation());
                    currentFaceDir = EFaceDirection.West;
                    break;

                case EFaceDirection.East:
                    bIsTurningLeft = true;
                    StartCoroutine(HandleTurnRotation());
                    currentFaceDir = EFaceDirection.North;
                    break;

                case EFaceDirection.South:
                    bIsTurningLeft = false;
                    StartCoroutine(HandleTurnRotation());
                    currentFaceDir = EFaceDirection.West;
                    break;

                case EFaceDirection.West:
                    movePlayer(orientation[(int)EFaceDirection.West]);
                    break;
                }
            }
            #endregion

            /*
             * if (Input.GetKeyDown(KeyCode.A)) {
             *  movePlayer(orientation[(int)EFaceDirection.North]);
             * }
             * if (Input.GetKeyDown(KeyCode.D)) {
             *  movePlayer(orientation[(int)EFaceDirection.East]);
             * }
             * if (Input.GetKeyDown(KeyCode.W)) {
             *  movePlayer(orientation[(int)EFaceDirection.South]);
             * }
             * if (Input.GetKeyDown(KeyCode.S)) {
             *  movePlayer(orientation[(int)EFaceDirection.West]);
             * }
             */
        }
    }