Exemplo n.º 1
0
        public void BombardFire()
        {
            var numRockets  = 4;
            var angleOffset = 0.3f;

            if (FlightShip.HasUpgrade <BombardOverload>())
            {
                numRockets  = 8;
                angleOffset = 1.1f;
            }
            if (_bombardCooldown.Completed)
            {
                var guns = FlightShip.Topology.AllSections
                           .Where(x => x.Module is BombardModule);
                var shipTransform = Transform;
                foreach (var gun in guns)
                {
                    if (!FlightShip.TryTakeEnergy(1))
                    {
                        return;
                    }
                    for (var i = 0; i < numRockets; i++)
                    {
                        var flightNode    = FlightShip.GetNodeForSection(gun.GridLocation);
                        var rotation      = (float)((-gun.Rotation - 2) * Math.PI / 3 + angleOffset * Random.NextDouble() - angleOffset / 2f);
                        var rotationQuat  = Quaternion.CreateFromYawPitchRoll(rotation, 0, 0);
                        var nodeTransform = flightNode.Entity.Get <Transform>();
                        var location      = Vector3.Transform(Vector3.Zero, nodeTransform.WorldTransform * shipTransform.WorldTransform);
                        var shell         = Entity.EntityManager.Create();
                        shell.Add(new Transform
                        {
                            Location = location + new Vector3((float)Random.NextDouble() * 0.3f, 0, (float)Random.NextDouble() * 0.3f)
                        });

                        var rotationMatrix = Matrix.CreateFromYawPitchRoll(rotation, 0, 0)
                                             * Matrix.CreateFromQuaternion(shipTransform.Rotation);

                        shell.Add(
                            new RocketProjectile(
                                FlightShip.ShipGuid,
                                FlightShip.Velocity,
                                Vector3.Transform(Vector3.Transform(Vector3.Forward, rotationQuat), shipTransform.Rotation),
                                rotationMatrix
                                )
                            );
                    }
                }

                _bombardCooldown.Restart();
            }
        }
Exemplo n.º 2
0
        public void StandardFire()
        {
            if (_lightweightCooldown.Completed)
            {
                var guns = FlightShip.Topology.AllSections
                           .Where(x => x.Module is BlasterModule);
                var shipTransform = Transform;
                var any           = false;
                foreach (var gun in guns)
                {
                    any = true;
                    var flightNode    = FlightShip.GetNodeForSection(gun.GridLocation);
                    var rotation      = (float)((-gun.Rotation - 2) * Math.PI / 3);
                    var rotationQuat  = Quaternion.CreateFromYawPitchRoll(rotation, 0, 0);
                    var nodeTransform = flightNode.Entity.Get <Transform>();
                    var location      = Vector3.Transform(Vector3.Zero, nodeTransform.WorldTransform * shipTransform.WorldTransform);
                    var shell         = Entity.EntityManager.Create();
                    shell.Add(new Transform
                    {
                        Location = location
                    });
                    shell.Add(
                        new LightBlasterProjectile(
                            FlightShip.ShipGuid,
                            FlightShip.Velocity,
                            Vector3.Transform(Vector3.Transform(Vector3.Forward, rotationQuat), shipTransform.Rotation),
                            false
                            )
                        );
                }
                if (any)
                {
                    SoundEffects.Get("Shot")?.Play();
                }

                if (FlightShip.HasUpgrade <RapidFire>())
                {
                    _lightweightCooldown.ChangeTarget(TimeSpan.FromSeconds(0.3f));
                    _lightweightCooldown.Complete();
                }
                _lightweightCooldown.Restart();
            }
        }
Exemplo n.º 3
0
        public void RocketBlast()
        {
            if (!FlightShip.HasUpgrade <BlastRocketry>())
            {
                return;
            }
            if (_blastRocketCooldown.Completed)
            {
                var guns = FlightShip.Topology.AllSections
                           .Where(x => x.Module is RocketModule);
                var shipTransform = Transform;
                foreach (var gun in guns)
                {
                    var flightNode    = FlightShip.GetNodeForSection(gun.GridLocation);
                    var rotation      = (float)((-gun.Rotation - 2) * Math.PI / 3);
                    var rotationQuat  = Quaternion.CreateFromYawPitchRoll(rotation, 0, 0);
                    var nodeTransform = flightNode.Entity.Get <Transform>();
                    var location      = Vector3.Transform(Vector3.Zero, nodeTransform.WorldTransform * shipTransform.WorldTransform);
                    var shell         = Entity.EntityManager.Create();
                    shell.Add(new Transform
                    {
                        Location = location
                    });

                    var rotationMatrix = Matrix.CreateFromYawPitchRoll(rotation, 0, 0)
                                         * Matrix.CreateFromQuaternion(shipTransform.Rotation);

                    shell.Add(
                        new BlastRocketProjectile(
                            FlightShip.ShipGuid,
                            FlightShip.Velocity,
                            Vector3.Transform(Vector3.Transform(Vector3.Forward, rotationQuat), shipTransform.Rotation),
                            rotationMatrix
                            )
                        );
                }

                _blastRocketCooldown.Restart();
            }
        }
Exemplo n.º 4
0
        public void ShieldDeploy()
        {
            if (_bubbleShieldCooldown.Completed)
            {
                var guns = FlightShip.Topology.AllSections
                           .Where(x => x.Module is ShieldBubbleGeneratorModule);
                var shipTransform = Transform;
                foreach (var gun in guns)
                {
                    if (!FlightShip.TryTakeEnergy(1))
                    {
                        return;
                    }
                    var flightNode   = FlightShip.GetNodeForSection(gun.GridLocation);
                    var rotation     = (float)((-gun.Rotation - 2) * Math.PI / 3);
                    var rotationQuat = Quaternion.CreateFromYawPitchRoll(rotation, 0, 0);
                    //var nodeTransform = flightNode.Entity.Get<Transform>();
                    var location = flightNode.GlobalLocation;
                    var shell    = Entity.EntityManager.Create();
                    shell.Add(new Transform
                    {
                        Location = location
                    });
                    shell.Add(
                        new BubbleShieldProjectile(
                            FlightShip.ShipGuid,
                            FlightShip.GetNodeForSection(gun.GridLocation),
                            FlightShip.Velocity,
                            Vector3.Transform(Vector3.Transform(Vector3.Forward, rotationQuat), shipTransform.Rotation),
                            FlightShip.HasUpgrade <ShieldAmplification>(),
                            FlightShip.HasUpgrade <ShieldFortification>()
                            )
                        );
                }

                _bubbleShieldCooldown.Restart();
            }
        }
Exemplo n.º 5
0
        public void HeavyFire()
        {
            if (_heavyweightCooldown.Completed)
            {
                var guns = FlightShip.Topology.AllSections
                           .Where(x => x.Module is BlasterModule);
                var shipTransform = Transform;
                foreach (var gun in guns)
                {
                    if (!FlightShip.TryTakeEnergy(1))
                    {
                        return;
                    }
                    var flightNode   = FlightShip.GetNodeForSection(gun.GridLocation);
                    var rotation     = (float)((-gun.Rotation - 2) * Math.PI / 3);
                    var rotationQuat = Quaternion.CreateFromYawPitchRoll(rotation, 0, 0);
                    //var nodeTransform = flightNode.Entity.Get<Transform>();
                    var location = flightNode.GlobalLocation;
                    var shell    = Entity.EntityManager.Create();
                    shell.Add(new Transform
                    {
                        Location = location
                    });
                    shell.Add(
                        new HeavyBlasterProjectile(
                            FlightShip.ShipGuid,
                            FlightShip.Velocity,
                            Vector3.Transform(Vector3.Transform(Vector3.Forward, rotationQuat), shipTransform.Rotation),
                            false
                            )
                        );
                }
                SoundEffects.Get("HeavyShot")?.Play();

                _heavyweightCooldown.Restart();
            }
        }