feat: markers (#460)

This commit is contained in:
Thomas
2023-12-29 04:59:40 +01:00
committed by GitHub
parent 04de10de81
commit 8c057ac10e

153
imports/marker/client.lua Normal file
View File

@@ -0,0 +1,153 @@
---@diagnostic disable: param-type-mismatch
lib.marker = {}
local defaultRotation = vector3(0, 0, 0)
local defaultDirection = vector3(0, 0, 0)
local defaultColor = { r = 255, g = 255, b = 255, a = 100 }
local defaultSize = { width = 2, height = 1 }
local markerTypesMap = {
UpsideDownCone = 0,
VerticalCylinder = 1,
ThickChevronUp = 2,
ThinChevronUp = 3,
CheckeredFlagRect = 4,
CheckeredFlagCircle = 5,
VerticleCircle = 6,
PlaneModel = 7,
LostMCTransparent = 8,
LostMC = 9,
Number0 = 10,
Number1 = 11,
Number2 = 12,
Number3 = 13,
Number4 = 14,
Number5 = 15,
Number6 = 16,
Number7 = 17,
Number8 = 18,
Number9 = 19,
ChevronUpx1 = 20,
ChevronUpx2 = 21,
ChevronUpx3 = 22,
HorizontalCircleFat = 23,
ReplayIcon = 24,
HorizontalCircleSkinny = 25,
HorizontalCircleSkinny_Arrow = 26,
HorizontalSplitArrowCircle = 27,
DebugSphere = 28,
DollarSign = 29,
HorizontalBars = 30,
WolfHead = 31,
QuestionMark = 32,
PlaneSymbol = 33,
HelicopterSymbol = 34,
BoatSymbol = 35,
CarSymbol = 36,
MotorcycleSymbol = 37,
BikeSymbol = 38,
TruckSymbol = 39,
ParachuteSymbol = 40,
Unknown41 = 41,
SawbladeSymbol = 42,
Unknown43 = 43,
}
---@alias MarkerType
---| "UpsideDownCone"
---| "VerticalCylinder"
---| "ThickChevronUp"
---| "ThinChevronUp"
---| "CheckeredFlagRect"
---| "CheckeredFlagCircle"
---| "VerticleCircle"
---| "PlaneModel"
---| "LostMCTransparent"
---| "LostMC"
---| "Number0"
---| "Number1"
---| "Number2"
---| "Number3"
---| "Number4"
---| "Number5"
---| "Number6"
---| "Number7"
---| "Number8"
---| "Number9"
---| "ChevronUpx1"
---| "ChevronUpx2"
---| "ChevronUpx3"
---| "HorizontalCircleFat"
---| "ReplayIcon"
---| "HorizontalCircleSkinny"
---| "HorizontalCircleSkinny_Arrow"
---| "HorizontalSplitArrowCircle"
---| "DebugSphere"
---| "DollarSign"
---| "HorizontalBars"
---| "WolfHead"
---| "QuestionMark"
---| "PlaneSymbol"
---| "HelicopterSymbol"
---| "BoatSymbol"
---| "CarSymbol"
---| "MotorcycleSymbol"
---| "BikeSymbol"
---| "TruckSymbol"
---| "ParachuteSymbol"
---| "Unknown41"
---| "SawbladeSymbol"
---| "Unknown43"
---@class MarkerProps
---@field type MarkerType | number
---@field coords { x: number, y: number, z: number }
---@field width? number
---@field height? number
---@field color? { r: number, g: number, b: number, a: number }
---@field rotation? { x: number, y: number, z: number }
---@field direction? { x: number, y: number, z: number }
---@param self MarkerProps
local function drawMarker(self)
DrawMarker(
self.type,
self.coords.x, self.coords.y, self.coords.z,
self.direction.x, self.direction.y, self.direction.z,
self.rotation.x, self.rotation.y, self.rotation.z,
self.width, self.width, self.height,
self.color.r, self.color.g, self.color.b, self.color.a,
false, true, 2, false, nil, nil, false)
end
---@param options MarkerProps
function lib.marker.new(options)
local markerType
if type(options.type) == "string" then
markerType = markerTypesMap[options.type]
if markerType == nil then
error(("unknown marker type '%s'"):format(options.type))
end
elseif type(options.type) == "number" then
markerType = options.type
else
error(("expected marker type to have type 'string' or 'number' (received %s)"):format(type(options.type)))
end
local self = {}
self.type = markerType
self.coords = options.coords
self.color = options.color or defaultColor
self.width = options.width or defaultSize.width
self.height = options.height or defaultSize.height
self.rotation = options.rotation or defaultRotation
self.direction = options.direction or defaultDirection
self.draw = drawMarker
self.width += 0.0
self.height += 0.0
return self
end
return lib.marker