Sending NetEntityEvents from client to server, ItemComponent class doesn't implement the INetSerializable interfaces (only the derived classes do), reactor syncing

This commit is contained in:
Regalis
2016-11-13 19:34:23 +02:00
parent 724172fe7c
commit 3d234aef73
16 changed files with 146 additions and 59 deletions
@@ -196,27 +196,27 @@ namespace Barotrauma.Items.Components
if (!IsActive) currPowerConsumption = 0.0f;
}
public override void ClientWrite(Lidgren.Network.NetBuffer msg, object[] extraData = null)
public void ClientWrite(Lidgren.Network.NetBuffer msg, object[] extraData = null)
{
//flowpercentage can only be adjusted at 10% intervals -> no need for more accuracy than this
msg.WriteRangedInteger(-10, 10, (int)(flowPercentage / 10.0f));
msg.Write(IsActive);
}
public override void ServerRead(Lidgren.Network.NetIncomingMessage msg, Barotrauma.Networking.Client c)
public void ServerRead(Lidgren.Network.NetIncomingMessage msg, Barotrauma.Networking.Client c)
{
FlowPercentage = msg.ReadRangedInteger(-10, 10) * 10.0f;
IsActive = msg.ReadBoolean();
}
public override void ServerWrite(Lidgren.Network.NetBuffer msg, Barotrauma.Networking.Client c, object[] extraData = null)
public void ServerWrite(Lidgren.Network.NetBuffer msg, Barotrauma.Networking.Client c, object[] extraData = null)
{
//flowpercentage can only be adjusted at 10% intervals -> no need for more accuracy than this
msg.WriteRangedInteger(-10, 10, (int)(flowPercentage / 10.0f));
msg.Write(IsActive);
}
public override void ClientRead(Lidgren.Network.NetIncomingMessage msg, float sendingTime)
public void ClientRead(Lidgren.Network.NetIncomingMessage msg, float sendingTime)
{
FlowPercentage = msg.ReadRangedInteger(-10, 10) * 10.0f;
IsActive = msg.ReadBoolean();
@@ -411,23 +411,23 @@ namespace Barotrauma.Items.Components
if (screenOverlay != null) screenOverlay.Remove();
}
public override void ClientWrite(Lidgren.Network.NetBuffer msg, object[] extraData = null)
public void ClientWrite(Lidgren.Network.NetBuffer msg, object[] extraData = null)
{
msg.Write(IsActive);
}
public override void ServerRead(Lidgren.Network.NetIncomingMessage msg, Barotrauma.Networking.Client c)
public void ServerRead(Lidgren.Network.NetIncomingMessage msg, Barotrauma.Networking.Client c)
{
IsActive = msg.ReadBoolean();
isActiveTickBox.Selected = IsActive;
}
public override void ServerWrite(Lidgren.Network.NetBuffer msg, Barotrauma.Networking.Client c, object[] extraData = null)
public void ServerWrite(Lidgren.Network.NetBuffer msg, Barotrauma.Networking.Client c, object[] extraData = null)
{
msg.Write(IsActive);
}
public override void ClientRead(Lidgren.Network.NetIncomingMessage msg, float sendingTime)
public void ClientRead(Lidgren.Network.NetIncomingMessage msg, float sendingTime)
{
IsActive = msg.ReadBoolean();
isActiveTickBox.Selected = IsActive;
@@ -8,7 +8,7 @@ using Barotrauma.Networking;
namespace Barotrauma.Items.Components
{
class Reactor : Powered, IDrawableComponent
class Reactor : Powered, IDrawableComponent, IServerSerializable, IClientSerializable
{
const float NetworkUpdateInterval = 3.0f;
@@ -324,6 +324,15 @@ namespace Barotrauma.Items.Components
if (unsentChanges && sendUpdateTimer<= 0.0f)
{
if (GameMain.Server != null)
{
item.CreateServerEvent(this);
}
else if (GameMain.Client != null)
{
item.CreateClientEvent(this);
}
sendUpdateTimer = NetworkUpdateInterval;
unsentChanges = false;
}
@@ -538,7 +547,7 @@ namespace Barotrauma.Items.Components
}
}
public override void ClientWrite(NetBuffer msg, object[] extraData = null)
public void ClientWrite(NetBuffer msg, object[] extraData = null)
{
msg.Write(autoTemp);
msg.WriteRangedSingle(shutDownTemp, 0.0f, 10000.0f, 8);
@@ -547,16 +556,19 @@ namespace Barotrauma.Items.Components
msg.WriteRangedSingle(fissionRate, 0.0f, 100.0f, 8);
}
public override void ServerRead(NetIncomingMessage msg, Client c)
public void ServerRead(NetIncomingMessage msg, Client c)
{
autoTemp = msg.ReadBoolean();
AutoTemp = msg.ReadBoolean();
ShutDownTemp = msg.ReadRangedSingle(0.0f, 10000.0f, 8);
CoolingRate = msg.ReadRangedSingle(0.0f, 100.0f, 8);
FissionRate = msg.ReadRangedSingle(0.0f, 100.0f, 8);
//need to create a server event to notify all clients of the changed state
unsentChanges = true;
}
public override void ServerWrite(NetBuffer msg, Client c, object[] extraData = null)
public void ServerWrite(NetBuffer msg, Client c, object[] extraData = null)
{
msg.WriteRangedSingle(temperature, 0.0f, 10000.0f, 16);
@@ -567,11 +579,11 @@ namespace Barotrauma.Items.Components
msg.WriteRangedSingle(fissionRate, 0.0f, 100.0f, 8);
}
public override void ClientRead(NetIncomingMessage msg, float sendingTime)
public void ClientRead(NetIncomingMessage msg, float sendingTime)
{
Temperature = msg.ReadRangedSingle(0.0f, 10000.0f, 16);
autoTemp = msg.ReadBoolean();
AutoTemp = msg.ReadBoolean();
ShutDownTemp = msg.ReadRangedSingle(0.0f, 10000.0f, 8);
CoolingRate = msg.ReadRangedSingle(0.0f, 100.0f, 8);
@@ -443,7 +443,7 @@ namespace Barotrauma.Items.Components
}
}
public override void ClientWrite(Lidgren.Network.NetBuffer msg, object[] extraData = null)
public void ClientWrite(Lidgren.Network.NetBuffer msg, object[] extraData = null)
{
msg.Write(autoPilot);
@@ -468,7 +468,7 @@ namespace Barotrauma.Items.Components
}
}
public override void ServerRead(Lidgren.Network.NetIncomingMessage msg, Barotrauma.Networking.Client c)
public void ServerRead(Lidgren.Network.NetIncomingMessage msg, Barotrauma.Networking.Client c)
{
AutoPilot = msg.ReadBoolean();
@@ -503,7 +503,7 @@ namespace Barotrauma.Items.Components
}
}
public override void ServerWrite(Lidgren.Network.NetBuffer msg, Barotrauma.Networking.Client c, object[] extraData = null)
public void ServerWrite(Lidgren.Network.NetBuffer msg, Barotrauma.Networking.Client c, object[] extraData = null)
{
msg.Write(autoPilot);
@@ -524,7 +524,7 @@ namespace Barotrauma.Items.Components
}
}
public override void ClientRead(Lidgren.Network.NetIncomingMessage msg, float sendingTime)
public void ClientRead(Lidgren.Network.NetIncomingMessage msg, float sendingTime)
{
AutoPilot = msg.ReadBoolean();