private void SearchForAnotherRock(MinerShip miner) { _targetAsteroid = Utils.ClosestDistance(OrderPosition.X, OrderPosition.Y, _game.ResourceAsteroids.Where(_ => _.Active && !_.BeingMined && _.SectorId == miner.SectorId && _.IsVisibleToTeam(miner.Team - 1) && _.AvailableResources >= 50)); if (_targetAsteroid != null) { var p = _targetAsteroid.CenterPoint; OrderPosition = new PointF(p.X + Offset.X, p.Y + Offset.Y); OrderSectorId = miner.SectorId; miner.Target = _targetAsteroid; miner.Target.BeingMined = true; if (miner.Team == 1) { SoundEffect.Play(ESounds.vo_miner_intransit); } } else { // No more rocks to mine, done for now... OrderComplete = true; if (miner.Team == 1) { SoundEffect.Play(ESounds.vo_sal_minerpartial); } miner.OrderShip(new DockOrder(_game, miner, true), true); } }
public void Setup() { _game = new StrategyGame(); _game.SetupGame(GameSettings.Default()); _game.LoadData(); _target = new ResourceAsteroid(_game, new Random(), 100, 100, 0); }
public void SetupRocks() { var rnd = StrategyGame.Random; var settings = _game.GameSettings; var asteroids = new List <Asteroid>(); var centerPos = new Point(StrategyGame.ScreenWidth / 2, StrategyGame.ScreenHeight / 2); foreach (var sector in Sectors) { var rockSize = 60; var radiusX = 400; var radiusY = 300; // Rocks for (var i = 0; i < settings.RocksPerSectorGeneral; i++) { var a = new Asteroid(_game, rnd, rockSize, rockSize, sector.Id); a.CenterX = rnd.Next(centerPos.X - radiusX, centerPos.X + radiusX); a.CenterY = rnd.Next(centerPos.Y - radiusY, centerPos.Y + radiusY); for (var t = 0; t < _game.NumTeams; t++) { a.SetVisibleToTeam(t, settings.RocksVisible); } asteroids.Add(a); _game.BuildableAsteroids.Add(a); } // Tech rockSize = 70; radiusX = 200; radiusY = 100; List <Asteroid> rockOptions = new List <Asteroid>(); for (var i = 0; i < settings.RocksPerSectorTech; i++) { if (rockOptions.Count == 0) { rockOptions.Add(new TechCarbonAsteroid(_game, rnd, rockSize, rockSize, sector.Id)); rockOptions.Add(new TechSiliconAsteroid(_game, rnd, rockSize, rockSize, sector.Id)); rockOptions.Add(new TechUraniumAsteroid(_game, rnd, rockSize, rockSize, sector.Id)); } var a = rockOptions[rnd.Next(0, rockOptions.Count)]; a.CenterX = rnd.Next(centerPos.X - radiusX, centerPos.X + radiusX); a.CenterY = rnd.Next(centerPos.Y - radiusY, centerPos.Y + radiusY); asteroids.Add(a); for (var t = 0; t < _game.NumTeams; t++) { a.SetVisibleToTeam(t, settings.RocksVisible); } _game.BuildableAsteroids.Add(a); rockOptions.Remove(a); } // Resources rockSize = 40; radiusX = 300; radiusY = 200; for (var i = 0; i < settings.RocksPerSectorResource; i++) { var a = new ResourceAsteroid(_game, rnd, rockSize, rockSize, sector.Id); a.CenterX = rnd.Next(centerPos.X - radiusX, centerPos.X + radiusX); a.CenterY = rnd.Next(centerPos.Y - radiusY, centerPos.Y + radiusY); for (var t = 0; t < _game.NumTeams; t++) { a.SetVisibleToTeam(t, settings.RocksVisible); } _game.ResourceAsteroids.Add(a); asteroids.Add(a); } } _game.AllAsteroids.AddRange(asteroids); }