O JoltPhysics
Native 3D physics extension, které přináší Jolt Physics do GameMakeru.
JoltPhysics kombinuje Windows x64 native bridge s GML high-level runtime. Zpřístupňuje rigid bodies, collision shapes, constraints, layers, sensors, contacts, raycasts, characters, cloth a debug drawing prostřednictvím managed hodnot přívětivých pro GameMaker.
Co extension nabízí#
- Dynamic, Static a Kinematic rigid bodies.
- Primitive, convex, mesh, heightfield, compound a reusable shape resources.
- Material a motion properties, forces, impulses a přístup k transformům.
- Collision layers, sensors, contact events a filtrované raycasts.
- Constraints, paths, virtual characters, cloth simulation a debug visualization.
- Managed default world s fixed-step updates a bezpečnými generational handles.
Architektura#
| Vrstva | Odpovědnost |
|---|---|
| Jolt Physics 5.6.0 | Native simulace, collision detection, constraints a queries. |
| JoltBridge_x64.dll | Validovaná C++ hranice a bezpečné numeric handles. |
| jolt_api | Low-level GML funkce blízké native bridge. |
| jolt_high_level | Managed JoltBody/JoltLayer resources, errors, fixed timing, contacts a convenience creators. |
| GameMaker project | Gameplay state, rendering, input, ownership a explicitní synchronizace. |
Současná platforma#
Aktuální native extension cílí na Windows x64. Ostatní GameMaker targets zatím packaged bridge nepodporuje. Platform coverage se může později rozšířit, projekty však zatím nemají předpokládat cross-platform kompatibilitu.
High-level a low-level API#
Většina her by měla začít pomocí jolt_start(), high-level body creators jako jolt_box_create_dynamic() a jolt_update(). Low-level world/handle funkce zůstávají dostupné pro advanced ownership nebo diagnostics, vyžadují však ruční lifecycle a error handling.
Co JoltPhysics nedělá automaticky#
- Nerenderuje bodies jako herní grafiku.
- Nenavazuje automaticky každou GameMaker instanci na body.
- Nesynchronizuje automaticky instance transforms každý frame.
- Nevybírá za hru gameplay units, collision layers ani ownership pravidla.
- Nenahrazuje GameMaker objects, rooms, events ani input handling.
Základní lifecycle#
jolt_start();
var ground = jolt_box_create_static(0, 0, -0.5, 20, 20, 1);
var body = jolt_box_create_dynamic(0, 0, 4, 1, 1, 1);
jolt_update();
var position = body.get_position();
jolt_stop();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_bbmod_camera_follow_character | jolt_bbmod_camera_follow_character(camera, character, yaw, pitch) | Kamera s Position/Target/Up.Set, živý Character, yaw/pitch° → Boolean. Kopíruje character.get_view_transform; aplikuj po pohybu Characteru. |
| jolt_get_physics_quality | jolt_get_physics_quality() | DEFAULT/HIGH v běžícím světě; setter Boolean, getter enum/undefined. HIGH opt-in zvyšuje minimální substeps/iterace a zpřísní CCD, DEFAULT zachová běžné nastavení. |
| jolt_managed_body_count | jolt_managed_body_count() | Čte managed stav bez kroku fyziky: Boolean started / handle světa / fixed_dt s / kumulativní počet kroků / počet valid wrapperů těles. Počet wrapperů není kontrola všech native handles. |
| jolt_managed_character_count | jolt_managed_character_count() | Počet wrapperů s valid=true v managed registry. Není to dodatečné ověření každého native handle. |
| jolt_quaternion_from_euler | jolt_quaternion_from_euler(x_degrees, y_degrees, z_degrees) | XYZ úhly ve stupních → nový quaternion {x, y, z, w}, pořadí qZ*qY*qX. Čistý výpočet bez světa; neposkytuje validaci nečíselného vstupu. |
| jolt_set_physics_quality | jolt_set_physics_quality(quality) | DEFAULT/HIGH v běžícím světě; setter Boolean, getter enum/undefined. HIGH opt-in zvyšuje minimální substeps/iterace a zpřísní CCD, DEFAULT zachová běžné nastavení. |