public void drawPath(HexCoordinates start, HexCoordinates goal, HexCell.CellState cellState) { AStarSearch pathSearcher = new AStarSearch(this, start, goal); HexCoordinates node = pathSearcher.cameFrom [goal] as HexCoordinates; do { HexCell cell = getCellByCubeCoordinates(node.X, node.Y); cell.changeState(cellState); node = pathSearcher.cameFrom[node] as HexCoordinates; } while (!node.Equals(start)); getCellByCubeCoordinates(start.X, start.Y).changeState(cellState); }
//if can set unit return true else return false private bool canSetPosition(HexCoordinates coordinates) { if (coordinates.Equals(HexCoordinates.defaultCoordinate)) { return(false); } if (!UnitBar.Instance.isPlay) { if (PhotonNetwork.isMasterClient) { if (!(coordinates.Y < HexGrid.mapDetail.area[0])) { return(false); } } else { if (!(coordinates.Y > HexGrid.mapDetail.area[1])) { return(false); } } } Vector3 position = HexCoordinates.cubeToOffset(coordinates); int type = UnitBar.Instance._hexGrid.cells[(int)(position.x + (position.z * UnitBar.Instance._hexGrid.width))].mapType; if (type == 1 || type == 2) { return(false); } for (int i = 0; i < UnitBar.Instance.Units.Count; i++) { if (this.Equals(UnitBar.Instance.Units[i])) { continue; } if (coordinates.Equals(UnitBar.Instance.Units[i].coordinate)) { return(false); } } for (int i = 0; i < UnitBar.Instance.Towers.Count; i++) { if (coordinates.Equals(UnitBar.Instance.Towers[i].coordinate)) { return(false); } } for (int i = 0; i < UnitBar.Instance.enemyUnits.Count; i++) { if (coordinates.Equals(UnitBar.Instance.enemyUnits[i].coordinate)) { return(false); } } for (int i = 0; i < UnitBar.Instance.enemyTowers.Count; i++) { if (coordinates.Equals(UnitBar.Instance.enemyTowers[i].coordinate)) { return(false); } } return(true); }