Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ public class VehicleDamageSyncPacketHandler : IPacketHandler<VehicleDamageSyncPa
private readonly IElementCollection elementCollection;

public PacketId PacketId => PacketId.PACKET_ID_VEHICLE_DAMAGE_SYNC;

private readonly int MAX_DOORS = 6;
private readonly int MAX_WHEELS = 4;
private readonly int MAX_PANELS = 6;
private readonly int MAX_LIGHTS = 16;

public VehicleDamageSyncPacketHandler(
ISyncHandlerMiddleware<VehicleDamageSyncPacket> middleware,
Expand All @@ -26,10 +31,8 @@ IElementCollection elementCollection

public void HandlePacket(IClient client, VehicleDamageSyncPacket packet)
{
var otherPlayers = this.middleware.GetPlayersToSyncTo(client.Player, packet);
packet.SendTo(otherPlayers);

var player = client.Player;
bool isChanged = false;

var vehicle = this.elementCollection.Get(packet.VehicleId) as Elements.Vehicle;

Expand All @@ -39,20 +42,42 @@ public void HandlePacket(IClient client, VehicleDamageSyncPacket packet)
{
foreach (var door in Enum.GetValues<VehicleDoor>())
if (packet.DoorStates[(int)door] != null)
{
vehicle.SetDoorState(door, (VehicleDoorState)packet.DoorStates[(int)door]!);
isChanged = true;
}

foreach (var wheel in Enum.GetValues<VehicleWheel>())
if (packet.WheelStates[(int)wheel] != null)
{
vehicle.SetWheelState(wheel, (VehicleWheelState)packet.WheelStates[(int)wheel]!);
isChanged = true;
}

foreach (var panel in Enum.GetValues<VehiclePanel>())
if (packet.PanelStates[(int)panel] != null)
{
vehicle.SetPanelState(panel, (VehiclePanelState)packet.PanelStates[(int)panel]!);
isChanged = true;
}

foreach (var light in Enum.GetValues<VehicleLight>())
if (packet.LightStates[(int)light] != null)
{
vehicle.SetLightState(light, (VehicleLightState)packet.LightStates[(int)light]!);
isChanged = true;
}
});
if (isChanged)
{
var syncPacket = new VehicleDamageSyncPacket() { VehicleId = vehicle.Id, };
for (int i = 0; i < this.MAX_DOORS; i++) syncPacket.DoorStates[i] = vehicle.Damage.Doors[i];
for (int i = 0; i < this.MAX_WHEELS; i++) syncPacket.WheelStates[i] = vehicle.Damage.Wheels[i];
for (int i = 0; i< this.MAX_PANELS; i++) syncPacket.PanelStates[i] = vehicle.Damage.Panels[i];
for (int i = 0; i< this.MAX_LIGHTS; i++) syncPacket.LightStates[i] = vehicle.Damage.Lights[i];
var otherPlayers = this.middleware.GetPlayersToSyncTo(client.Player, syncPacket);
syncPacket.SendTo(otherPlayers);
}
}
}
}