Fixed steering syncing

This commit is contained in:
Regalis
2016-12-09 17:42:52 +02:00
parent fa712e0102
commit 63ca7254b2
@@ -488,7 +488,30 @@ namespace Barotrauma.Items.Components
public void ServerRead(Lidgren.Network.NetIncomingMessage msg, Barotrauma.Networking.Client c) public void ServerRead(Lidgren.Network.NetIncomingMessage msg, Barotrauma.Networking.Client c)
{ {
bool autoPilot = msg.ReadBoolean(); bool autoPilot = msg.ReadBoolean();
Vector2 newTargetVelocity = targetVelocity;
bool maintainPos = false;
Vector2? newPosToMaintain = null;
bool headingToStart = false;
if (autoPilot)
{
maintainPos = msg.ReadBoolean();
if (maintainPos)
{
newPosToMaintain = new Vector2(
msg.ReadFloat(),
msg.ReadFloat());
}
else
{
headingToStart = msg.ReadBoolean();
}
}
else
{
newTargetVelocity = new Vector2(msg.ReadFloat(), msg.ReadFloat());
}
if (!item.CanClientAccess(c)) return; if (!item.CanClientAccess(c)) return;
@@ -496,31 +519,24 @@ namespace Barotrauma.Items.Components
if (!AutoPilot) if (!AutoPilot)
{ {
targetVelocity = new Vector2(msg.ReadFloat(), msg.ReadFloat()); targetVelocity = newTargetVelocity;
} }
else else
{ {
bool maintainPos = msg.ReadBoolean();
if (posToMaintain == null && maintainPos) maintainPosTickBox.Selected = newPosToMaintain != null;
posToMaintain = newPosToMaintain;
if (posToMaintain == null)
{ {
posToMaintain = item.Submarine.WorldPosition; levelStartTickBox.Selected = headingToStart;
maintainPosTickBox.Selected = true; levelEndTickBox.Selected = !headingToStart;
UpdatePath();
} }
else else
{ {
posToMaintain = null; levelStartTickBox.Selected = false;
maintainPosTickBox.Selected = false; levelEndTickBox.Selected = false;
bool maintainPoss = msg.ReadBoolean();
if (maintainPoss)
{
Vector2 newPosToMaintain = new Vector2(
msg.ReadFloat(),
msg.ReadFloat());
}
else
{
bool headingToStart = msg.ReadBoolean();
}
} }
} }
@@ -546,47 +562,64 @@ namespace Barotrauma.Items.Components
msg.Write(((Vector2)posToMaintain).X); msg.Write(((Vector2)posToMaintain).X);
msg.Write(((Vector2)posToMaintain).Y); msg.Write(((Vector2)posToMaintain).Y);
} }
else
{
msg.Write(levelStartTickBox.Selected);
}
} }
} }
public void ClientRead(Lidgren.Network.NetIncomingMessage msg, float sendingTime) public void ClientRead(Lidgren.Network.NetIncomingMessage msg, float sendingTime)
{ {
AutoPilot = msg.ReadBoolean(); bool autoPilot = msg.ReadBoolean();
Vector2 newTargetVelocity = targetVelocity;
bool maintainPos = false;
Vector2? newPosToMaintain = null;
bool headingToStart = false;
if (!AutoPilot) if (autoPilot)
{ {
targetVelocity = new Vector2(msg.ReadFloat(), msg.ReadFloat()); maintainPos = msg.ReadBoolean();
}
else
{
bool maintainPos = msg.ReadBoolean();
if (maintainPos) if (maintainPos)
{ {
posToMaintain = new Vector2(msg.ReadSingle(), msg.ReadSingle()); newPosToMaintain = new Vector2(
maintainPosTickBox.Selected = true; msg.ReadFloat(),
msg.ReadFloat());
} }
else else
{ {
posToMaintain = null; headingToStart = msg.ReadBoolean();
maintainPosTickBox.Selected = false;
} }
} }
maintainPosTickBox.Selected = posToMaintain != null;
//posToMaintain = newPosToMaintain;
if (posToMaintain == null && autoPilot)
{
levelStartTickBox.Selected = false;//headingToStart;
levelEndTickBox.Selected = true;//!headingToStart;
UpdatePath();
}
else else
{ {
levelStartTickBox.Selected = false; newTargetVelocity = new Vector2(msg.ReadFloat(), msg.ReadFloat());
levelEndTickBox.Selected = false;
} }
AutoPilot = autoPilot;
if (!AutoPilot)
{
targetVelocity = newTargetVelocity;
}
else
{
maintainPosTickBox.Selected = newPosToMaintain != null;
posToMaintain = newPosToMaintain;
if (posToMaintain == null)
{
levelStartTickBox.Selected = headingToStart;
levelEndTickBox.Selected = !headingToStart;
UpdatePath();
}
else
{
levelStartTickBox.Selected = false;
levelEndTickBox.Selected = false;
}
}
} }
} }
} }