Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        public void Setup()
        {
            _game = new StrategyGame();
            _game.SetupGame(GameSettings.Default());
            _game.LoadData();

            _target = new ResourceAsteroid(_game, new Random(), 100, 100, 0);
        }
Beispiel #3
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);
        }