Syncing aim & use inputs (i.e. left and right click)

This commit is contained in:
Regalis
2016-12-28 22:33:43 +02:00
parent a733e917dd
commit 98183c47fb
+35 -28
View File
@@ -26,7 +26,8 @@ namespace Barotrauma
get { return netStateID; } get { return netStateID; }
} }
private enum InputNetFlags : UInt16 [Flags]
private enum InputNetFlags : ushort
{ {
None = 0x0, None = 0x0,
Left = 0x1, Left = 0x1,
@@ -36,6 +37,11 @@ namespace Barotrauma
FacingLeft = 0x10, FacingLeft = 0x10,
Run = 0x20, Run = 0x20,
Select = 0x40, Select = 0x40,
Use = 0x80,
Aim = 0x100,
//Attack = 0x200
MaxVal = 0x200
} }
private InputNetFlags dequeuedInput = 0; private InputNetFlags dequeuedInput = 0;
private InputNetFlags prevDequeuedInput = 0; private InputNetFlags prevDequeuedInput = 0;
@@ -704,31 +710,28 @@ namespace Barotrauma
public bool IsKeyDown(InputType inputType) public bool IsKeyDown(InputType inputType)
{ {
if (GameMain.Server!=null && Character.Controlled!=this) if (GameMain.Server != null && Character.Controlled != this)
{ {
bool retVal = false;
switch (inputType) switch (inputType)
{ {
case InputType.Left: case InputType.Left:
retVal = dequeuedInput.HasFlag(InputNetFlags.Left); return dequeuedInput.HasFlag(InputNetFlags.Left);
break;
case InputType.Right: case InputType.Right:
retVal = dequeuedInput.HasFlag(InputNetFlags.Right); return dequeuedInput.HasFlag(InputNetFlags.Right);
break;
case InputType.Up: case InputType.Up:
retVal = dequeuedInput.HasFlag(InputNetFlags.Up); return dequeuedInput.HasFlag(InputNetFlags.Up);
break;
case InputType.Down: case InputType.Down:
retVal = dequeuedInput.HasFlag(InputNetFlags.Down); return dequeuedInput.HasFlag(InputNetFlags.Down);
break;
case InputType.Run: case InputType.Run:
retVal = dequeuedInput.HasFlag(InputNetFlags.Run); return dequeuedInput.HasFlag(InputNetFlags.Run);
break;
case InputType.Select: case InputType.Select:
retVal = dequeuedInput.HasFlag(InputNetFlags.Select); return dequeuedInput.HasFlag(InputNetFlags.Select);
break; case InputType.Aim:
return dequeuedInput.HasFlag(InputNetFlags.Aim);
case InputType.Use:
return dequeuedInput.HasFlag(InputNetFlags.Use);
} }
return retVal; return false;
} }
return keys[(int)inputType].Held; return keys[(int)inputType].Held;
@@ -1356,13 +1359,17 @@ namespace Barotrauma
memLocalPos.Add(new PosInfo(SimPosition, AnimController.TargetDir, LastNetworkUpdateID)); memLocalPos.Add(new PosInfo(SimPosition, AnimController.TargetDir, LastNetworkUpdateID));
InputNetFlags newInput = InputNetFlags.None; InputNetFlags newInput = InputNetFlags.None;
if (IsKeyDown(InputType.Left)) newInput |= InputNetFlags.Left; if (IsKeyDown(InputType.Left)) newInput |= InputNetFlags.Left;
if (IsKeyDown(InputType.Right)) newInput |= InputNetFlags.Right; if (IsKeyDown(InputType.Right)) newInput |= InputNetFlags.Right;
if (IsKeyDown(InputType.Up)) newInput |= InputNetFlags.Up; if (IsKeyDown(InputType.Up)) newInput |= InputNetFlags.Up;
if (IsKeyDown(InputType.Down)) newInput |= InputNetFlags.Down; if (IsKeyDown(InputType.Down)) newInput |= InputNetFlags.Down;
if (IsKeyDown(InputType.Run)) newInput |= InputNetFlags.Run;
if (IsKeyDown(InputType.Select)) newInput |= InputNetFlags.Select;
if (IsKeyDown(InputType.Use)) newInput |= InputNetFlags.Use;
if (IsKeyDown(InputType.Aim)) newInput |= InputNetFlags.Aim;
if (AnimController.TargetDir == Direction.Left) newInput |= InputNetFlags.FacingLeft; if (AnimController.TargetDir == Direction.Left) newInput |= InputNetFlags.FacingLeft;
if (IsKeyDown(InputType.Run)) newInput |= InputNetFlags.Run;
if (IsKeyDown(InputType.Select)) newInput |= InputNetFlags.Select;
memInput.Insert(0, newInput); memInput.Insert(0, newInput);
memMousePos.Insert(0, closestItem!=null ? closestItem.Position : cursorPosition); memMousePos.Insert(0, closestItem!=null ? closestItem.Position : cursorPosition);
LastNetworkUpdateID++; LastNetworkUpdateID++;
@@ -1956,8 +1963,8 @@ namespace Barotrauma
msg.Write(inputCount); msg.Write(inputCount);
for (int i = 0; i < inputCount; i++) for (int i = 0; i < inputCount; i++)
{ {
msg.Write((byte)memInput[i]); msg.WriteRangedInteger(0, (int)InputNetFlags.MaxVal,(int)memInput[i]);
if (memInput[i].HasFlag(InputNetFlags.Select)) if (memInput[i].HasFlag(InputNetFlags.Select) || memInput[i].HasFlag(InputNetFlags.Aim))
{ {
msg.Write(memMousePos[i].X); msg.Write(memMousePos[i].X);
msg.Write(memMousePos[i].Y); msg.Write(memMousePos[i].Y);
@@ -1973,14 +1980,14 @@ namespace Barotrauma
{ {
case ClientNetObject.CHARACTER_INPUT: case ClientNetObject.CHARACTER_INPUT:
UInt32 networkUpdateID = msg.ReadUInt32(); UInt32 networkUpdateID = msg.ReadUInt32();
byte inputCount = msg.ReadByte(); byte inputCount = msg.ReadByte();
for (int i = 0; i < inputCount; i++) for (int i = 0; i < inputCount; i++)
{ {
InputNetFlags newInput = (InputNetFlags)msg.ReadByte(); InputNetFlags newInput = (InputNetFlags)msg.ReadRangedInteger(0, (int)InputNetFlags.MaxVal);
Vector2 newMousePos = Position; Vector2 newMousePos = Position;
if (newInput.HasFlag(InputNetFlags.Select)) if (newInput.HasFlag(InputNetFlags.Select) || newInput.HasFlag(InputNetFlags.Aim))
{ {
newMousePos.X = msg.ReadSingle(); newMousePos.X = msg.ReadSingle();
newMousePos.Y = msg.ReadSingle(); newMousePos.Y = msg.ReadSingle();