From 01b1dfe0dfeab79764eb87aec2055d52c8aeb8ff Mon Sep 17 00:00:00 2001 From: Regalis Date: Sat, 1 Aug 2015 13:48:20 +0300 Subject: [PATCH] reliable network messages aren't sent as frequently, equippable grenades/detonators --- Subsurface/Content/Items/Reactor/reactor.xml | 2 +- Subsurface/Content/Items/Weapons/weapons.xml | 4 +- Subsurface/Source/Characters/Character.cs | 5 -- .../Source/Items/Components/Machines/Pump.cs | 15 ++++-- .../Items/Components/Machines/Reactor.cs | 50 +++++++++++++++--- .../Items/Components/Machines/Steering.cs | 15 +++++- .../Items/Components/Power/PowerContainer.cs | 4 +- .../Items/Components/Signal/LightComponent.cs | 7 ++- Subsurface/Source/Networking/GameClient.cs | 4 +- Subsurface/Source/Networking/GameServer.cs | 14 ++--- Subsurface/Source/Networking/NetworkEvent.cs | 2 +- Subsurface_Solution.v12.suo | Bin 526848 -> 562688 bytes 12 files changed, 90 insertions(+), 32 deletions(-) diff --git a/Subsurface/Content/Items/Reactor/reactor.xml b/Subsurface/Content/Items/Reactor/reactor.xml index d2a637f34..758928870 100644 --- a/Subsurface/Content/Items/Reactor/reactor.xml +++ b/Subsurface/Content/Items/Reactor/reactor.xml @@ -18,7 +18,7 @@ - + diff --git a/Subsurface/Content/Items/Weapons/weapons.xml b/Subsurface/Content/Items/Weapons/weapons.xml index d9db63348..178323658 100644 --- a/Subsurface/Content/Items/Weapons/weapons.xml +++ b/Subsurface/Content/Items/Weapons/weapons.xml @@ -49,13 +49,11 @@ - + - - diff --git a/Subsurface/Source/Characters/Character.cs b/Subsurface/Source/Characters/Character.cs index ffd8599f3..86fbf8737 100644 --- a/Subsurface/Source/Characters/Character.cs +++ b/Subsurface/Source/Characters/Character.cs @@ -732,11 +732,6 @@ namespace Subsurface Vector2 healthBarPos = new Vector2(Position.X - 50, -Position.Y - 50.0f); GUI.DrawRectangle(spriteBatch, new Rectangle((int)healthBarPos.X - 2, (int)healthBarPos.Y - 2, 100 + 4, 15 + 4), Color.Black, false); GUI.DrawRectangle(spriteBatch, new Rectangle((int)healthBarPos.X, (int)healthBarPos.Y, (int)(100.0f * (health / maxHealth)), 15), Color.Red, true); - - - //GUI.DrawLine(spriteBatch, ConvertUnits.ToDisplayUnits(animController.limbs[0].SimPosition.X, animController.limbs[0].SimPosition.Y), - // ConvertUnits.ToDisplayUnits(animController.limbs[0].SimPosition.X, animController.limbs[0].SimPosition.Y) + - // ConvertUnits.ToDisplayUnits(animController.targetMovement.X, animController.targetMovement.Y), Color.Green); } diff --git a/Subsurface/Source/Items/Components/Machines/Pump.cs b/Subsurface/Source/Items/Components/Machines/Pump.cs index 1d48fa454..d162e1e42 100644 --- a/Subsurface/Source/Items/Components/Machines/Pump.cs +++ b/Subsurface/Source/Items/Components/Machines/Pump.cs @@ -112,15 +112,24 @@ namespace Subsurface.Items.Components targetLevel = null; isActive = !isActive; if (!isActive) currPowerConsumption = 0.0f; + item.NewComponentEvent(this, true); } spriteBatch.DrawString(GUI.Font, "Flow percentage: " + (int)flowPercentage + " %", new Vector2(x + 20, y + 80), Color.White); - if (GUI.DrawButton(spriteBatch, new Rectangle(x + 200, y + 70, 40, 40), "+", true)) FlowPercentage += 1.0f; - if (GUI.DrawButton(spriteBatch, new Rectangle(x + 250, y + 70, 40, 40), "-", true)) FlowPercentage -= 1.0f; + if (GUI.DrawButton(spriteBatch, new Rectangle(x + 200, y + 70, 40, 40), "+", true)) + { + FlowPercentage += 1.0f; + item.NewComponentEvent(this, true); + } + if (GUI.DrawButton(spriteBatch, new Rectangle(x + 250, y + 70, 40, 40), "-", true)) + { + FlowPercentage -= 1.0f; + item.NewComponentEvent(this, true); + } - item.NewComponentEvent(this, true); + } public override void ReceiveSignal(string signal, Connection connection, Item sender, float power=0.0f) diff --git a/Subsurface/Source/Items/Components/Machines/Reactor.cs b/Subsurface/Source/Items/Components/Machines/Reactor.cs index 0f8eae963..316512dbc 100644 --- a/Subsurface/Source/Items/Components/Machines/Reactor.cs +++ b/Subsurface/Source/Items/Components/Machines/Reactor.cs @@ -269,10 +269,12 @@ namespace Subsurface.Items.Components } + bool valueChanged = false; public override void DrawHUD(SpriteBatch spriteBatch, Character character) { isActive = true; + int width = GuiFrame.Rect.Width, height = GuiFrame.Rect.Height; int x = GuiFrame.Rect.X; int y = GuiFrame.Rect.Y; @@ -291,27 +293,59 @@ namespace Subsurface.Items.Components spriteBatch.DrawString(GUI.Font, "Fission rate: " + (int)fissionRate + " %", new Vector2(x + 30, y + 30), Color.White); DrawGraph(fissionRateGraph, spriteBatch, x + 30, y + 50, 100.0f, xOffset); - if (GUI.DrawButton(spriteBatch, new Rectangle(x + 280, y + 30, 40, 40), "+", true)) FissionRate += 1.0f; - if (GUI.DrawButton(spriteBatch, new Rectangle(x + 280, y + 80, 40, 40), "-", true)) FissionRate -= 1.0f; + if (GUI.DrawButton(spriteBatch, new Rectangle(x + 280, y + 30, 40, 40), "+", true)) + { + valueChanged = true; + FissionRate += 1.0f; + } + if (GUI.DrawButton(spriteBatch, new Rectangle(x + 280, y + 80, 40, 40), "-", true)) + { + valueChanged = true; + FissionRate -= 1.0f; + } y += 130; spriteBatch.DrawString(GUI.Font, "Cooling rate: " + (int)coolingRate + " %", new Vector2(x + 30, y + 30), Color.White); DrawGraph(coolingRateGraph, spriteBatch, x + 30, y + 50, 100.0f, xOffset); - if (GUI.DrawButton(spriteBatch, new Rectangle(x + 280, y + 30, 40, 40), "+", true)) CoolingRate += 1.0f; - if (GUI.DrawButton(spriteBatch, new Rectangle(x + 280, y + 80, 40, 40), "-", true)) CoolingRate -= 1.0f; + if (GUI.DrawButton(spriteBatch, new Rectangle(x + 280, y + 30, 40, 40), "+", true)) + { + valueChanged = true; + CoolingRate += 1.0f; + } + if (GUI.DrawButton(spriteBatch, new Rectangle(x + 280, y + 80, 40, 40), "-", true)) + { + valueChanged = true; + CoolingRate -= 1.0f; + } y = y - 260; spriteBatch.DrawString(GUI.Font, "Automatic Temperature Control: " + ((autoTemp) ? "ON" : "OFF"), new Vector2(x + 400, y + 30), Color.White); - if (GUI.DrawButton(spriteBatch, new Rectangle(x + 400, y + 60, 100, 40), ((autoTemp) ? "TURN OFF" : "TURN ON"))) autoTemp = !autoTemp; + if (GUI.DrawButton(spriteBatch, new Rectangle(x + 400, y + 60, 100, 40), ((autoTemp) ? "TURN OFF" : "TURN ON"))) + { + valueChanged = true; + autoTemp = !autoTemp; + } spriteBatch.DrawString(GUI.Font, "Shutdown Temperature: " + shutDownTemp, new Vector2(x + 400, y + 150), Color.White); - if (GUI.DrawButton(spriteBatch, new Rectangle(x + 400, y + 180, 40, 40), "+", true)) shutDownTemp += 100.0f; - if (GUI.DrawButton(spriteBatch, new Rectangle(x + 450, y + 180, 40, 40), "-", true)) shutDownTemp -= 100.0f; + if (GUI.DrawButton(spriteBatch, new Rectangle(x + 400, y + 180, 40, 40), "+", true)) + { + valueChanged = true; + shutDownTemp += 100.0f; + } + if (GUI.DrawButton(spriteBatch, new Rectangle(x + 450, y + 180, 40, 40), "-", true)) + { + valueChanged = true; + shutDownTemp -= 100.0f; + } - item.NewComponentEvent(this, true); + if (valueChanged) + { + item.NewComponentEvent(this, true); + valueChanged = false; + } } static void UpdateGraph(IList graph, T newValue) diff --git a/Subsurface/Source/Items/Components/Machines/Steering.cs b/Subsurface/Source/Items/Components/Machines/Steering.cs index f61e7c734..5b3054390 100644 --- a/Subsurface/Source/Items/Components/Machines/Steering.cs +++ b/Subsurface/Source/Items/Components/Machines/Steering.cs @@ -21,6 +21,9 @@ namespace Subsurface.Items.Components private static PathFinder pathFinder; + private float networkUpdateTimer; + private bool valueChanged; + bool AutoPilot { get { return autoPilot; } @@ -90,6 +93,16 @@ namespace Subsurface.Items.Components TargetVelocity = targetSpeed*100.0f; } } + else if (valueChanged) + { + networkUpdateTimer -= deltaTime; + if (networkUpdateTimer<=0.0f) + { + item.NewComponentEvent(this, true); + networkUpdateTimer = 1.0f; + valueChanged = false; + } + } item.SendSignal(targetVelocity.X.ToString(CultureInfo.InvariantCulture), "velocity_x_out"); item.SendSignal((-targetVelocity.Y).ToString(CultureInfo.InvariantCulture), "velocity_y_out"); @@ -136,7 +149,7 @@ namespace Subsurface.Items.Components targetVelocity = PlayerInput.MousePosition - new Vector2(velRect.Center.X, velRect.Center.Y); targetVelocity.Y = -targetVelocity.Y; - item.NewComponentEvent(this, true); + valueChanged = true; } } } diff --git a/Subsurface/Source/Items/Components/Power/PowerContainer.cs b/Subsurface/Source/Items/Components/Power/PowerContainer.cs index 68ec01427..e6f7da900 100644 --- a/Subsurface/Source/Items/Components/Power/PowerContainer.cs +++ b/Subsurface/Source/Items/Components/Power/PowerContainer.cs @@ -195,9 +195,9 @@ namespace Subsurface.Items.Components spriteBatch.DrawString(GUI.Font, "Recharge rate: " + (rechargeSpeed / maxRechargeSpeed), new Vector2(x + 30, y + 100), Color.White); if (GUI.DrawButton(spriteBatch, new Rectangle(x + 50, y + 150, 40, 40), "+", true)) - { - item.NewComponentEvent(this, true); + { rechargeSpeed = Math.Min(rechargeSpeed + 10.0f, maxRechargeSpeed); + item.NewComponentEvent(this, true); } if (GUI.DrawButton(spriteBatch, new Rectangle(x + 250, y + 150, 40, 40), "-", true)) diff --git a/Subsurface/Source/Items/Components/Signal/LightComponent.cs b/Subsurface/Source/Items/Components/Signal/LightComponent.cs index 9b044c3fc..d10d2b8f9 100644 --- a/Subsurface/Source/Items/Components/Signal/LightComponent.cs +++ b/Subsurface/Source/Items/Components/Signal/LightComponent.cs @@ -38,7 +38,12 @@ namespace Subsurface.Items.Components get { return ToolBox.Vector4ToString(lightColor.ToVector4()); } set { - lightColor = new Color(ToolBox.ParseToVector4(value)); + Vector4 newColor = ToolBox.ParseToVector4(value); + newColor.X = MathHelper.Clamp(newColor.X, 0.0f, 1.0f); + newColor.Y = MathHelper.Clamp(newColor.Y, 0.0f, 1.0f); + newColor.Z = MathHelper.Clamp(newColor.Z, 0.0f, 1.0f); + newColor.W = MathHelper.Clamp(newColor.W, 0.0f, 1.0f); + lightColor = new Color(newColor); } } diff --git a/Subsurface/Source/Networking/GameClient.cs b/Subsurface/Source/Networking/GameClient.cs index 26b59ee79..0554968e8 100644 --- a/Subsurface/Source/Networking/GameClient.cs +++ b/Subsurface/Source/Networking/GameClient.cs @@ -500,6 +500,8 @@ namespace Subsurface.Networking character.ID = ID; character.Inventory.ID = inventoryID; + character.IsNetworkPlayer = true; + character.GiveJobItems(closestWaypoint); return character; @@ -516,7 +518,7 @@ namespace Subsurface.Networking msg.Write((byte)type); msg.Write(message); - client.SendMessage(msg, NetDeliveryMethod.ReliableUnordered); + client.SendMessage(msg, NetDeliveryMethod.Unreliable); } /// diff --git a/Subsurface/Source/Networking/GameServer.cs b/Subsurface/Source/Networking/GameServer.cs index a400bc616..d1f497177 100644 --- a/Subsurface/Source/Networking/GameServer.cs +++ b/Subsurface/Source/Networking/GameServer.cs @@ -439,11 +439,9 @@ namespace Subsurface.Networking public void EndGame(string endMessage) { - Submarine.Unload(); - - gameStarted = false; - if (connectedClients.Count>0) + + if (connectedClients.Count > 0) { NetOutgoingMessage msg = server.CreateMessage(); msg.Write((byte)PacketTypes.EndGame); @@ -461,6 +459,10 @@ namespace Subsurface.Networking } } + Submarine.Unload(); + + gameStarted = false; + Game1.NetLobbyScreen.Select(); DebugConsole.ThrowError(endMessage); @@ -565,12 +567,12 @@ namespace Subsurface.Networking } if (recipients.Count>0) { - server.SendMessage(msg, recipients, NetDeliveryMethod.ReliableUnordered, 0); + server.SendMessage(msg, recipients, NetDeliveryMethod.Unreliable, 0); } } else { - server.SendMessage(msg, server.Connections, NetDeliveryMethod.ReliableUnordered, 0); + server.SendMessage(msg, server.Connections, NetDeliveryMethod.Unreliable, 0); } } diff --git a/Subsurface/Source/Networking/NetworkEvent.cs b/Subsurface/Source/Networking/NetworkEvent.cs index c7892d490..e2d699ffc 100644 --- a/Subsurface/Source/Networking/NetworkEvent.cs +++ b/Subsurface/Source/Networking/NetworkEvent.cs @@ -18,7 +18,7 @@ namespace Subsurface.Networking { public static List events = new List(); - private static bool[] isImportant = { false, true, true, true, true, true }; + private static bool[] isImportant = { false, true, false, true, true, true }; private int id; diff --git a/Subsurface_Solution.v12.suo b/Subsurface_Solution.v12.suo index 51bbc9abe8c98147bb797e38036c04bd83324e19..8fc1e8c165be5dce08a2e36c1bc90a45388eb454 100644 GIT binary patch delta 23748 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