Syncing aim & use inputs (i.e. left and right click)
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user