Vehicle sync update
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
});
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user