‹
Pomocné skripty

Vlastní data těles

Přiřazuje každému managed fyzikálnímu tělesu gameplay informace vlastněné projektem.

Každý high-level JoltBody nabízí veřejnou proměnnou data obsahující obyčejný GML struct. Je určená pro názvy, vlastnosti předmětů, zdraví, kategorie, inventáře a další gameplay metadata, která mají zůstat spojená s body wrapperem, ale nemají být součástí native fyzikálního stavu.

Základní použití#

GML
body.data
options.data

Kontrakt při vytvoření#

PřípadChování
Bez option dataNový JoltBody dostane vlastní nezávislý prázdný struct {}.
data: {...}Předaný struct se přiřadí přímo do body.data a nekopíruje se.
Data nejsou structVytvoření body selže s JOLT_ERROR_INVALID_ARGUMENT.
Pozdější nahrazeníbody.data lze kdykoliv nahradit jiným structem běžným GML přiřazením.

Podporované způsoby vytvoření tělesa#

  • Dynamic, Static i Kinematic konstruktory primitivních těles přijímají options.data.
  • Stejnou option přijímají bodies vytvořené ze znovupoužitelných JoltShape resources.
  • Compound builder zachová vlastní data u create, create_static i create_kinematic.
  • Každé body bez explicitních dat dostane jiný container; změna výchozího structu jednoho tělesa neovlivní ostatní.

Reference a změny dat#

  • Předaný struct používá běžnou aktuální reference/value semantiku GameMakeru. Rozšíření neprovádí deep clone.
  • Nested structs a arrays zůstávají dostupné a lze je měnit přes body.data.
  • Pokud stejný struct drží i jiná proměnná, změny přes jednu referenci jsou podle běžných pravidel GML viditelné i přes druhou.
  • Rozšíření nekontroluje jednotlivá pole, protože jejich schema patří výhradně hernímu projektu.

Kde data zůstávají dostupná#

Výsledek nebo systémPřístup
Raycast a Shape QueriesPoužijte hit.body.data z vráceného registrovaného JoltBody wrapperu.
Collision a sensor eventyPoužijte event.body_a.data a event.body_b.data.
VýbuchyPoužijte result.bodies[i].data nebo result.entries[i].body.data.
Uchopování tělesBěhem držení použijte grabber.get_body().data.
Přímá reference na bodyČtěte nebo měňte body.data bez volání native bridge.

body.data a user_data#

Vlastnostbody.datauser_data
Určená hodnotaGameplay metadata struct s poli definovanými projektem.Libovolná hodnota volajícího, často entity nebo GameMaker instance.
Vytvořeníoptions.data nebo nový nezávislý {}.undefined do zavolání set_user_data() nebo bind_instance(..., true).
Alias v dotazechDostupné přes vrácený body wrapper.Některá result/event API jej navíc vystavují jako entity nebo other_entity.
Native fyzikaNikdy se neposílá do Jolt Physics ani bridge.GML hodnota je také na wrapperu; native Body UserData zůstává interně rezervované pro managed handly.

Životní cyklus a vlastnictví#

  • Zničení body zneplatní fyzikální handle, ale nesmaže data ze starého wrapperu, na který GML stále drží referenci.
  • Nové body využívající recyklovaný native slot dostane nový wrapper a nová prázdná data; metadata ze zničeného body se nikdy nepřenesou.
  • body.data nemění mass, collision, sensor state, velocity, sleeping ani životní cyklus resources.
  • Save/load, JSON převod, síťová replikace a persistence jsou odpovědností projektu a tato funkce je neposkytuje.

Příklad#

GML
var bottle = jolt_box_create_dynamic(0, 0, 3, 0.5, 0.5, 1, {
    mass: 1,
    data: {
        name: "Bottle",
        price: 20,
        health: 10,
        type: "item",
        inventory: ["Gold", "Potion"]
    }
});

show_debug_message(bottle.data.name);
bottle.data.health -= 5;
array_push(bottle.data.inventory, "Sword");

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íkSignaturaKontrakt operace
JoltBody.get_user_dataJoltBody.get_user_data()Libovolná GML hodnota, setter true/getter hodnota; native ji nevidí. Samostatné data je také čistě GML struct, nikoliv fyzikální nastavení.
JoltBody.set_user_dataJoltBody.set_user_data(value)Libovolná GML hodnota, setter true/getter hodnota; native ji nevidí. Samostatné data je také čistě GML struct, nikoliv fyzikální nastavení.