Main/resources/[standalone]/fmLib/modules/positionObject/client.lua
2025-06-07 08:51:21 +02:00

108 lines
No EOL
3 KiB
Lua

--[[
CREDITS TO: https://github.com/Demigod916/object_gizmo
ASKED FOR PERMISSION TO COPY PASTA & MODIFY THIS CODE <3
(so we can keep fmLib our only dependency)
--]]
local usingGizmo = false
local function toggleNuiFrame(bool)
usingGizmo = bool
SetNuiFocus(bool, bool)
end
---@param handle number
function FM.positionObject(handle)
SendNUIMessage({
action = 'setGizmoEntity',
data = {
handle = handle,
position = GetEntityCoords(handle),
rotation = GetEntityRotation(handle)
}
})
toggleNuiFrame(true)
FM.console.log(
('Current Mode: %s \n'):format("translate") ..
'[W] - Translate Mode \n' ..
'[R] - Rotate Mode \n' ..
'[LALT] - Place On Ground \n' ..
'[Esc] - Done Editing \n'
)
while usingGizmo do
SendNUIMessage({
action = 'setCameraPosition',
data = {
position = GetFinalRenderedCamCoord(),
rotation = GetFinalRenderedCamRot()
}
})
Wait(0)
end
return {
handle = handle,
position = GetEntityCoords(handle),
rotation = GetEntityRotation(handle)
}
end
RegisterNUICallback('moveEntity', function(data, cb)
local entity = data.handle
local position = data.position
local rotation = data.rotation
SetEntityCoords(entity, position.x, position.y, position.z)
SetEntityRotation(entity, rotation.x, rotation.y, rotation.z)
cb('ok')
end)
RegisterNUICallback('placeOnGround', function(data, cb)
PlaceObjectOnGroundProperly(data.handle)
cb('ok')
end)
RegisterNUICallback('finishEdit', function(data, cb)
toggleNuiFrame(false)
SendNUIMessage({
action = 'setGizmoEntity',
data = {
handle = nil,
}
})
cb('ok')
end)
RegisterNUICallback('swapMode', function(data, cb)
FM.console.log(
('Current Mode: %s \n'):format(data.mode) ..
'[W] - Translate Mode \n' ..
'[R] - Rotate Mode \n' ..
'[LALT] - Place On Ground \n' ..
'[Esc] - Done Editing \n'
)
cb('ok')
end)
-- RegisterCommand('spawnobject',function(source, args, rawCommand) --example of how the gizmo could be used /spawnobject {object model name}
-- local objectName = args[1] or "prop_bench_01a"
-- local playerPed = PlayerPedId()
-- local offset = GetOffsetFromEntityInWorldCoords(playerPed, 0, 1.0, 0)
-- local model = joaat(objectName)
-- while not HasModelLoaded(model) do
-- RequestModel(model)
-- Wait(100)
-- end
-- local object = CreateObject(model, offset.x, offset.y, offset.z, true, false, false)
-- local objectPositionData = FM.positionObject(object) --export for the gizmo. just pass an object handle to the function.
-- FM.console.debug(objectPositionData)
-- end)