Example #1
0
        public void HandleData(NetIncomingMessage msg)
        {
            NetMsgType datatype = (NetMsgType)msg.ReadByte();
            if (datatype == NetMsgType.Control)
            {
                Soul soul = (Soul)msg.SenderConnection.Tag;
                var key = (ControlKey)msg.ReadByte();
                var edge = msg.ReadBoolean();
                //Console.WriteLine("Received Control Message: " + key + (edge ? "Pressed" : "Released"));
                soul.currentShip.Controls.ReceiveMessage(key, edge);
            }
            else if (datatype == NetMsgType.ControlUpdate)
            {
                Soul soul = (Soul)msg.SenderConnection.Tag;
                var Pitch = msg.ReadFloat();
                var Yaw = msg.ReadFloat();
                var Roll = msg.ReadFloat();
                soul.currentShip.Controls.ReceiveMessage(Pitch, Yaw, Roll);
            }
            else if (datatype == NetMsgType.ShipDataOutput)
            {
                ShipDataOutputMessage data;
                data = new ShipDataOutputMessage(msg);
                Soul soul = new Soul(msg.SenderConnection);
                soul.currentSector = Sector.Redria;
                msg.SenderConnection.Tag = soul;

                soul.currentSector.Terrain.Load(msg.SenderConnection);
                soul.currentSector.Ships.Load(msg.SenderConnection);
                soul.currentSector.Objects.Load(msg.SenderConnection);
                var idRandomizer = new Random();

                var NewShip = new ShipObj(new Vector3(0, 100, 2), Quaternion.Identity,
                    data.GeneratedData);
                soul.currentShip = NewShip;
                NewShip.Client = soul;
                //Console.WriteLine(msg.SenderEndpoint.Address + "'s Ship ID: " + NewShip.ID);
                foreach (NetConnection c in Network.Server.Connections)
                {
                    MessageWriter.ClientEntityCreationMessage(c,
                        NewShip.ID, NewShip.Position, NewShip.Orientation,
                        data.GeneratedData.NoseID, data.GeneratedData.CoreID, data.GeneratedData.EngineID,
                        data.Weapons, msg.SenderConnection.RemoteUniqueIdentifier);
                }
            }
        }
Example #2
0
 public void Remove(ShipObj obj)
 {
     removing.Add(obj);
 }
Example #3
0
        public override void Update(float dt)
        {
            float vVel = 0;
            float hVel = 0;
            float Thrust = Data.Thrust * throttle;
            if (Controls.Up) vVel += Data.StrafeVelocity;
            if (Controls.Down) vVel -= Data.StrafeVelocity;
            if (Controls.Left) hVel -= Data.StrafeVelocity;
            if (Controls.Right) hVel += Data.StrafeVelocity;

            if (Controls.ThrottleUp && throttle <= 1.0f) throttle += 0.01f;
            if (Controls.ThrottleDown && throttle >= 0.0f) throttle -= 0.01f;

            float ThrustRatio = (Thrust / Data.Thrust);

            Thrusters.Settings.VelocityMotor.Softness = 0.002f + (1-ThrustRatio)*0.5f;
            Thrusters.Settings.VelocityMotor.GoalVelocity =
                Vector3.Transform(new Vector3(hVel, vVel, -Thrust), Orientation);

            float minAoA = MathHelper.PiOver2;

            foreach (ShipObj ship in Sector.Redria.Ships.table)
            {
                float AoA = AngleOfAttack(ship.Position, Position, Entity.WorldTransform.Forward);
                if (AoA < minAoA)
                {
                    Target = ship;
                    minAoA = AoA;
                }
            }

            foreach (KeyValuePair<Vector3, WeaponData> kvp in Data.Weapons)
            {
                WeaponData weapon = kvp.Value;
                if (weapon.Cooldown > 0) weapon.Cooldown -= dt;
                else if (weapon.CurrentAmmo <= 0)
                    weapon.CurrentAmmo = weapon.MaxAmmo;
                if (weapon.UseLockon)
                {
                    if (weapon.CurrentAmmo > 0 && Target != null &&
                        minAoA < weapon.LockonRadius)
                    {
                        if (Target != prevTarget)
                        {
                            weapon.CurrentLockonTime = 0;
                        }
                        if (weapon.CurrentLockonTime <= 0)
                        {
                            Locked = false;
                            SendMissileLockon(LockonStatus.Locking);
                        }
                        weapon.CurrentLockonTime += dt;
                        if (weapon.CurrentLockonTime >= weapon.LockonTime && !Locked)
                        {
                            Locked = true;
                            SendMissileLockon(LockonStatus.Locked);
                        }
                    }
                    else if(weapon.CurrentLockonTime > 0)
                    {
                        weapon.CurrentLockonTime = 0;
                        Locked = false;
                        SendMissileLockon(LockonStatus.NotLocked);
                    }
                }
                if (weapon.CurrentAmmo > 0 && weapon.Cooldown <= 0)
                {
                    if ((Controls.leftMouse && weapon.fireGroup == 0) || (Controls.rightMouse && weapon.fireGroup == 1))
                    {
                        if (weapon.UseLockon)
                        {
                            if (weapon.CurrentLockonTime >= weapon.LockonTime)
                            {
                                weapon.CurrentAmmo--;
                                if (weapon.CurrentAmmo > 0)
                                {
                                    weapon.Cooldown = weapon.InverseRoF;
                                }
                                else
                                {
                                    weapon.Cooldown = weapon.ReloadTime;
                                }
                                Vector3 firePos = Vector3.Transform(kvp.Key + Vector3.Forward * weapon.Projectile.ForwardOffset, Entity.Orientation) + Entity.Position;
                                Vector3 fireVel;
                                weapon.Projectile.Create(firePos, Entity.Orientation, Entity.LinearVelocity, out fireVel, Target);
                                MessageWriter.MissileLockonMessage(Target.Client.Owner, 0, LockonStatus.EnemyMissile);
                            }
                        }
                        else
                        {
                            weapon.CurrentAmmo--;
                            if (weapon.CurrentAmmo > 0)
                            {
                                weapon.Cooldown = weapon.InverseRoF;
                            }
                            else
                            {
                                weapon.Cooldown = weapon.ReloadTime;
                            }
                            Vector3 firePos = Vector3.Transform(kvp.Key + Vector3.Forward * weapon.Projectile.ForwardOffset, Entity.Orientation) + Entity.Position;
                            Vector3 fireVel;
                            weapon.Projectile.Create(firePos, Entity.Orientation, Entity.LinearVelocity, out fireVel);
                            if (fireVel != Vector3.Zero)
                            {
                                MessageWriter.FireBulletMessage(weapon.ProjectileID, firePos, Entity.Orientation, fireVel);
                            }
                        }
                    }
                }
            }

            prevTarget = Target;

            Quaternion target = Quaternion.CreateFromRotationMatrix(Matrix.CreateFromYawPitchRoll(Controls.Yaw, Controls.Pitch, Controls.Roll));
            ControlSurfaces.Settings.Servo.Goal = target;
            //ControlSurfaces.Settings.Servo.MaxCorrectiveVelocity = Data.Turn * ThrustRatio;
        }
Example #4
0
 public void Add(ShipObj obj)
 {
     obj.ID = shipCount++;
     adding.Add(obj);
 }
Example #5
0
        public override void Update(float dt)
        {
            float vVel   = 0;
            float hVel   = 0;
            float Thrust = Data.Thrust * throttle;

            if (Controls.Up)
            {
                vVel += Data.StrafeVelocity;
            }
            if (Controls.Down)
            {
                vVel -= Data.StrafeVelocity;
            }
            if (Controls.Left)
            {
                hVel -= Data.StrafeVelocity;
            }
            if (Controls.Right)
            {
                hVel += Data.StrafeVelocity;
            }

            if (Controls.ThrottleUp && throttle <= 1.0f)
            {
                throttle += 0.01f;
            }
            if (Controls.ThrottleDown && throttle >= 0.0f)
            {
                throttle -= 0.01f;
            }

            float ThrustRatio = (Thrust / Data.Thrust);

            Thrusters.Settings.VelocityMotor.Softness     = 0.002f + (1 - ThrustRatio) * 0.5f;
            Thrusters.Settings.VelocityMotor.GoalVelocity =
                Vector3.Transform(new Vector3(hVel, vVel, -Thrust), Orientation);

            float minAoA = MathHelper.PiOver2;

            foreach (ShipObj ship in Sector.Redria.Ships.table)
            {
                float AoA = AngleOfAttack(ship.Position, Position, Entity.WorldTransform.Forward);
                if (AoA < minAoA)
                {
                    Target = ship;
                    minAoA = AoA;
                }
            }

            foreach (KeyValuePair <Vector3, WeaponData> kvp in Data.Weapons)
            {
                WeaponData weapon = kvp.Value;
                if (weapon.Cooldown > 0)
                {
                    weapon.Cooldown -= dt;
                }
                else if (weapon.CurrentAmmo <= 0)
                {
                    weapon.CurrentAmmo = weapon.MaxAmmo;
                }
                if (weapon.UseLockon)
                {
                    if (weapon.CurrentAmmo > 0 && Target != null &&
                        minAoA < weapon.LockonRadius)
                    {
                        if (Target != prevTarget)
                        {
                            weapon.CurrentLockonTime = 0;
                        }
                        if (weapon.CurrentLockonTime <= 0)
                        {
                            Locked = false;
                            SendMissileLockon(LockonStatus.Locking);
                        }
                        weapon.CurrentLockonTime += dt;
                        if (weapon.CurrentLockonTime >= weapon.LockonTime && !Locked)
                        {
                            Locked = true;
                            SendMissileLockon(LockonStatus.Locked);
                        }
                    }
                    else if (weapon.CurrentLockonTime > 0)
                    {
                        weapon.CurrentLockonTime = 0;
                        Locked = false;
                        SendMissileLockon(LockonStatus.NotLocked);
                    }
                }
                if (weapon.CurrentAmmo > 0 && weapon.Cooldown <= 0)
                {
                    if ((Controls.leftMouse && weapon.fireGroup == 0) || (Controls.rightMouse && weapon.fireGroup == 1))
                    {
                        if (weapon.UseLockon)
                        {
                            if (weapon.CurrentLockonTime >= weapon.LockonTime)
                            {
                                weapon.CurrentAmmo--;
                                if (weapon.CurrentAmmo > 0)
                                {
                                    weapon.Cooldown = weapon.InverseRoF;
                                }
                                else
                                {
                                    weapon.Cooldown = weapon.ReloadTime;
                                }
                                Vector3 firePos = Vector3.Transform(kvp.Key + Vector3.Forward * weapon.Projectile.ForwardOffset, Entity.Orientation) + Entity.Position;
                                Vector3 fireVel;
                                weapon.Projectile.Create(firePos, Entity.Orientation, Entity.LinearVelocity, out fireVel, Target);
                                MessageWriter.MissileLockonMessage(Target.Client.Owner, 0, LockonStatus.EnemyMissile);
                            }
                        }
                        else
                        {
                            weapon.CurrentAmmo--;
                            if (weapon.CurrentAmmo > 0)
                            {
                                weapon.Cooldown = weapon.InverseRoF;
                            }
                            else
                            {
                                weapon.Cooldown = weapon.ReloadTime;
                            }
                            Vector3 firePos = Vector3.Transform(kvp.Key + Vector3.Forward * weapon.Projectile.ForwardOffset, Entity.Orientation) + Entity.Position;
                            Vector3 fireVel;
                            weapon.Projectile.Create(firePos, Entity.Orientation, Entity.LinearVelocity, out fireVel);
                            if (fireVel != Vector3.Zero)
                            {
                                MessageWriter.FireBulletMessage(weapon.ProjectileID, firePos, Entity.Orientation, fireVel);
                            }
                        }
                    }
                }
            }

            prevTarget = Target;

            Quaternion target = Quaternion.CreateFromRotationMatrix(Matrix.CreateFromYawPitchRoll(Controls.Yaw, Controls.Pitch, Controls.Roll));

            ControlSurfaces.Settings.Servo.Goal = target;
            //ControlSurfaces.Settings.Servo.MaxCorrectiveVelocity = Data.Turn * ThrustRatio;
        }