ed
This commit is contained in:
parent
510e3ffcf2
commit
f43cf424cf
305 changed files with 34683 additions and 0 deletions
|
@ -0,0 +1,147 @@
|
|||
---@diagnostic disable: duplicate-set-field
|
||||
Marker = {}
|
||||
local Created = setmetatable({}, { __mode = "k" }) --what is mode?
|
||||
local Ids = Ids or Require("lib/utility/shared/ids.lua")
|
||||
local point = Point or Require("lib/points/client/points.lua")
|
||||
local loopRunning = false
|
||||
local Drawing = {}
|
||||
|
||||
--- This will validate the marker data.
|
||||
--- @param data table{position: vector3, offset: vector3, rotation: vector3, size: vector3, color: vector3, alpha: number, bobUpAndDown: boolean, marker: number, interaction: function}
|
||||
--- @return boolean
|
||||
local function validateMarkerData(data)
|
||||
if not data.position or not data.position.x or not data.position.y or not data.position.z then
|
||||
print("Invalid marker position. Must be a vector3 with x, y, and z coordinates.")
|
||||
return false
|
||||
end
|
||||
if data.offset and (not data.offset.x or not data.offset.y or not data.offset.z) then
|
||||
print("Invalid marker offset. Must be a vector3 with x, y, and z coordinates.")
|
||||
return false
|
||||
end
|
||||
if data.rotation and (not data.rotation.x or not data.rotation.y or not data.rotation.z) then
|
||||
print("Invalid marker rotation. Must be a vector3 with x, y, and z coordinates.")
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
--- This will create a marker.
|
||||
--- @param data table{position: vector3, offset: vector3, rotation: vector3, size: vector3, color: vector3, alpha: number, bobUpAndDown: boolean, marker: number, interaction: function}
|
||||
--- @return string|nil
|
||||
function Marker.Create(data)
|
||||
local _id = data.id or Ids.CreateUniqueId(Created)
|
||||
if not validateMarkerData(data) then return end
|
||||
local basePosition = data.position or vector3(0.0, 0.0, 0.0)
|
||||
local baseOffset = data.offset or vector3(0.0, 0.0, 0.0)
|
||||
|
||||
local data = {
|
||||
id = _id,
|
||||
position = vector3(basePosition.x + baseOffset.x, basePosition.y + baseOffset.y, basePosition.z + baseOffset.z),
|
||||
marker = data.marker or 1,
|
||||
rotation = data.rotation or vector3(0, 0, 0),
|
||||
size = data.size or vector3(1.0, 1.0, 1.0),
|
||||
color = data.color or vector3(0, 255, 0),
|
||||
alpha = data.alpha or 255,
|
||||
bobUpAndDown = data.bobUpAndDown,
|
||||
-- interaction = data.interaction or false, -- Uncomment if you re-implement interaction logic
|
||||
rotate = data.rotate,
|
||||
textureDict = data.textureDict,
|
||||
textureName = data.textureName,
|
||||
drawOnEnts = data.drawOnEnts,
|
||||
}
|
||||
Created[_id] = data
|
||||
|
||||
point.Register(
|
||||
_id, data.position, data.drawDistance or 50.0, data,
|
||||
function(_)
|
||||
if not Created[_id] then return point.Remove(_id) end
|
||||
Drawing[_id] = Created[_id]
|
||||
Marker.Run()
|
||||
end,
|
||||
function(markerData)
|
||||
Drawing[_id] = nil
|
||||
end, nil
|
||||
)
|
||||
return _id
|
||||
end
|
||||
|
||||
--- This will remove a marker.
|
||||
--- @param id string
|
||||
--- @return boolean
|
||||
function Marker.Remove(id)
|
||||
if not Created[id] then return false end
|
||||
point.Remove(id)
|
||||
Drawing[id] = nil
|
||||
Created[id] = nil
|
||||
return true
|
||||
end
|
||||
|
||||
--- This will remove all markers.
|
||||
--- @param id string
|
||||
function Marker.RemoveAll()
|
||||
for id, _ in pairs(Created) do
|
||||
point.Remove(id)
|
||||
Created[id] = nil
|
||||
end
|
||||
end
|
||||
|
||||
-- This will loop through all marker(points) in range and draw them.
|
||||
-- @param data table{marker: number, position: vector3, rotation: vector3, size: vector3, color: vector3, alpha: number, bobUpAndDown: boolean, faceCamera: boolean, rotate: boolean, textureDict: string, textureName: string, drawOnEnts: boolean}
|
||||
-- @return nil
|
||||
function Marker.Run()
|
||||
if loopRunning then return end
|
||||
loopRunning = true
|
||||
CreateThread(function()
|
||||
while loopRunning do
|
||||
if not next(Created) then
|
||||
loopRunning = false
|
||||
return
|
||||
end
|
||||
for drawingId, drawingData in pairs(Drawing) do
|
||||
if not Created[drawingId] then
|
||||
Drawing[drawingId] = nil
|
||||
goto continue
|
||||
end
|
||||
DrawMarker(
|
||||
drawingData.marker,
|
||||
drawingData.position.x, drawingData.position.y, drawingData.position.z,
|
||||
0.0, 0.0, 0.0,
|
||||
drawingData.rotation.x, drawingData.rotation.y, drawingData.rotation.z,
|
||||
drawingData.size.x, drawingData.size.y, drawingData.size.z,
|
||||
drawingData.color.x, drawingData.color.y, drawingData.color.z, drawingData.alpha,
|
||||
drawingData.bobUpAndDown, drawingData.faceCamera, false,
|
||||
drawingData.rotate, drawingData.textureDict, drawingData.textureName, drawingData.drawOnEnts
|
||||
)
|
||||
::continue::
|
||||
end
|
||||
Wait(3)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
RegisterNetEvent("community_bridge:Client:Marker", function(data)
|
||||
Marker.Create(data)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("community_bridge:Client:MarkerBulk", function(datas)
|
||||
if not datas then return end
|
||||
for _, data in pairs(datas) do
|
||||
Marker.Create(data)
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("community_bridge:Client:MarkerRemove", function(id)
|
||||
Marker.Remove(id)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("community_bridge:Client:MarkerRemoveBulk", function(ids)
|
||||
if not ids then return end
|
||||
for _, id in pairs(ids) do
|
||||
Marker.Remove(id)
|
||||
end
|
||||
end)
|
||||
|
||||
exports("Marker", Marker)
|
||||
|
||||
|
||||
return Marker
|
Loading…
Add table
Add a link
Reference in a new issue