Entity / User Data
Propojuje JoltBody s libovolnými GML daty nebo GameMaker instancí.
user_data ukládá pouze high-level GML wrapper. Native Jolt user data obsahuje bezpečný generational body handle, nikoli váš struct nebo instance ID.
Libovolná data#
body.set_user_data({kind:"Door", id:17, locked:false});
var data = body.get_user_data();Uložit lze libovolnou GML hodnotu včetně structu, instance, stringu, array nebo undefined. set_user_data() vrací true. Hodnota se neserializuje, nekopíruje do C++ a neuvolňuje nezávisle na běžných GML referencích.
Binding GameMaker instance#
body.bind_instance(instance, use_as_user_data=true)
body.unbind_instance()
body.sync()| Metoda | Chování |
|---|---|
| bind_instance | Vyžaduje živou instanci; uloží ji jako owner a standardně také jako user_data |
| unbind_instance | Zruší owner binding, ale user_data ponechá |
| sync | Explicitně zkopíruje physics transform do navázané instance |
Fields zapisované metodou sync#
instance.x
instance.y
instance.z
instance.jolt_rotation_x
instance.jolt_rotation_y
instance.jolt_rotation_z
instance.jolt_rotation_wEntity hodnoty v queries#
- World contacts zpřístupňují user_data_a a user_data_b.
- Per-body contacts zpřístupňují entity a other_entity.
- Raycast hits zpřístupňují entity.
- Pokud raw handle nelze převést na živý managed JoltBody, související entity hodnota je undefined.
- Změna user_data ovlivní budoucí mapped events a query results; native collision state se nezmění.
Příklad#
var crate = jolt_box_create_dynamic_for_instance(id, 1, 1, 1, {mass:2});
// Step event po jolt_update()
crate.sync();
var hit = jolt_raycast(0, 0, 2, 10, 0, 2);
if (hit.hit && !is_undefined(hit.entity)) {
show_debug_message("Hit entity " + string(hit.entity));
}jolt_box_create_dynamic_for_instance(instance, width, depth, height, options) vytvoří Dynamic Box na instance.x/y/z a naváže jej. Pokud instance nemá proměnnou z, použije se 0.
Životnost a bezpečnost#
bind_instance() odmítne zničenou nebo neplatnou instanci. sync() selže bez živého owner bindingu. Zničení body vyčistí jeho collision data, ale uživatelem držený stale JoltBody může stále udržovat běžné GML hodnoty dostupné, dokud neuvolníte vlastní reference.