108 lines
		
	
	
		
			No EOL
		
	
	
		
			3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			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) |