public PhaseDistanceTarget(Phase phase, FlightShip ship, float distanceTarget)
 {
     _phase         = phase;
     _ship          = ship;
     _shipTransform = ship.Entity.Get <Transform>();
     _targetZ       = _shipTransform.Location.Z - distanceTarget;
 }
示例#2
0
        public override void Start()
        {
            Ship    = Entity.EntityManager.GetAll <FlightShip>().First();
            _camera = Entity.EntityManager.GetAll <FlightCameraControl>().First();

            _oldCameraScale     = _camera.CameraScale;
            _camera.CameraScale = 5f;

            var random        = new Random();
            var takenUpgrades = Ship.Upgrades.ToArray();
            var possible      = PotentialUpgrades
                                .Where(x => takenUpgrades.All(y => y.GetType() != x.GetType()))
                                .Select(x => (x, random.Next(1000)))
                                .ToList() as List <(UpgradeBase, int)>;

            possible
            .Sort((x, y) => x.Item2 - y.Item2);
            var candidates = possible.Select(x => x.Item1)
                             .ToArray();

            if (candidates.Length < 3)
            {
                candidates = PotentialUpgrades;
            }

            _dispose = UserInterfaceManager.Create(new UpgradeMenu(
                                                       new List <UpgradeBase>()
            {
                candidates[0],
                candidates[1],
                candidates[2]
            },
                                                       OnSelect
                                                       ));
        }
示例#3
0
 public AsteroidSpawner(FlightShip playerShip, int difficult, Distribution <Type> distribution, PhaseDistanceTarget distanceTarget = null)
 {
     _flightShip     = playerShip;
     _distanceTarget = distanceTarget;
     _distribution   = distribution;
     _difficult      = difficult;
     _spawnPerWave   = 1 + (int)Math.Ceiling(_difficult / 25.0);
 }
示例#4
0
        public override void Start()
        {
            Ship                = Entity.EntityManager.GetAll <FlightShip>().First();
            _camera             = Entity.EntityManager.GetAll <FlightCameraControl>().First();
            _oldCameraScale     = _camera.CameraScale;
            _camera.CameraScale = 60f;
            SpawnEnemy(new Vector3(-6, 0, -5), 2, 3);

            var targetEnt = Entity.Create();

            _target = targetEnt.Add(new PhaseKillTarget(this, _droneEntities.Select(x => x.Get <FlightShip>()), 0));
            targetEnt.Add(new PhaseKillTargetRenderable());
        }
示例#5
0
        public virtual void OnHit(FlightNode node, FlightShip ship, Point gridLocation, Vector3 nodeLocation, Section section)
        {
            ship.Damage(gridLocation, Damage);
            Entity.Delete();

            var explosionEnt = Entity.EntityManager.Create();

            explosionEnt.Add(new Transform()
            {
                Location = Transform.Location
            });
            explosionEnt.Add(new ClusterExplosionEffect());
        }
示例#6
0
        public virtual void OnDestruction(FlightShip ship, FlightNode node)
        {
            var explosionEnt = ship.Entity.EntityManager.Create();

            explosionEnt.Add(new Transform()
            {
                Location = node.GlobalLocation
            });
            explosionEnt.Add(new ClusterExplosionEffect()
            {
                DistanceScaleFactor = 3f,
                ScaleFactor         = 2f,
                Components          = 16
            });
        }
示例#7
0
        public override void Start()
        {
            Ship                = Entity.EntityManager.GetAll <FlightShip>().First();
            _camera             = Entity.EntityManager.GetAll <FlightCameraControl>().First();
            _oldCameraScale     = _camera.CameraScale;
            _camera.CameraScale = 60f;
            SpawnWave(new Vector3(0, 0, -20), 2, 0, true);

            var targetEnt = Entity.Create();

            _target = targetEnt.Add(new PhaseKillTarget(this, _enemies.Select(x => x.Get <FlightShip>()), 0));
            targetEnt.Add(new PhaseKillTargetRenderable());

            _asteroidSpawner = Entity.Create().Add(new AsteroidSpawner(Ship, 5, AsteroidDistributions.StandardAsteroidDistribution));
            MusicManager.Start("Boss2");
        }
示例#8
0
 public void OnHit(FlightNode node, FlightShip ship, Point gridLocation, Vector3 nodeLocation, Section section)
 {
     if (!_claimed)
     {
         if (ship.HasUpgrade <OreProcessing>())
         {
             ship.AddEnergy(2);
         }
         else
         {
             ship.AddEnergy(1);
         }
         _claimed = true;
     }
     Entity.Delete();
 }
示例#9
0
        public override void Start()
        {
            Ship                = Entity.EntityManager.GetAll <FlightShip>().First();
            _camera             = Entity.EntityManager.GetAll <FlightCameraControl>().First();
            _oldCameraScale     = _camera.CameraScale;
            _camera.CameraScale = 60f;
            SpawnWave(new Vector3(15, 0, -8), 10, 0, true);
            SpawnWave(new Vector3(15, 0, -8), 30, 1);
            SpawnWave(new Vector3(15, 0, -8), 50, 2);

            var targetEnt = Entity.Create();

            _target = targetEnt.Add(new PhaseKillTarget(this, _enemies.Select(x => x.Get <FlightShip>()), 0));
            targetEnt.Add(new PhaseKillTargetRenderable());

            MusicManager.Start("Boss");
        }
示例#10
0
        private void SpawnWave(Vector3 playerOffset, float spawnDistace, int wallWave, bool startActive = false)
        {
            var shipTransform = Ship.Entity.Get <Transform>();
            var enemy         = Entity.EntityManager.Create();

            enemy.Add(new Transform
            {
                Location = shipTransform.Location + playerOffset * spawnDistace,
            });
            var ship = enemy.AddShipBasics(CreateWall(wallWave));

            ship.Rotation = (float)Math.PI;
            var brain = enemy.Add(new GalactusBrain(Ship, playerOffset, 4f));

            _enemies.Add(enemy);
            _ship = ship;
        }
示例#11
0
        public override void Start()
        {
            Ship                = Entity.EntityManager.GetAll <FlightShip>().First();
            _camera             = Entity.EntityManager.GetAll <FlightCameraControl>().First();
            _oldCameraScale     = _camera.CameraScale;
            _camera.CameraScale = 70f;
            if (_numDrones >= 1)
            {
                SpawnDrone(new Vector3(0, 0, -5), 2, 10);
            }
            if (_numDrones >= 2)
            {
                SpawnDrone(new Vector3(0, 0, 10), 2, 20);
            }
            if (_numDrones >= 3)
            {
                SpawnDrone(new Vector3(5, 0, 10), 3, 30);
            }
            if (_numDrones >= 4)
            {
                SpawnDrone(new Vector3(5, 0, -5), 3, 40);
            }
            if (_numDrones >= 5)
            {
                SpawnDrone(new Vector3(10, 0, 5), 3, 50);
            }
            if (_numDrones >= 6)
            {
                SpawnDrone(new Vector3(0, 0, 0), 3, 60);
            }


            var targetEnt = Entity.Create();

            _target = targetEnt.Add(new PhaseKillTarget(this, _droneEntities.Select(x => x.Get <FlightShip>()), 0));
            targetEnt.Add(new PhaseKillTargetRenderable());


            _asteroidSpawner = Entity.Create().Add(new AsteroidSpawner(Ship, 5, AsteroidDistributions.StandardAsteroidDistribution));
        }
示例#12
0
        public override void OnDestruction(FlightShip ship, FlightNode node)
        {
            for (var direction = 0; direction < 6; direction++)
            {
                var gridLocation = HexagonHelpers.GetFromDirection(node.GridLocation, (int)direction);
                // Boom
                ship.Damage(gridLocation, 300);
            }

            var explosionEnt = ship.Entity.EntityManager.Create();

            explosionEnt.Add(new Transform()
            {
                Location = node.GlobalLocation
            });
            explosionEnt.Add(new ClusterExplosionEffect()
            {
                DistanceScaleFactor = 2f,
                ScaleFactor         = 3f,
                Components          = 16
            });
        }
示例#13
0
 public TakeAimBehaviour(FlightShip playerShip, FlightShip flightShip, Transform transform)
 {
     _playerShip = playerShip;
     _flightShip = flightShip;
     _transform  = transform;
 }
示例#14
0
 public ShipStats(FlightShip flightShip)
 {
     _flightShip = flightShip;
 }
示例#15
0
 public DeathRunBehaviour(FlightShip ship, FlightShip playerShip, PositionChaserBehaviour positionChaserBehaviour)
 {
     _ship       = ship;
     _playerShip = playerShip;
     _positionChaserBehaviour = positionChaserBehaviour;
 }
示例#16
0
 public CrusherBrain(FlightShip playerShip, Vector3 playerOffset)
 {
     _playerShip   = playerShip;
     _playerOffset = playerOffset;
 }
示例#17
0
 public TransitionFromPlanet(Action runAfter, FlightShip flightShip, Camera camera)
 {
     _flightShip = flightShip;
     _runAfter   = runAfter;
     _camera     = camera;
 }
示例#18
0
 public StormWallBrain(FlightShip playerShip, Vector3 playerOffset)
 {
     _playerShip   = playerShip;
     _playerOffset = playerOffset;
 }
 public FlightScreenTemplate(GraphicsDevice graphicsDevice, FlightShip flightShip, ProgressTracker progressTracker)
 {
     _graphicsDevice  = graphicsDevice;
     _flightShip      = flightShip;
     _progressTracker = progressTracker;
 }
示例#20
0
 public PositionChaserBehaviour(FlightShip ship, Transform transform, Vector3 target)
 {
     _ship      = ship;
     _transform = transform;
     Target     = target;
 }
示例#21
0
 public SwarmShipBrain(FlightShip playerShip)
 {
     _playerShip = playerShip;
 }
示例#22
0
        public override void Tick(TickContext context)
        {
            if (!_iniTimer.Completed)
            {
                _iniTimer.Tick(context.DeltaTime);
                return;
            }

            _pos += context.DeltaTimeSeconds * (float)(Math.PI / 10f);
            _positionChaserBehaviour.Target = _playerShip.Entity.Get <Transform>().Location + new Vector3(
                (float)Math.Cos(_pos) * _circleRadius,
                0f,
                (float)Math.Sin(_pos) * _circleRadius
                ) + _playerOffset;
            _positionChaserBehaviour.Tick(context);
            //_takeAimBehaviour.Tick(context);

            _fireTimer.Tick(context.DeltaTime);
            if (_fireTimer.Completed)
            {
                WeaponCapability.StandardFire();
                _fireTimer.Restart();
            }
            //_changeAimTimer.Tick(context.DeltaTime);
            //if (_changeAimTimer.Completed)
            //{
            //    _oscillateMode = !_oscillateMode;
            //    _changeAimTimer.Restart();
            //    _takeAimBehaviour.SetRandomAimOffset((float)Math.PI/3);
            //}

            _shieldDeployTimer.Tick(context.DeltaTime);
            if (_shieldDeployTimer.Completed)
            {
                WeaponCapability.ShieldDeploy();
                _shieldDeployTimer.Restart();
            }

            _bombardTimer.Tick(context.DeltaTime);
            if (_bombardTimer.Completed)
            {
                _bombardTimer.Restart();
                WeaponCapability.BombardFire();
            }

            _fireTimer.Tick(context.DeltaTime);
            if (_fireTimer.Completed)
            {
                _shotCount++;
                if (_shotCount % 5 == 0)
                {
                    WeaponCapability.HeavyFire();
                }
                else
                {
                    WeaponCapability.StandardFire();
                }
                _fireTimer.Restart();
            }

            WeaponCapability.RocketBlast();

            FlightShip.Update(() =>
            {
                FlightShip.Rotation += 0.01f * context.DeltaTimeSeconds;
                FlightShip.AddEnergy(100);
            });
        }
示例#23
0
 public ChaseDroneBrain(FlightShip playerShip, Vector3 playerOffset, float circleRadius)
 {
     _playerShip   = playerShip;
     _circleRadius = circleRadius;
     _playerOffset = playerOffset;
 }
示例#24
0
 public GalactusBrain(FlightShip playerShip, Vector3 playerOffset, float circleRadius)
 {
     _playerShip   = playerShip;
     _circleRadius = circleRadius;
     _playerOffset = playerOffset;
 }
示例#25
0
 public virtual void OnHit(FlightNode node, FlightShip ship, Point gridLocation, Vector3 nodeLocation, Section section)
 {
 }