1
0
Fork 0
forked from Simnation/Main
Main/resources/[voice]/saltychat/client/models/Vehicle.lua
2025-06-07 08:51:21 +02:00

105 lines
No EOL
2.5 KiB
Lua

---@enum VehicleDoorIndex
VehicleDoorIndex = {
FrontLeftDoor = 0,
FrontRightDoor = 1,
BackLeftDoor = 2,
BackRightDoor = 3,
Hood = 4,
Trunk = 5
}
---@enum VehicleRoofState
VehicleRoofState = {
Closed = 0,
Closing = 1,
Open = 2,
Opening = 3,
Broken = 6
};
---@enum VehicleSeat
VehicleSeat = {
Driver = -1,
Passenger = 0,
BackDriverSide = 1,
BackPassengerSide = 2,
}
---@class Vehicle
---@field Handle integer
---@field IsConvertible boolean
---@field RoofState integer
---@field Doors {Length: number, GetAll: fun(): {Index: integer, IsBroken: boolean, IsOpen: boolean}}
---@field Windows {AreAllIntact: boolean}
Vehicle = {}
Vehicle.__index = Vehicle
function Vehicle.new(vehicleHandle)
local self = setmetatable({}, Vehicle)
local metatable = {
__index = function(list, key)
if list.vehicle[key] then
return list.vehicle[key]()
else
return nil
end
end
}
setmetatable(self, metatable)
self.vehicle = {}
self.vehicle.Handle = function ()
return vehicleHandle
end
self.vehicle.IsConvertible = function ()
return IsVehicleAConvertible(self.Handle, false)
end
self.vehicle.RoofState = function ()
return GetConvertibleRoofState(self.Handle)
end
self.vehicle.Doors = function ()
return {
Length = GetNumberOfVehicleDoors(self.Handle),
GetAll = function ()
local doors = {}
for i=0, GetNumberOfVehicleDoors(self.Handle) do
if GetIsDoorValid(self.Handle, i) then
table.insert(doors, {
Index = i,
IsBroken = IsVehicleDoorDamaged(self.Handle, i),
IsOpen = IsVehicleDoorFullyOpen(self.Handle, i)
})
end
end
return doors
end
}
end
self.vehicle.Windows = function ()
return {
AreAllIntact = AreAllVehicleWindowsIntact(self.Handle),
GetAllWindows = function ()
local windows = {}
for i = 0, GetNumberOfVehicleDoors(self.Handle) do
if GetIsDoorValid(self.Handle, i) then
if i ~= VehicleDoorIndex.Hood and i ~= VehicleDoorIndex.Trunk then
table.insert(windows, {
Intact = IsVehicleWindowIntact(self.Handle, i)
})
end
end
end
for i = 6, 7 do
table.insert(windows, {
Intact = IsVehicleWindowIntact(self.Handle, i)
})
end
return windows
end
}
end
return self
end