public AStarNode(GridSquare square, GridSquare target) { if (square == null) return; parent = null; this.square = square; this.target = target; neighbors = new List<GridSquare>(); hScore = square.manhattanDistanceTo(this.target); GridSquare[] potentialNeighbors = {square.Top, square.Bottom, square.Left, square.Right}; foreach (GridSquare s in potentialNeighbors) { //Complicated logic so that squares inside an enclave are accessible if (s == null) continue; if ((s != null && !s.isBlocked () && (!(square.isInStartBlock () || square.isInEndBlock()) || (!square.isBlocked () || square.isEnclaveEntrance()))) || (square.isInStartBlock () && s.isInStartBlock()) || (square.isInEndBlock () && s.isInEndBlock()) || (s.isEnclaveEntrance()) ) { neighbors.Add (s); } } }