// Check the given directions and reverse directions // to get a proper move direction // return zero if moster cannot move to none of them. private Vector3 ChooseDirection(Vector3 first, Vector3 second) { // check order // 1. first // 2. second // 3. -second // 4. -first if (!gridMove.IsReverseDirection(first) && !gridMove.CheckWall(first)) { return(first); } if (!gridMove.IsReverseDirection(second) && !gridMove.CheckWall(second)) { return(second); } first *= -1.0f; second *= -1.0f; if (!gridMove.IsReverseDirection(second) && !gridMove.CheckWall(second)) { return(second); } if (!gridMove.IsReverseDirection(first) && !gridMove.CheckWall(first)) { return(first); } return(Vector3.zero); }
Vector3 GetAdvModeMoveDirection() { Vector3[] directions = new Vector3[4] { new Vector3(1, 0, 0), new Vector3(-1, 0, 0), new Vector3(0, 0, 1), new Vector3(0, 0, -1) }; while (true) { Vector3 d = directions[Random.Range(0, 4)]; if (!m_grid_move.IsReverseDirection(d)) { return(d); } } }
// 从候选值中获取可能的移动方向 // 参数: // first 第一候选值 // second 第二候选值 // 返回值: // 移动方向/ 不允许移动时为Vector3.zero private Vector3 DirectionChoice(Vector3 first, Vector3 second) { // 按照下列顺序 // 第一候选值 // 第二候选值 // 第二候选值的反方向 // 第一候选值的反方向 // // 进行探测,返回允许移动的方向 // 第一候选值 if (!m_grid_move.IsReverseDirection(first) && !m_grid_move.CheckWall(first)) { return(first); } // 第二候选值 if (!m_grid_move.IsReverseDirection(second) && !m_grid_move.CheckWall(second)) { return(second); } first *= -1.0f; second *= -1.0f; // 第二候选值的反方向 if (!m_grid_move.IsReverseDirection(second) && !m_grid_move.CheckWall(second)) { return(second); } // 第一候选值的反方向 if (!m_grid_move.IsReverseDirection(first) && !m_grid_move.CheckWall(first)) { return(first); } return(Vector3.zero); }
// 이동 방향의 후보를 참고하여 이동 가능한 방향을 구한다. // 인수: // first 제1 후보. // second 제2 후보. // 반환값: // 이동 방향/ 이동 불가능하다면 Vector3.zero private Vector3 DirectionChoice(Vector3 first, Vector3 second) { // 제1 후보. // 제2 후보. // 제2 후보의 역방향. // 제1 후보의 역방향. // // 순서를 점검해 이동 가능한 방향으로 보낸다. // 제1 후보. if (!m_grid_move.IsReverseDirection(first) && !m_grid_move.CheckWall(first)) { return(first); } // 제2 후보. if (!m_grid_move.IsReverseDirection(second) && !m_grid_move.CheckWall(second)) { return(second); } first *= -1.0f; second *= -1.0f; // 제2 후보의 역방향. if (!m_grid_move.IsReverseDirection(second) && !m_grid_move.CheckWall(second)) { return(second); } // 제1 후보의 역방향. if (!m_grid_move.IsReverseDirection(first) && !m_grid_move.CheckWall(first)) { return(first); } return(Vector3.zero); }
// 移動方向の候補を参考にして移動可能な方向を得る. // 引数: // first 第一候補. // second 第二候補. // 戻り値: // 移動方向/ 移動不可能ならVector3.zero private Vector3 DirectionChoice(Vector3 first, Vector3 second) { // 第一候補. // 第二候補. // 第二候補の逆方向. // 第ー候補の逆方向. // // の順番に調べて、移動可能ならその方向を返す. // 第一候補. if (!m_grid_move.IsReverseDirection(first) && !m_grid_move.CheckWall(first)) { return(first); } // 第二候補. if (!m_grid_move.IsReverseDirection(second) && !m_grid_move.CheckWall(second)) { return(second); } first *= -1.0f; second *= -1.0f; // 第二候補の逆方向. if (!m_grid_move.IsReverseDirection(second) && !m_grid_move.CheckWall(second)) { return(second); } // 第ー候補の逆方向. if (!m_grid_move.IsReverseDirection(first) && !m_grid_move.CheckWall(first)) { return(first); } return(Vector3.zero); }