Vehicle sync update

This commit is contained in:
EntenKoeniq
2021-07-10 10:52:43 +02:00
parent 2be5375a47
commit 8e8eddf1f3
5 changed files with 27 additions and 2 deletions

View File

@ -41,13 +41,14 @@ namespace CoopClient
public Blip PedBlip;
#region -- VEHICLE --
#region -- IN VEHICLE --
public bool IsInVehicle { get; set; }
public int VehicleModelHash { get; set; }
public int VehicleSeatIndex { get; set; }
public Vehicle MainVehicle { get; set; }
public Vector3 VehiclePosition { get; set; }
public Quaternion VehicleRotation { get; set; }
public float VehicleSpeed { get; set; }
#endregion
public void DisplayLocally(string username)
@ -242,7 +243,20 @@ namespace CoopClient
Character.IsVisible = true;
}
MainVehicle.Position = VehiclePosition;
float range = MainVehicle.Position.DistanceTo(VehiclePosition);
// Good enough for now, but we need to create a better sync
if (range > 0.8f && range <= 15f && VehicleSpeed >= 1)
{
Vector3 dir = VehiclePosition - MainVehicle.Position;
dir.Normalize();
Vector3 vect = dir * Math.Abs(VehicleSpeed - MainVehicle.Speed);
MainVehicle.ApplyForce(vect);
}
else
{
MainVehicle.Position = VehiclePosition;
}
MainVehicle.Quaternion = VehicleRotation;
}

View File

@ -298,6 +298,7 @@ namespace CoopClient
DebugSyncPed.VehicleSeatIndex = (int)player.SeatIndex;
DebugSyncPed.VehiclePosition = veh.Position;
DebugSyncPed.VehicleRotation = veh.Quaternion;
DebugSyncPed.VehicleSpeed = veh.Speed;
}
DebugSyncPed.IsInVehicle = (flags.Value & (byte)PedDataFlags.IsInVehicle) > 0;

View File

@ -392,6 +392,7 @@ namespace CoopClient
npc.VehicleSeatIndex = packet.VehSeatIndex;
npc.VehiclePosition = packet.VehPosition.ToVector();
npc.VehicleRotation = packet.VehRotation.ToQuaternion();
npc.VehicleSpeed = packet.VehSpeed;
npc.LastSyncWasFull = (packet.Flag.Value & (byte)PedDataFlags.LastSyncWasFull) > 0;
npc.IsInVehicle = (packet.Flag.Value & (byte)PedDataFlags.IsInVehicle) > 0;
}
@ -408,6 +409,7 @@ namespace CoopClient
VehicleSeatIndex = packet.VehSeatIndex,
VehiclePosition = packet.VehPosition.ToVector(),
VehicleRotation = packet.VehRotation.ToQuaternion(),
VehicleSpeed = packet.VehSpeed,
LastSyncWasFull = (packet.Flag.Value & (byte)PedDataFlags.LastSyncWasFull) > 0,
IsInVehicle = (packet.Flag.Value & (byte)PedDataFlags.IsInVehicle) > 0
});

View File

@ -458,6 +458,9 @@ namespace CoopClient
public LQuaternion VehRotation { get; set; }
[ProtoMember(10)]
public float VehSpeed { get; set; }
[ProtoMember(11)]
public byte? Flag { get; set; } = 0;
public override void PacketToNetOutGoingMessage(NetOutgoingMessage message)
@ -485,6 +488,7 @@ namespace CoopClient
VehSeatIndex = data.VehSeatIndex;
VehPosition = data.VehPosition;
VehRotation = data.VehRotation;
VehSpeed = data.VehSpeed;
Flag = data.Flag;
}
}

View File

@ -421,6 +421,9 @@ namespace CoopServer
public LQuaternion VehRotation { get; set; }
[ProtoMember(10)]
public float VehSpeed { get; set; }
[ProtoMember(11)]
public byte? Flag { get; set; } = 0;
public override void PacketToNetOutGoingMessage(NetOutgoingMessage message)
@ -448,6 +451,7 @@ namespace CoopServer
VehSeatIndex = data.VehSeatIndex;
VehPosition = data.VehPosition;
VehRotation = data.VehRotation;
VehSpeed = data.VehSpeed;
Flag = data.Flag;
}
}