processLineOfSight
Traça uma linha entre dois pontos e descreve o primeiro obstáculo encontrado.
Sintaxe
Seção intitulada “Sintaxe”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 ] )Parâmetros
Seção intitulada “Parâmetros”| Nome | Tipo | Padrão | Descrição |
|---|---|---|---|
inicioX, inicioY, inicioZ | number | — | Ponto de partida da linha. |
fimX, fimY, fimZ | number | — | Ponto final da linha. |
verificarPredios | bool | true | Considerar prédios e o cenário fixo. |
verificarVeiculos | bool | true | Considerar veículos. |
verificarPeds | bool | true | Considerar peds e jogadores. |
verificarObjetos | bool | true | Considerar objetos. |
verificarDummies | bool | true | Considerar dummies. |
atravessarVidros | bool | false | Ignorar superfícies transparentes, como vidros. |
ignorarObjetosDeCamera | bool | false | Ignorar os objetos que a câmera também ignora. |
atravessarTiros | bool | false | Ignorar superfícies que tiros atravessam. |
elementoIgnorado | element | — | 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. |
incluirDadosDoPredio | bool | false | Preencher as posições 12 a 19 do retorno. |
verificarPneus | bool | false | Considerar os pneus dos veículos como superfície de colisão. |
incluirDadosDoMaterial | bool | false | Preencher as posições 20 a 26 do retorno. |
Retorno
Seção intitulada “Retorno”Um único false quando a linha não bate em nada. Quando bate, devolve 26 valores:
| Posição | Descrição |
|---|---|
| 1 | true. |
| 2, 3, 4 | Posição do impacto. |
| 5 | Elemento atingido, ou nil se foi geometria bruta do cenário. |
| 6, 7, 8 | Vetor normal da superfície atingida. |
| 9 | Identificador do material da superfície. |
| 10 | Iluminação da superfície no horário atual. |
| 11 | Peça atingida. |
| 12 | ID do modelo atingido. |
| 13, 14, 15 | Posição do modelo. |
| 16, 17, 18 | Rotação do modelo, em graus. |
| 19 | ID do modelo de LOD. |
| 20, 21 | Coordenadas U e V dentro da textura. |
| 22 | Nome da textura, ou nil se não tiver nome. |
| 23 | Nome do frame, ou nil se não tiver nome. |
| 24, 25, 26 | Posiçã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.
Exemplo
Seção intitulada “Exemplo”-- 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) endend)Veja também
Seção intitulada “Veja também”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.