Pular para o conteúdo

setModelCollision

Cliente Engine e modelos

Dá a um modelo de objeto uma colisão construída a partir de uma tabela de formas — sem arquivo .col envolvido — e devolve a original com nil.

bool setModelCollision ( number/string modelo, table/nil colisao )
NomeTipoDescrição
modelonumber/stringModelo a alterar. Só modelos de objeto aceitam uma colisão nova.
colisaotableA colisão nova como uma tabela de formas, ou nil para devolver a colisão original.

A tabela guarda as mesmas formas que um arquivo .col pode ter. Cada lista é opcional, mas pelo menos uma forma precisa estar presente: esferas, caixas ou linhas, ou vertices e triangles juntos.

CampoConteúdo
spheresAté 256 tabelas: position (3 números), radius (maior que 0), material, day, night, brightness.
boxesAté 512 tabelas: min e max (3 números cada, max não abaixo de min em nenhum eixo), material, day, night, brightness.
linesAté 255 tabelas: start e stop (3 números cada), startSize, stopSize (ambos 0 ou mais).
verticesAté 16384 tabelas de 3 números. Cada coordenada precisa ficar a até 255 da origem, em qualquer direção.
trianglesAté 16384 tabelas: os três índices de vértice nos campos 1, 2 e 3 (contando a partir de 0, dentro de vertices), mais material, day, night.
shadowA malha de sombra, com as mesmas formas vertices (até 10000) e triangles (até 5000) — as duas listas juntas, ou nenhuma.

material é um ID de superfície, de 0 a 178. day e night são o brilho da superfície na iluminação de dia e de noite, de 0 a 15. Um campo deixado de fora cai para o padrão: material 0, day 12, night 1, brightness 0. Um radius ausente conta como 0, então ele ainda precisa ser informado.

true se o modelo passou a usar a colisão nova. false, com o motivo escrito no console de debug, quando o modelo não é um modelo de objeto, colisao não é nem tabela nem nil, ou alguma forma está malformada: um tipo errado ou um número não finito em algum campo, um valor fora das faixas acima, uma lista acima do limite, um índice de vértice inválido ou um triângulo apontando para fora de vertices, ou uma tabela sem forma alguma. Nada aqui interrompe o script que chamou: como a maioria das funções de engine, esta só avisa e devolve false.

nil devolve a colisão original: uma colisão que esta função definiu antes é descartada, e caso contrário o comportamento é o de engineRestoreCOL, devolvendo false quando nada tinha substituído a colisão do modelo. Chamar a função de novo descarta a colisão construída anterior, e quando o resource para toda colisão definida por ele também é descartada, devolvendo os modelos aos originais.

-- uma caixa sólida do tamanho de um engradado para um modelo próprio
setModelCollision(idMeuModelo, {
boxes = {
{ min = { -1, -1, 0 }, max = { 1, 1, 2 }, material = 1 }
}
})
-- e de volta ao original
setModelCollision(idMeuModelo, nil)