105 lines
		
	
	
		
			No EOL
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			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 |