Better brake lights

This commit is contained in:
EntenKoeniq
2022-01-01 17:24:55 +01:00
parent 42903a1b53
commit 6f2da854a9
7 changed files with 47 additions and 31 deletions

View File

@ -45,6 +45,7 @@ namespace CoopClient.Entities.NPC
private bool LastHornActive = false; private bool LastHornActive = false;
internal bool IsHornActive { get; set; } internal bool IsHornActive { get; set; }
internal bool VehAreLightsOn { get; set; } internal bool VehAreLightsOn { get; set; }
internal bool VehAreBrakeLightsOn = false;
internal bool VehAreHighBeamsOn { get; set; } internal bool VehAreHighBeamsOn { get; set; }
internal byte VehLandingGear { get; set; } internal byte VehLandingGear { get; set; }
internal bool VehRoofOpened { get; set; } internal bool VehRoofOpened { get; set; }
@ -236,7 +237,7 @@ namespace CoopClient.Entities.NPC
} }
} }
Function.Call(Hash.SET_VEHICLE_BRAKE_LIGHTS, MainVehicle, CurrentVehicleSpeed > 0.2f && LastVehicleSpeed > CurrentVehicleSpeed); Function.Call(Hash.SET_VEHICLE_BRAKE_LIGHTS, MainVehicle.Handle, VehAreBrakeLightsOn);
if (LastSyncWasFull) if (LastSyncWasFull)
{ {

View File

@ -362,26 +362,32 @@ namespace CoopClient.Entities.Player
UpdateOnFootPosition(); UpdateOnFootPosition();
} }
private byte LastStuckCount = 0; private bool StuckDetection = false;
private ulong LastStuckTime; private ulong LastStuckTime;
private void UpdateOnFootPosition(bool updatePosition = true, bool updateRotation = true, bool updateVelocity = true) private void UpdateOnFootPosition(bool updatePosition = true, bool updateRotation = true, bool updateVelocity = true)
{ {
if (Character.Position.DistanceTo(Position) > 5f) ulong time = Util.GetTickCount64();
if (StuckDetection)
{ {
if (Util.GetTickCount64() - LastStuckTime < 1000) if (time - LastStuckTime >= 500)
{ {
LastStuckCount = 0; StuckDetection = false;
if (Character.Position.DistanceTo(Position) > 5f)
{
Character.PositionNoOffset = Position;
Character.Rotation = Rotation;
}
} }
}
++LastStuckCount; else if (time - LastStuckTime >= 500)
{
if (LastStuckCount >= 5) if (Character.Position.DistanceTo(Position) > 5f)
{ {
Character.Position = Position; StuckDetection = true;
LastStuckCount = 0; LastStuckTime = time;
} }
LastStuckTime = Util.GetTickCount64();
} }
if (updatePosition) if (updatePosition)

View File

@ -63,6 +63,7 @@ namespace CoopClient.Entities.Player
private bool LastHornActive = false; private bool LastHornActive = false;
internal bool IsHornActive { get; set; } internal bool IsHornActive { get; set; }
internal bool VehAreLightsOn { get; set; } internal bool VehAreLightsOn { get; set; }
internal bool VehAreBrakeLightsOn = false;
internal bool VehAreHighBeamsOn { get; set; } internal bool VehAreHighBeamsOn { get; set; }
internal byte VehLandingGear { get; set; } internal byte VehLandingGear { get; set; }
internal bool VehRoofOpened { get; set; } internal bool VehRoofOpened { get; set; }
@ -259,7 +260,7 @@ namespace CoopClient.Entities.Player
} }
} }
Function.Call(Hash.SET_VEHICLE_BRAKE_LIGHTS, MainVehicle, CurrentVehicleSpeed > 0.2f && LastVehicleSpeed > CurrentVehicleSpeed); Function.Call(Hash.SET_VEHICLE_BRAKE_LIGHTS, MainVehicle.Handle, VehAreBrakeLightsOn);
if (LastSyncWasFull) if (LastSyncWasFull)
{ {

View File

@ -385,6 +385,7 @@ namespace CoopClient
DebugSyncPed.IsInVehicle = true; DebugSyncPed.IsInVehicle = true;
DebugSyncPed.VehIsEngineRunning = (flags.Value & (ushort)VehicleDataFlags.IsEngineRunning) > 0; DebugSyncPed.VehIsEngineRunning = (flags.Value & (ushort)VehicleDataFlags.IsEngineRunning) > 0;
DebugSyncPed.VehAreLightsOn = (flags.Value & (ushort)VehicleDataFlags.AreLightsOn) > 0; DebugSyncPed.VehAreLightsOn = (flags.Value & (ushort)VehicleDataFlags.AreLightsOn) > 0;
DebugSyncPed.VehAreBrakeLightsOn = (flags.Value & (ushort)VehicleDataFlags.AreBrakeLightsOn) > 0;
DebugSyncPed.VehAreHighBeamsOn = (flags.Value & (ushort)VehicleDataFlags.AreHighBeamsOn) > 0; DebugSyncPed.VehAreHighBeamsOn = (flags.Value & (ushort)VehicleDataFlags.AreHighBeamsOn) > 0;
DebugSyncPed.VehIsSireneActive = (flags.Value & (ushort)VehicleDataFlags.IsSirenActive) > 0; DebugSyncPed.VehIsSireneActive = (flags.Value & (ushort)VehicleDataFlags.IsSirenActive) > 0;
DebugSyncPed.VehicleDead = (flags.Value & (ushort)VehicleDataFlags.IsDead) > 0; DebugSyncPed.VehicleDead = (flags.Value & (ushort)VehicleDataFlags.IsDead) > 0;
@ -392,7 +393,7 @@ namespace CoopClient
DebugSyncPed.Transformed = (flags.Value & (ushort)VehicleDataFlags.IsTransformed) > 0; DebugSyncPed.Transformed = (flags.Value & (ushort)VehicleDataFlags.IsTransformed) > 0;
DebugSyncPed.VehRoofOpened = (flags.Value & (ushort)VehicleDataFlags.RoofOpened) > 0; DebugSyncPed.VehRoofOpened = (flags.Value & (ushort)VehicleDataFlags.RoofOpened) > 0;
DebugSyncPed.VehLandingGear = veh.IsPlane ? (byte)veh.LandingGearState : (byte)0; DebugSyncPed.VehLandingGear = veh.IsPlane ? (byte)veh.LandingGearState : (byte)0;
if (DebugSyncPed.MainVehicle != null && DebugSyncPed.MainVehicle.Exists() && player.IsInVehicle()) if (DebugSyncPed.MainVehicle != null && DebugSyncPed.MainVehicle.Exists() && player.IsInVehicle())
{ {
Function.Call(Hash.SET_ENTITY_NO_COLLISION_ENTITY, DebugSyncPed.MainVehicle.Handle, veh.Handle, false); Function.Call(Hash.SET_ENTITY_NO_COLLISION_ENTITY, DebugSyncPed.MainVehicle.Handle, veh.Handle, false);

View File

@ -149,14 +149,15 @@ namespace CoopClient
{ {
IsEngineRunning = 1 << 0, IsEngineRunning = 1 << 0,
AreLightsOn = 1 << 1, AreLightsOn = 1 << 1,
AreHighBeamsOn = 1 << 2, AreBrakeLightsOn = 1 << 2,
IsSirenActive = 1 << 3, AreHighBeamsOn = 1 << 3,
IsDead = 1 << 4, IsSirenActive = 1 << 4,
IsHornActive = 1 << 5, IsDead = 1 << 5,
IsTransformed = 1 << 6, IsHornActive = 1 << 6,
RoofOpened = 1 << 7, IsTransformed = 1 << 7,
OnTurretSeat = 1 << 8, RoofOpened = 1 << 8,
IsPlane = 1 << 9 OnTurretSeat = 1 << 9,
IsPlane = 1 << 10
} }
/// <summary> /// <summary>

View File

@ -187,6 +187,11 @@ namespace CoopClient
flags |= (ushort)VehicleDataFlags.AreLightsOn; flags |= (ushort)VehicleDataFlags.AreLightsOn;
} }
if (veh.BrakePower >= 0.01f)
{
flags |= (ushort)VehicleDataFlags.AreBrakeLightsOn;
}
if (veh.AreHighBeamsOn) if (veh.AreHighBeamsOn)
{ {
flags |= (ushort)VehicleDataFlags.AreHighBeamsOn; flags |= (ushort)VehicleDataFlags.AreHighBeamsOn;

View File

@ -135,14 +135,15 @@ namespace CoopServer
{ {
IsEngineRunning = 1 << 0, IsEngineRunning = 1 << 0,
AreLightsOn = 1 << 1, AreLightsOn = 1 << 1,
AreHighBeamsOn = 1 << 2, AreBrakeLightsOn = 1 << 2,
IsSirenActive = 1 << 3, AreHighBeamsOn = 1 << 3,
IsDead = 1 << 4, IsSirenActive = 1 << 4,
IsHornActive = 1 << 5, IsDead = 1 << 5,
IsTransformed = 1 << 6, IsHornActive = 1 << 6,
RoofOpened = 1 << 7, IsTransformed = 1 << 7,
OnTurretSeat = 1 << 8, RoofOpened = 1 << 8,
IsPlane = 1 << 9 OnTurretSeat = 1 << 9,
IsPlane = 1 << 10
} }
struct VehicleDamageModel struct VehicleDamageModel