public void MinerLogic(IEnumerable <Unit> miners) { var nextM = AI.MYTHICITE.next(3); foreach (var miner in miners) { if (miners.Count() > 15 && !Solver.sunCollision(miner, nextM.x, nextM.y) && AI.GAME.CurrentTurn >= (AI.GAME.OrbitsProtected - 2)) { Solver.mine(miner, new[] { AI.MYTHICITE }, true, true); } Solver.mine(miner, AI.GAME.Bodies.Where(b => b.MaterialType == "legendarium"), true, true); Solver.mine(miner, AI.GAME.Bodies.Where(b => b.MaterialType == "rarium"), true, true); Solver.mine(miner, AI.GAME.Bodies.Where(b => b.MaterialType == "genarium"), true, true); var baseBody = this.Game.CurrentPlayer.HomeBase; if (miner.remainingCapacity() == 0) { Solver.moveToward(miner, baseBody.X, baseBody.Y, baseBody.Radius, true); } } }
public void OwnIt(Unit miner1, Unit miner2) { var transports = this.Player.Units.Where(u => u.Job == AI.TRANSPORT).ToArray(); var didMine = false; if (miner1.inMiningRangeThisTurn(AI.MYTHICITE) && !miner1.IsBusy) { if (miner1.remainingCapacity() > 0) { Solver.mine(miner1, new[] { AI.MYTHICITE }); didMine = true; if (miner2.Energy < 10) { Solver.moveToward(miner2, AI.PLAYER.HomeBase.X, AI.PLAYER.HomeBase.Y, 0, true); } else { Solver.moveAheadOf(miner2, AI.MYTHICITE, 2); } } else { var transport = transports.FirstOrDefault(t => t.canTransferThisTurn(miner1)); if (transport != null) { Solver.moveToward(transport, miner1.X, miner1.Y, transport.Job.Range); Solver.transfer(transport, miner1, "mythicite", 1); Solver.mine(miner1, new[] { AI.MYTHICITE }); didMine = true; if (miner2.Energy < 10) { Solver.moveToward(miner2, AI.PLAYER.HomeBase.X, AI.PLAYER.HomeBase.Y, 0, true); } else { Solver.moveAheadOf(miner2, AI.MYTHICITE, 2); } } } } if (!didMine && miner2.inMiningRangeThisTurn(AI.MYTHICITE) && !miner2.IsBusy) { if (miner2.remainingCapacity() > 0) { Solver.mine(miner2, new[] { AI.MYTHICITE }); if (miner1.Energy < 10) { Solver.moveToward(miner2, AI.PLAYER.HomeBase.X, AI.PLAYER.HomeBase.Y, 0, true); } else { Solver.moveAheadOf(miner1, AI.MYTHICITE, 2); } } else { var transport = transports.FirstOrDefault(t => t.canTransferThisTurn(miner2)); if (transport != null) { Solver.moveToward(transport, miner2.X, miner2.Y, transport.Job.Range); Solver.transfer(transport, miner2, "mythicite", 1); Solver.mine(miner2, new[] { AI.MYTHICITE }); if (miner1.Energy < 10) { Solver.moveToward(miner2, AI.PLAYER.HomeBase.X, AI.PLAYER.HomeBase.Y, 0, true); } else { Solver.moveAheadOf(miner1, AI.MYTHICITE, 2); } } } } else { Solver.mine(miner1, new[] { AI.MYTHICITE }, true, true); Solver.mine(miner2, new[] { AI.MYTHICITE }, true, true); } foreach (var transport in transports) { if (transport.remainingCapacity() == 0) { Solver.moveToward(transport, AI.PLAYER.HomeBase.X, AI.PLAYER.HomeBase.Y, 0, true); } else { Solver.moveAheadOf(transport, AI.MYTHICITE, 2); } } }