Raycasting

Filtrování vrstev

Omezí paprsek na vybrané user layers a volitelně ignoruje jedno body.

Raycast filter je oddělený od collision matrix simulace. Vypnutí dvojice vrstev přes jolt_layer_set_collision() nebrání raycastu dotazovat kteroukoliv z nich, pokud ji vybere jeho maska.

Podporované formy filteru#

FilterChování
undefinedVšechny user layers; žádné ignorované body.
JoltLayerPouze tato živá vrstva.
[layer_a, layer_b]Sjednocení živých vrstev; duplicity se odstraní.
integer maskRaw unsigned 32-bit mask; 0 znamená všechny vrstvy.
{layers:[...], ignore:body}Sjednocení vrstev a jeden ignorovaný JoltBody.
{mask:value, ignore:body}Raw mask a jeden ignorovaný JoltBody.
{ignore:body}Všechny vrstvy s ignorováním jednoho body.

Vrstvy a ignorované body#

GML
var hit = jolt_raycast(0, 0, 2, 20, 0, 2, {
    layers: [world_layer, interactable_layer],
    ignore: player_body
});

Priorita mask#

Pokud options struct obsahuje mask, tato hodnota se použije okamžitě a layers se ignoruje. Zadávejte pouze jedno z těchto polí, aby byl záměr filteru jednoznačný.

GML
// mask má přednost; layers se s ní nespojí.
var filter = {
    mask: interactable_mask,
    layers: [world_layer],
    ignore: player_body
};

Mapování raw masky#

JoltLayer handles jsou 1-based, zatímco bity masky jsou zero-based. Handle 1 odpovídá bitu 0 a handle 32 bitu 31. Pole vrstev toto sjednocení vytváří automaticky.

GML
// Vybere layer handles 1 a 3: bity 0 a 2.
var mask = 1 | 4;
var hit = jolt_raycast(0, 0, 2, 20, 0, 2, mask);

Pravidla masky#

  • Raw mask musí být konečné nezáporné celé číslo od 0 do 4294967295.
  • Mask 0 znamená všechny user layers, nikoliv žádnou.
  • Prázdné pole vrstev se také převede na mask 0, a proto dotazuje všechny vrstvy.
  • Nenulová maska vybírá sjednocení nastavených bitů.

Validace a životnost#

  • Každý JoltLayer musí být při dotazu stále platný.
  • ignore musí být undefined nebo jeden živý JoltBody v aktivním managed worldu.
  • Zničené nebo stale resources způsobí chybu.
  • Filter nemění kontakty, collision response, events ani layer matrix.

Co filter neumí vyjádřit#

  • Sensor state, motion type ani active/sleeping state.
  • GML user_data nebo identitu entity.
  • Více než jedno ignorované body.
  • Výběr triangle, material nebo compound child.