Pular para o conteúdo

processLineOfSight

Cliente Mundo

Traça uma linha entre dois pontos e descreve o primeiro obstáculo encontrado.

bool, ... processLineOfSight ( number inicioX, number inicioY, number inicioZ, number fimX, number fimY, number fimZ [, bool verificarPredios = true, bool verificarVeiculos = true, bool verificarPeds = true, bool verificarObjetos = true, bool verificarDummies = true, bool atravessarVidros = false, bool ignorarObjetosDeCamera = false, bool atravessarTiros = false, element elementoIgnorado, bool incluirDadosDoPredio = false, bool verificarPneus = false, bool incluirDadosDoMaterial = false ] )
NomeTipoPadrãoDescrição
inicioX, inicioY, inicioZnumber—Ponto de partida da linha.
fimX, fimY, fimZnumber—Ponto final da linha.
verificarPrediosbooltrueConsiderar prédios e o cenário fixo.
verificarVeiculosbooltrueConsiderar veículos.
verificarPedsbooltrueConsiderar peds e jogadores.
verificarObjetosbooltrueConsiderar objetos.
verificarDummiesbooltrueConsiderar dummies.
atravessarVidrosboolfalseIgnorar superfícies transparentes, como vidros.
ignorarObjetosDeCameraboolfalseIgnorar os objetos que a câmera também ignora.
atravessarTirosboolfalseIgnorar superfícies que tiros atravessam.
elementoIgnoradoelement—Um elemento que a linha atravessa como se não existisse. nil ou false significa nenhum; qualquer outra coisa precisa ser um elemento existente, senão a chamada devolve false e registra um aviso.
incluirDadosDoPredioboolfalsePreencher as posições 12 a 19 do retorno.
verificarPneusboolfalseConsiderar os pneus dos veículos como superfície de colisão.
incluirDadosDoMaterialboolfalsePreencher as posições 20 a 26 do retorno.

Um único false quando a linha não bate em nada. Quando bate, devolve 26 valores:

PosiçãoDescrição
1true.
2, 3, 4Posição do impacto.
5Elemento atingido, ou nil se foi geometria bruta do cenário.
6, 7, 8Vetor normal da superfície atingida.
9Identificador do material da superfície.
10Iluminação da superfície no horário atual.
11Peça atingida.
12ID do modelo atingido.
13, 14, 15Posição do modelo.
16, 17, 18Rotação do modelo, em graus.
19ID do modelo de LOD.
20, 21Coordenadas U e V dentro da textura.
22Nome da textura, ou nil se não tiver nome.
23Nome do frame, ou nil se não tiver nome.
24, 25, 26Posição exata do impacto sobre a malha.

As posições 12 a 19 vêm nil quando incluirDadosDoPredio é false ou quando o que foi atingido não tem modelo. As posições 20 a 26 vêm nil quando incluirDadosDoMaterial é false ou quando a malha não pôde ser resolvida. As posições nunca somem — mesmo vazias, elas ocupam lugar no retorno, então indexar por posição é seguro.

-- o que a câmera está mirando?
addCommandHandler("mirar", function()
local cx, cy, cz, lx, ly, lz = getCameraMatrix()
local dx, dy, dz = lx - cx, ly - cy, lz - cz
local acertou, x, y, z, elemento = processLineOfSight(
cx, cy, cz,
cx + dx * 100, cy + dy * 100, cz + dz * 100)
if not acertou then
outputDebugString("nada no caminho")
elseif elemento then
outputDebugString("acertou um " .. getElementType(elemento))
else
outputDebugString("acertou o cenario em " .. x .. ", " .. y .. ", " .. z)
end
end)
  • isLineOfSightClear — Responde apenas se existe caminho livre entre dois pontos, sem descrever o obstáculo.
  • processLineAgainstMesh — Traça uma linha contra a malha de um elemento específico e devolve o ponto exato do triângulo atingido.
  • testSphereAgainstWorld — Testa uma esfera contra o mundo e descreve o que ela encostou.
  • getGroundPosition — Devolve a altura do chão logo abaixo de um ponto.
  • getRoofPosition — Devolve a altura do teto logo acima de um ponto.