//public List<TilePathfindingData> SelectedUnitPathfindingData { get; private set; } public async Task ChangeSelectedUnitAsync(Unit unitToSelect, GridTile[,] tileGrid) { //Clicked on an idle player unit if (unitToSelect.State != UnitState.Idle || SelectedUnit == unitToSelect) { return; } DeselectUnit(); SelectedUnit = unitToSelect; if (SelectedUnit.PathfindingData == null) { var unitPosition = SelectedUnit.transform.position; SelectedUnit.PathfindingData = await PathfindingHelper.CalculateUnitAvailablePathsAsync(unitPosition, tileGrid); } }
/// <summary> /// Moves the selectedUnit to the selectedTile, if the selected tile is a valid move for that unit /// </summary> public void MoveUnitToTile(GridTile selectedGridTile, Unit selectedUnit) { if (selectedGridTile.TerrainType == TerrainType.Impassable || ReferenceEquals(selectedUnit, null)) { return; } //checks that the selected tile is a valid move for the unit var selectedTilePathfindingData = selectedUnit.PathfindingData.FirstOrDefault(x => x.DestinationGridTile == selectedGridTile); if (selectedTilePathfindingData == null || selectedTilePathfindingData.MoveCost > selectedUnit.Movement) { return; } var pathfindingDataList = PathfindingHelper.GetPathToTile(selectedUnit.PathfindingData, selectedGridTile); //we move the unit reference from the starting tile to the selected tile selectedUnit.PathfindingData[0].DestinationGridTile.CurrentUnit = null; selectedGridTile.CurrentUnit = selectedUnit; selectedUnit.BeginFollowingTilePath(pathfindingDataList); _unitSelector.DeselectUnit(); selectedUnit.State = UnitState.OutOfActions; selectedUnit.PathfindingData = null; }
private void CalculatePath(List <ITile> field) { Path = PathfindingHelper.FindPath(CurrentLocation, NewDestination, field); }