public override void ComputePossibleMoves(List <Move> possibleMoves, List <Position> includedPositions, MoveFilter moveFilter) { if ((moveFilter & MoveFilter.Fire) == 0) { return; } if (!WeaponLoaded) { return; } List <Tile> resultList = new List <Tile>(); ListHitableTiles(resultList, includedPositions); foreach (Tile n in resultList) { // Cannot fire on ground if (n.Unit == null) { continue; } // Cannot fire on ourselves if (n.Unit.Owner == Unit.Owner) { continue; } Move move = new Move(); move.MoveType = MoveType.Fire; move.UnitId = Unit.UnitId; //move.Stats = Unit.Stats; move.OtherUnitId = n.Unit.UnitId; move.Positions = new List <Position>(); move.Positions.Add(Unit.Pos); move.Positions.Add(n.Pos); possibleMoves.Add(move); } }
public void ComputePossibleMoves(List <Move> possibleMoves, List <Position> includedPositions, MoveFilter moveFilter) { if (Assembler != null) { Assembler.ComputePossibleMoves(possibleMoves, includedPositions, moveFilter); } if (Extractor != null) { Extractor.ComputePossibleMoves(possibleMoves, includedPositions, moveFilter); } if (Weapon != null) { Weapon.ComputePossibleMoves(possibleMoves, includedPositions, moveFilter); } if (Engine != null) { Engine.ComputePossibleMoves(possibleMoves, includedPositions, moveFilter); } }
public override void ComputePossibleMoves(List <Move> possibleMoves, List <Position> includedPositions, MoveFilter moveFilter) { if ((moveFilter & MoveFilter.Assemble) == 0 && (moveFilter & MoveFilter.Upgrade) == 0) { return; } if (!CanProduce()) { return; } Dictionary <Position, TileWithDistance> neighbors = CollectOutputPositions(); foreach (TileWithDistance neighbor in neighbors.Values) { if (!neighbor.Tile.CanMoveTo()) { continue; } if (includedPositions != null) { if (!includedPositions.Contains(neighbor.Pos)) { continue; } } if (neighbor.Unit == null) { if ((moveFilter & MoveFilter.Assemble) > 0) { if (Level > 0) { possibleMoves.Add(CreateAssembleMove(neighbor.Pos, "Engine")); possibleMoves.Add(CreateAssembleMove(neighbor.Pos, "Armor")); possibleMoves.Add(CreateAssembleMove(neighbor.Pos, "Weapon")); possibleMoves.Add(CreateAssembleMove(neighbor.Pos, "Assembler")); possibleMoves.Add(CreateAssembleMove(neighbor.Pos, "Extractor")); possibleMoves.Add(CreateAssembleMove(neighbor.Pos, "Container")); possibleMoves.Add(CreateAssembleMove(neighbor.Pos, "Reactor")); possibleMoves.Add(CreateAssembleMove(neighbor.Pos, "Radar")); } } } else { if (neighbor.Unit.Owner.PlayerModel.Id == Unit.Owner.PlayerModel.Id) { if (Level > 0 && !neighbor.Unit.IsComplete()) { if ((moveFilter & MoveFilter.Upgrade) > 0) { if (neighbor.Unit.Engine == null || neighbor.Unit.Engine.Level < 3) { possibleMoves.Add(CreateUpgradeMove(neighbor.Pos, "Engine")); } if (neighbor.Unit.Armor == null || neighbor.Unit.Armor.Level < 3) { possibleMoves.Add(CreateUpgradeMove(neighbor.Pos, "Armor")); } if (neighbor.Unit.Weapon == null || neighbor.Unit.Weapon.Level < 3) { possibleMoves.Add(CreateUpgradeMove(neighbor.Pos, "Weapon")); } if (neighbor.Unit.Extractor == null || neighbor.Unit.Extractor.Level < 3) { possibleMoves.Add(CreateUpgradeMove(neighbor.Pos, "Extractor")); } if (neighbor.Unit.Assembler == null || neighbor.Unit.Assembler.Level < 3) { possibleMoves.Add(CreateUpgradeMove(neighbor.Pos, "Assembler")); } if (neighbor.Unit.Container == null || neighbor.Unit.Container.Level < 3) { possibleMoves.Add(CreateUpgradeMove(neighbor.Pos, "Container")); } if (neighbor.Unit.Reactor == null || neighbor.Unit.Reactor.Level < 3) { possibleMoves.Add(CreateUpgradeMove(neighbor.Pos, "Reactor")); } if (neighbor.Unit.Radar == null || neighbor.Unit.Radar.Level < 3) { possibleMoves.Add(CreateUpgradeMove(neighbor.Pos, "Radar")); } } } } else { // Enemy nearby? OMG } } } }
public virtual void ComputePossibleMoves(List <Move> possibleMoves, List <Position> includedPositions, MoveFilter moveFilter) { }
public override void ComputePossibleMoves(List <Move> possibleMoves, List <Position> includedPositions, MoveFilter moveFilter) { if ((moveFilter & MoveFilter.Move) == 0) { return; } if (Unit.Power == 0) { return; } // Never called by controls List <Tile> openList = new List <Tile>(); List <Tile> reachedTiles = new List <Tile>(); List <Position> reachedPos = new List <Position>(); Tile startTile = Unit.Game.Map.GetTile(Unit.Pos); openList.Add(startTile); reachedTiles.Add(startTile); while (openList.Count > 0) { Tile tile = openList[0]; openList.RemoveAt(0); // Distance at all double d = tile.Pos.GetDistanceTo(this.Unit.Pos); if (d >= Range) { continue; } foreach (Tile n in tile.Neighbors) { if (n.Pos == Unit.Pos) { continue; } if (includedPositions != null) { if (!includedPositions.Contains(n.Pos)) { continue; } } if (!reachedTiles.Contains(n)) { reachedTiles.Add(n); double d1 = n.Pos.GetDistanceTo(this.Unit.Pos); if (d1 < Range) { openList.Add(n); Move move = new Move(); move.MoveType = MoveType.Move; PathFinderFast pathFinder = new PathFinderFast(Unit.Owner.Game.Map); move.Positions = pathFinder.FindPath(Unit, Unit.Pos, n.Pos); if (move.Positions != null) { move.UnitId = Unit.UnitId; move.PlayerId = Unit.Owner.PlayerModel.Id; while (move.Positions.Count > Range + 1) { move.Positions.RemoveAt(move.Positions.Count - 1); } Position finalPos = move.Positions[move.Positions.Count - 1]; if (!reachedPos.Contains(finalPos)) { reachedPos.Add(finalPos); // Do not move on other units if (Unit.Game.Map.GetTile(finalPos).Unit == null) { possibleMoves.Add(move); } else { //int x = 0; } } } } } } } }