Vehicle sync update

This commit is contained in:
EntenKoeniq
2021-07-11 00:51:46 +02:00
parent b9e2787d0f
commit 04629272c5
5 changed files with 28 additions and 6 deletions

View File

@ -48,6 +48,7 @@ namespace CoopClient
public Vehicle MainVehicle { get; set; }
public Vector3 VehiclePosition { get; set; }
public Quaternion VehicleRotation { get; set; }
public Vector3 VehicleVelocity { get; set; }
public float VehicleSpeed { get; set; }
public float VehicleSteeringAngle { get; set; }
private bool LastVehIsEngineRunning { get; set; }
@ -274,8 +275,15 @@ namespace CoopClient
MainVehicle.SteeringAngle = VehicleSteeringAngle;
// Good enough for now, but we need to create a better sync
MainVehicle.Position = VehiclePosition;
if (VehicleSpeed > 0.2f)
{
MainVehicle.Velocity = VehicleVelocity + (VehiclePosition - MainVehicle.Position);
}
else
{
MainVehicle.Position = VehiclePosition;
}
MainVehicle.Quaternion = VehicleRotation;
#endregion
}

View File

@ -303,6 +303,7 @@ namespace CoopClient
DebugSyncPed.VehicleSeatIndex = (int)player.SeatIndex;
DebugSyncPed.VehiclePosition = veh.Position;
DebugSyncPed.VehicleRotation = veh.Quaternion;
DebugSyncPed.VehicleVelocity = veh.Velocity;
DebugSyncPed.VehicleSpeed = veh.Speed;
DebugSyncPed.VehicleSteeringAngle = veh.SteeringAngle;
DebugSyncPed.LastSyncWasFull = (flags.Value & (byte)VehicleDataFlags.LastSyncWasFull) > 0;

View File

@ -392,6 +392,7 @@ namespace CoopClient
npc.VehicleSeatIndex = packet.VehSeatIndex;
npc.VehiclePosition = packet.VehPosition.ToVector();
npc.VehicleRotation = packet.VehRotation.ToQuaternion();
npc.VehicleVelocity = packet.VehVelocity.ToVector();
npc.VehicleSpeed = packet.VehSpeed;
npc.VehicleSteeringAngle = packet.VehSteeringAngle;
npc.LastSyncWasFull = (packet.Flag.Value & (byte)VehicleDataFlags.LastSyncWasFull) > 0;
@ -413,6 +414,7 @@ namespace CoopClient
VehicleSeatIndex = packet.VehSeatIndex,
VehiclePosition = packet.VehPosition.ToVector(),
VehicleRotation = packet.VehRotation.ToQuaternion(),
VehicleVelocity = packet.VehVelocity.ToVector(),
VehicleSpeed = packet.VehSpeed,
VehicleSteeringAngle = packet.VehSteeringAngle,
LastSyncWasFull = (packet.Flag.Value & (byte)VehicleDataFlags.LastSyncWasFull) > 0,
@ -506,6 +508,9 @@ namespace CoopClient
VehSeatIndex = (int)npc.SeatIndex,
VehPosition = npc.CurrentVehicle.Position.ToLVector(),
VehRotation = npc.CurrentVehicle.Quaternion.ToLQuaternion(),
VehVelocity = npc.CurrentVehicle.Velocity.ToLVector(),
VehSpeed = npc.CurrentVehicle.Speed,
VehSteeringAngle = npc.CurrentVehicle.SteeringAngle,
Flag = Util.GetPedFlags(npc, true)
}.PacketToNetOutGoingMessage(outgoingMessage);
}

View File

@ -468,12 +468,15 @@ namespace CoopClient
public LQuaternion VehRotation { get; set; }
[ProtoMember(10)]
public float VehSpeed { get; set; }
public LVector3 VehVelocity { get; set; }
[ProtoMember(11)]
public float VehSteeringAngle { get; set; }
public float VehSpeed { get; set; }
[ProtoMember(12)]
public float VehSteeringAngle { get; set; }
[ProtoMember(13)]
public byte? Flag { get; set; } = 0;
public override void PacketToNetOutGoingMessage(NetOutgoingMessage message)
@ -501,6 +504,7 @@ namespace CoopClient
VehSeatIndex = data.VehSeatIndex;
VehPosition = data.VehPosition;
VehRotation = data.VehRotation;
VehVelocity = data.VehVelocity;
VehSpeed = data.VehSpeed;
VehSteeringAngle = data.VehSteeringAngle;
Flag = data.Flag;

View File

@ -431,12 +431,15 @@ namespace CoopServer
public LQuaternion VehRotation { get; set; }
[ProtoMember(10)]
public float VehSpeed { get; set; }
public LVector3 VehVelocity { get; set; }
[ProtoMember(11)]
public float VehSteeringAngle { get; set; }
public float VehSpeed { get; set; }
[ProtoMember(12)]
public float VehSteeringAngle { get; set; }
[ProtoMember(13)]
public byte? Flag { get; set; } = 0;
public override void PacketToNetOutGoingMessage(NetOutgoingMessage message)
@ -464,6 +467,7 @@ namespace CoopServer
VehSeatIndex = data.VehSeatIndex;
VehPosition = data.VehPosition;
VehRotation = data.VehRotation;
VehVelocity = data.VehVelocity;
VehSpeed = data.VehSpeed;
VehSteeringAngle = data.VehSteeringAngle;
Flag = data.Flag;