Kontakty postavy
Zpracovává kontaktní eventy s rigidními tělesy i mezi postavami.
Nativní bridge zaznamenává Added, Persisted a Removed. jolt_update() je po dokončení všech fixed steps převede do nových globálních a per-character polí.
Typy eventů#
| Konstanta | Hodnota |
|---|---|
| JOLT_CHARACTER_CONTACT_ADDED | 1 |
| JOLT_CHARACTER_CONTACT_PERSISTED | 2 |
| JOLT_CHARACTER_CONTACT_REMOVED | 3 |
Kontakty s tělesy#
var contacts = player.get_contacts();
for (var i = 0; i < array_length(contacts); ++i) {
var hit = contacts[i];
show_debug_message(hit.entity);
}| Field | Význam |
|---|---|
| type | Added, persisted nebo removed. |
| character | Tento JoltCharacter. |
| body / body_handle / body_valid | Spravované těleso a bezpečná nativní identita. |
| entity | Hodnota user_data tělesa. |
| sensor | Zda jde o sensor. |
| position / normal / velocity | World-space data kontaktu. |
Kontakty mezi postavami#
player.set_character_collision_mode(JOLT_CHARACTER_PUSH);
player.set_character_push_strength(50);
var pairs = player.get_character_contacts();| Režim | Chování |
|---|---|
| JOLT_CHARACTER_IGNORE | Bez kolize mezi postavami; výchozí režim. |
| JOLT_CHARACTER_BLOCK | Postavy se blokují bez vzájemného tlačení. |
| JOLT_CHARACTER_PUSH | Blokování a omezená zařazená push velocity. |
Pravidlo dvojice vrstev#
jolt_character_layers_set_mode(player_layer, enemy_layer, JOLT_CHARACTER_BLOCK);Režimy postav a symetrické pravidlo dvojice vrstev se vyhodnotí společně. Obě vrstvy musí patřit do stejného aktivního worldu. Aktuální implementace prochází seznam postav sériově metodou brute force.
Přechodové pair eventy#
player.character_contact_entered()
player.character_contact_exited()
player.clear_contacts()
player.clear_character_contacts()
player.get_dropped_contact_count()Spravovaná pole nahradí další jolt_update(). Data, která potřebujete uchovat, si zkopírujte.
Vrstvy, čtení nastavení a diagnostika světa#
| API | Chování |
|---|---|
| set_character_layer(layer) / get_character_layer() | Používá živý JoltLayer stejného světa; sdílí aktuální hodnotu vrstvy wrapperu se set_layer/get_layer. |
| get_character_collision_mode() | Čte IGNORE, BLOCK nebo PUSH; neodvozujte režim z maximální tlačné síly. |
| set_character_push_strength(value) / get_character_push_strength() | Konečné nezáporné nastavení tlačení mezi Charactery; odlišné od max_strength vůči rigidním tělesům. |
| jolt_get_character_contacts() | Poslední managed pole událostí dvojic Characterů pro celý svět po jolt_update(). |
| jolt_get_dropped_character_contact_count() | Počet zahozených událostí dvojic Characterů zpřístupněný managed drainem; kontrolujte pro odhalení přetečení. |
// Read after the central physics update.
var pairs = jolt_get_character_contacts();
var dropped = jolt_get_dropped_character_contact_count();
if (dropped > 0) show_debug_message("Character contact overflow: " + string(dropped));Globální pole dvojic není pole rigidních kontaktů konkrétní postavy z player.get_contacts(). Pole událostí berte jako snapshot aktualizace a zpracujte je před nahrazením další aktualizací.
Ověřené kontrakty operací#
Následující kontrakty rozlišují jednotky, návratové hodnoty, chyby a životnost podle aktuální implementace. Nevynechávej kontrolu výsledku: false, 0 a undefined mohou mít u různých metod odlišný význam.
| Symbol / vlastník | Signatura | Kontrakt operace |
|---|---|---|
| jolt_get_dropped_character_contact_count | jolt_get_dropped_character_contact_count() | Číselný součet dropped Character–Character událostí při posledním managed drain; počáteční 0. |
| jolt_get_character_contacts | jolt_get_character_contacts() | Globální managed pole Character–Body událostí z drain fáze jolt_update, nikoliv pole Character–Character. Formát odpovídá Character.get_contacts. |
| jolt_character_layers_set_mode | jolt_character_layers_set_mode(layer_a, layer_b, mode) | Dva živé JoltLayer stejného světa, režim IGNORE/BLOCK/PUSH. Boolean; nastavuje pravidlo Character párů, nikoliv běžnou rigid collision matrix. |
| JoltCharacter.clear_contacts | JoltCharacter.clear_contacts() | Boolean; vyprázdní příslušné GML pole i native frontu. Neodstraní fyzické kolize ani nezmění filtr. |
| JoltCharacter.clear_character_contacts | JoltCharacter.clear_character_contacts() | Boolean; vyprázdní příslušné GML pole i native frontu. Neodstraní fyzické kolize ani nezmění filtr. |
| JoltCharacter.get_contacts | JoltCharacter.get_contacts() | Pole kontaktových událostí: type, character, body, body_handle, body_valid, entity, sensor, position {x, y, z} m, normal, velocity {x, y, z} m/s. Čti po jolt_update; senzory mají samostatná enter/exit pole. Nejde o trvalý seznam překryvů. |
| JoltCharacter.get_dropped_contact_count | JoltCharacter.get_dropped_contact_count() | Číselný počet zahozených nativních kontaktových událostí, undefined při chybě. Nejde o počet všech kontaktů. |
| JoltCharacter.get_character_collision_mode | JoltCharacter.get_character_collision_mode() | Režim JOLT_CHARACTER_IGNORE/BLOCK/PUSH mezi postavami. Setter Boolean, getter enum nebo undefined při chybě. Pár může přepsat explicitní pravidlo vrstev. |
| JoltCharacter.get_character_contacts | JoltCharacter.get_character_contacts() | Pole událostí Character–Character: type, character, other_character, other_handle, other_valid, other_entity, position, normal, relative_velocity. Světové m/m/s; čti po jolt_update. |
| JoltCharacter.get_character_layer | JoltCharacter.get_character_layer() | Uložený JoltLayer, nikoliv číselný handle. Getter sám neověřuje platnost. |
| JoltCharacter.get_character_push_strength | JoltCharacter.get_character_push_strength() | Síla vůči jinému Characteru: aktuální číslo v N. Selhání: undefined; neplatný objekt není nulové měření. |
| JoltCharacter.get_layer | JoltCharacter.get_layer() | Uložený JoltLayer, nikoliv číselný handle. Getter sám neověřuje platnost. |
| JoltCharacter.character_contact_entered | JoltCharacter.character_contact_entered() | Boolean události managed snímku; čti po jolt_update. Následující začátek managed snímku příznak vyčistí. Není to trvalý stav (např. just_landed není is_grounded). |
| JoltCharacter.character_contact_exited | JoltCharacter.character_contact_exited() | Boolean události managed snímku; čti po jolt_update. Následující začátek managed snímku příznak vyčistí. Není to trvalý stav (např. just_landed není is_grounded). |
| JoltCharacter.set_character_collision_mode | JoltCharacter.set_character_collision_mode(mode) | Režim JOLT_CHARACTER_IGNORE/BLOCK/PUSH mezi postavami. Setter Boolean, getter enum nebo undefined při chybě. Pár může přepsat explicitní pravidlo vrstev. |
| JoltCharacter.set_character_layer | JoltCharacter.set_character_layer(layer) | Živý JoltLayer ze stejného světa; Boolean. Oba zápisy aktualizují uloženou vrstvu Characteru; nezapisují pravidla kolizní matice. |
| JoltCharacter.set_character_push_strength | JoltCharacter.set_character_push_strength(value) | Síla vůči jinému Characteru: konečné číslo ≥0 N; výchozí 50. Vrací true při přijetí, false při neplatném vstupu nebo neplatném objektu. Mění živý objekt. |
| JoltCharacter.set_layer | JoltCharacter.set_layer(layer) | Živý JoltLayer ze stejného světa; Boolean. Oba zápisy aktualizují uloženou vrstvu Characteru; nezapisují pravidla kolizní matice. |