Jump to content

Detectar el click de un componente


aka Blue

Recommended Posts

function getClosestComponent(vehicle, x, y, z)
  local a = {}
  for component in pairs ( getVehicleComponents(vehicle) ) do
    local cx, cy, cz = getVehicleComponentVisible(vehicle, component, "world")
    local distance = getDistanceBetweenPoints3D(x, y, z, cx, cy, cz)
      if ( a[distance] ) then
        repeat offset = math.random() until not a[distance+offset] end
      end
    a[distance+(offset or 0)] = {component, offset or 0}
  end
  local least, leastComp = -math.huge, nil
  for dist, compData in pairs(a) do
    local component, offset = unpack(compData)
    if dist-offset > least then
      least = dist-offset
      leastComp = component
  	end
  end
  return leastComp, least
end

Esto debería funcionar, no lo he probado.

Edited by Tomas
Link to comment
5 hours ago, aka Blue said:

@Tomas ¿Y cómo debería utilizarlo correctamente? Pregunto debido a que retorna 2 datos, una llego a entender que es la posición (leastComp), pero la otra, ¿Es? ¿La distancia entre? Gracias :) 

leastComp es el componente más cercano al click, lo otro es adicional y es la distancia que había entre el click y ese componente.

Link to comment

Vector en el argumento 4, got boolean me dice, no se puede ejecutar el getDistanceBetweenPoints3D

function getClosestComponent( vehicle, x, y, z )
	local a = { }
	for component in pairs( getVehicleComponents( vehicle ) ) do
		local cx, cy, cz = getVehicleComponentVisible( vehicle, component, "world" )
		local distance = getDistanceBetweenPoints3D( x, y, z, cx, cy, cz )
		if a[ distance ] then
			repeat offset = math.random( ) until not a[ distance+offset ] 
		end
		a[ distance+( offset or 0 ) ] = { component, offset or 0 }
	end
	local least, leastComp = -math.huge, nil
	for dist, compData in pairs( a ) do
		local component, offset = unpack( compData )
		if dist-offset > least then
			least = dist-offset
			leastComp = component
		end
		return component
	end	
end

addEventHandler( "onClientClick", root,
	function( button, state, absoluteX, absoluteY, worldX, worldY, worldZ, clickedElement )
		if button == "left" and state == "down" then
			if getElementType( clickedElement ) == "vehicle" then
				local component = getClosestComponent( clickedElement, worldX, worldY, worldZ )
				if component then
					outputChatBox( "si" )
				else
					outputChatBox( "no" )
				end
			end	
		end
	end
)

 

Vector en el argumento 4, got boolean me dice, no se puede ejecutar el getDistanceBetweenPoints3D

function getClosestComponent( vehicle, x, y, z )
	local a = { }
	for component in pairs( getVehicleComponents( vehicle ) ) do
		local cx, cy, cz = getVehicleComponentVisible( vehicle, component, "world" )
		local distance = getDistanceBetweenPoints3D( x, y, z, cx, cy, cz )
		if a[ distance ] then
			repeat offset = math.random( ) until not a[ distance+offset ] 
		end
		a[ distance+( offset or 0 ) ] = { component, offset or 0 }
	end
	local least, leastComp = -math.huge, nil
	for dist, compData in pairs( a ) do
		local component, offset = unpack( compData )
		if dist-offset > least then
			least = dist-offset
			leastComp = component
		end
		return component
	end	
end

addEventHandler( "onClientClick", root,
	function( button, state, absoluteX, absoluteY, worldX, worldY, worldZ, clickedElement )
		if button == "left" and state == "down" then
			if getElementType( clickedElement ) == "vehicle" then
				local component = getClosestComponent( clickedElement, worldX, worldY, worldZ )
				if component then
					outputChatBox( "si" )
				else
					outputChatBox( "no" )
				end
			end	
		end
	end
)

 

Link to comment
		local cx, cy, cz = getVehicleComponentPosition( vehicle, component, "world" )

 

		local cx, cy, cz = getVehicleComponentPosition( vehicle, component, "world" )

 

		local cx, cy, cz = getVehicleComponentPosition( vehicle, component, "world" )

 

Link to comment
22 minutes ago, aka Blue said:

Gracias @Tomas. Ya funcionó. Ahora mi duda es... el componente no se detecta como un elemento, pero, podría hacer un render en el cual, pudiese mover ese componente usando una variable para almacenarlo y en el render con distintos botones el movimiento del mismo?

Si, usa setVehicleComponentPosition.

22 minutes ago, aka Blue said:

Gracias @Tomas. Ya funcionó. Ahora mi duda es... el componente no se detecta como un elemento, pero, podría hacer un render en el cual, pudiese mover ese componente usando una variable para almacenarlo y en el render con distintos botones el movimiento del mismo?

Si, usa setVehicleComponentPosition.

Link to comment
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...