Ovládání prvků myší
Obsluhujte všech devět typů bez změny limitů, pružin, odporu, zarážek nebo motorů. Síly/momenty působí před pevnými kroky fyziky; dynamické uchycení dostává reakci.
Příklad#
interaction = jolt_control_interaction();
interaction.set_camera(o_control_bbmod_camera);
interaction.set_carry(carry);
interaction.set_distance(3);
interaction.set_sensitivity(0.35);
interaction.set_max_force(200);
interaction.set_max_torque(20);
// End Step:
if (!interaction.update_controls()) carry.update_controls();Použití a omezení#
Kamera musí ve Step před mouse-look testovat interaction.controls_use_mouse(id). Při držení předmětu má Carry přednost. První zásah zachytí prvek; vyjetí paprsku mimo něj nepustí. Uvolnění tlačítka, ztráta fokusu, vzdálení, zámek, zničení nebo zastaralý vstup pustí; nový úchop vyžaduje nový klik.
Button standardně používá podržení; set_button_mode("drag") volí promítnutou osu. Lever, Pedal, Slider a Pull Handle používají viditelný směr pohybu. Knob a Hand Wheel zachovají počáteční směr otáčení; Crank sleduje měnící se tečnu a potřebuje krouživý pohyb. Joystick promítá dvě osy uvnitř fyzikálního kuželu. Při pohledu podél dráhy posuvníku/úchytu přistupte šikmo.
Pro vlastní vstup použijte jolt_control_interaction_frame(origin,forward,up), begin_from_hit(hit,frame) a update_drag(frame,dx,dy,held,dt_seconds) s čerstvým celým výsledkem raycastu. Zajistěte filtry a nespouštějte současně automatický adaptér. V Clean Up interakci zrušte.
Přehled API#
Signatury veřejných funkcí a metod. Metody volejte na vrácené instanci; parametry s výchozí hodnotou jsou volitelné.
Související návody#
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_control_interaction | jolt_control_interaction() | Vyžaduje spuštěný svět; JoltControlInteraction nebo undefined. Default enabledtrue, distance3m, sensitivity.35, max_force200N, max_torque20N·m, max_lead15°, levé tlačítko, režim press. |
| jolt_control_interaction_frame | jolt_control_interaction_frame(origin,forward,up) | Světový origin + nenulové nezávislé forward/up structy XYZ; vrací ortonormální {origin, forward, right, up}, chyba undefined. |
| JoltControlInteraction.begin_from_hit | JoltControlInteraction.begin_from_hit(hit,frame) | Čerstvý raycast hit + frame → Boolean. Ověří dosah, podporovaný nezamčený control stejného světa a jediného vlastníka; u nepromítnutelné osy může odmítnout. |
| JoltControlInteraction.controls_use_mouse | JoltControlInteraction.controls_use_mouse(view) | V Camera Step před změnou yaw/pitch; Boolean, zda klik/drag patří tomuto controlu. Může začít interakci z nového kliknutí. |
| JoltControlInteraction.destroy | JoltControlInteraction.destroy() | Vrací true; uvolní vlastnictví interakce, destroy navíc zneplatní controller. Nezničí mechanismus. |
| JoltControlInteraction.get_control | JoltControlInteraction.get_control() | is_active Boolean, při ztrátě platnosti pustí; get_control aktivní JoltControl nebo undefined, nevlastněný. |
| JoltControlInteraction.is_active | JoltControlInteraction.is_active() | is_active Boolean, při ztrátě platnosti pustí; get_control aktivní JoltControl nebo undefined, nevlastněný. |
| JoltControlInteraction.release | JoltControlInteraction.release() | Vrací true; uvolní vlastnictví interakce, destroy navíc zneplatní controller. Nezničí mechanismus. |
| JoltControlInteraction.set_button | JoltControlInteraction.set_button(v) | Boolean úspěchu. enabled Boolean (false pustí), mode press/drag (pustí), button celé0..5 (0 vypne, změna pustí). |
| JoltControlInteraction.set_button_mode | JoltControlInteraction.set_button_mode(v) | Boolean úspěchu. enabled Boolean (false pustí), mode press/drag (pustí), button celé0..5 (0 vypne, změna pustí). |
| JoltControlInteraction.set_camera | JoltControlInteraction.set_camera(v) | Boolean; carry stejného světa s is_holding nebo undefined; kamera objekt/instance/undefined. Změna pustí interaction. Aktivně držící carry blokuje interakci. |
| JoltControlInteraction.set_carry | JoltControlInteraction.set_carry(v) | Boolean; carry stejného světa s is_holding nebo undefined; kamera objekt/instance/undefined. Změna pustí interaction. Aktivně držící carry blokuje interakci. |
| JoltControlInteraction.set_distance | JoltControlInteraction.set_distance(v) | Boolean; konečné rozsahy dle metody: .05..100 m, .001..10 citlivost, 0..100000 N, 0..100000 N·m, 1..45°. |
| JoltControlInteraction.set_enabled | JoltControlInteraction.set_enabled(v) | Boolean úspěchu. enabled Boolean (false pustí), mode press/drag (pustí), button celé0..5 (0 vypne, změna pustí). |
| JoltControlInteraction.set_max_force | JoltControlInteraction.set_max_force(v) | Boolean; konečné rozsahy dle metody: .05..100 m, .001..10 citlivost, 0..100000 N, 0..100000 N·m, 1..45°. |
| JoltControlInteraction.set_max_lead | JoltControlInteraction.set_max_lead(v) | Boolean; konečné rozsahy dle metody: .05..100 m, .001..10 citlivost, 0..100000 N, 0..100000 N·m, 1..45°. |
| JoltControlInteraction.set_max_torque | JoltControlInteraction.set_max_torque(v) | Boolean; konečné rozsahy dle metody: .05..100 m, .001..10 citlivost, 0..100000 N, 0..100000 N·m, 1..45°. |
| JoltControlInteraction.set_sensitivity | JoltControlInteraction.set_sensitivity(v) | Boolean; konečné rozsahy dle metody: .05..100 m, .001..10 citlivost, 0..100000 N, 0..100000 N·m, 1..45°. |
| JoltControlInteraction.update_controls | JoltControlInteraction.update_controls() | Jednou po kameře; vrací, zda tento klik/držení spotřeboval Control, aby Carry přeskočil stejný vstup. Není to prostý is_active ani potvrzení pohybu. |
| JoltControlInteraction.update_drag | JoltControlInteraction.update_drag(frame,dx,dy,held,dt=0.016666667) | Frame, dx/dy pixely, held, dt>0 s (default 1/60). Boolean; held=false, neplatná geometrie či vzdálení pustí. Pouze fyzikální síly při následném kroku, žádné zápisy pose. |