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 }
/// <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); }
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]); * } */ } }