コード例 #1
0
        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);
            }
        }
コード例 #2
0
 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);
     }
 }
コード例 #3
0
        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
                    }
                }
            }
        }
コード例 #4
0
ファイル: Ability.cs プロジェクト: reiswind/CrazyBots
 public virtual void ComputePossibleMoves(List <Move> possibleMoves, List <Position> includedPositions, MoveFilter moveFilter)
 {
 }
コード例 #5
0
        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;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }