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); } } }
public void Remove(ShipObj obj) { removing.Add(obj); }
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; }
public void Add(ShipObj obj) { obj.ID = shipCount++; adding.Add(obj); }
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; }