private cellScript.Direction GetDirection() { Vector3 curPos = transform.position; Vector3 playerPos = player.transform.position; float currentDistance = MahattanDistance(curPos, playerPos); cellScript.Direction direction = cellScript.Direction.None; // try to move horizontally if (MahattanDistance(curPos + Vector3.right * 3, playerPos) < currentDistance && !movement.GetNextPosition(cellScript.Direction.Right).Equals(gridMovement.NotMovable)) { direction = cellScript.Direction.Right; } else if (MahattanDistance(curPos - Vector3.right * 3, playerPos) < currentDistance && !movement.GetNextPosition(cellScript.Direction.Left).Equals(gridMovement.NotMovable)) { direction = cellScript.Direction.Left; } // try to move vertically else if (MahattanDistance(curPos + Vector3.forward * 3, playerPos) < currentDistance && !movement.GetNextPosition(cellScript.Direction.Up).Equals(gridMovement.NotMovable)) { direction = cellScript.Direction.Up; } else if (MahattanDistance(curPos - Vector3.forward * 3, playerPos) < currentDistance && !movement.GetNextPosition(cellScript.Direction.Down).Equals(gridMovement.NotMovable)) { direction = cellScript.Direction.Down; } return(direction); }
private void MoveInDirection(cellScript.Direction direction) { nextPosition = movement.GetNextPosition(direction); // next position is available in this direction // so we can move now if (!nextPosition.Equals(gridMovement.NotMovable)) { isMoving = true; } }
private void ChasePlayer() { cellScript.Direction direction = GetDirection(); if (direction.Equals(cellScript.Direction.None)) { moveCount++; if (moveCount == 2) { moveCount = 0; player.playerTurn = true; manager.SaveState(); } } else { nextPosition = movement.GetNextPosition(direction); isMoving = true; } }
public Vector3 GetNextPosition(cellScript.Direction direction) { cellScript next = current.neighborInDirection[direction]; // there is a cell in this direction, ok if (next != null) { // check if that cell is movable or not if (current.neighbors[next]) { // if movable, then move // get x and z offset, y unchanged float xoffset = next.transform.position.x - transform.position.x; float zoffset = next.transform.position.z - transform.position.z; Vector3 motion = new Vector3(xoffset, 0.0f, zoffset); return(transform.position + motion); } // else stay } return(NotMovable); }