Kola
Přidá virtuální kolo do draftu vozidla a vrátí jeho index od nuly nebo false při selhání.
Pozice je suspension hard point v lokálním prostoru chassis. Radius, šířka, odpružení, trakce, řízení, pohon a brzdy se nastavují před build().
Syntaxe#
vehicle.add_wheel(local_x, local_y, local_z, options=undefined)Geometrie a odpružení#
| Pole | Default | Validace / význam |
|---|---|---|
| radius | 0.35 | Konečný a větší než 0. |
| width | 0.20 | Konečný a větší než 0. |
| suspension_min | 0.10 | Konečný a nejméně 0. |
| suspension_max | 0.40 | Konečný, větší než 0 a nejméně minimum. |
| suspension_direction | {x:0,y:0,z:-1} | Konečný nenulový lokální směr; nativně se normalizuje. |
| suspension_force_point | automatický | Volitelný lokální bod působení síly odpružení. |
| suspension_preload | 0 | Konečná nezáporná preload délka. |
| suspension_frequency | 1.5 | Frekvence pružiny v Hz; větší než 0. |
| suspension_damping | 0.5 | Konečné nezáporné tlumení. |
Ovládání a pneumatika#
| Pole | Default | Účinek |
|---|---|---|
| steering | false | Nastaví výchozí maximum řízení na 35 stupňů. |
| max_steering_angle | 35 nebo 0 | 0..90 stupňů násobených steering inputem. |
| driven | false | Zařadí kolo do automatické tvorby diferenciálů. |
| brake | true | Výchozí max_brake_torque bude 1500. |
| max_brake_torque | 1500 nebo 0 | Nezáporný moment provozní brzdy. |
| handbrake | false | Výchozí max_handbrake_torque bude 4000. |
| max_handbrake_torque | 4000 nebo 0 | Nezáporný moment ruční brzdy. |
| inertia | 0.9 | Kladná rotační setrvačnost kola. |
| angular_damping | 0.2 | Nezáporné úhlové tlumení kola. |
| longitudinal_friction | 1.0 | Nezáporný násobič výchozí Jolt křivky. |
| lateral_friction | 1.0 | Nezáporný násobič výchozí Jolt křivky. |
var front_left = car.add_wheel(-0.8, 1.4, -0.2, {
radius: 0.35,
width: 0.2,
steering: true,
driven: true,
suspension_frequency: 1.8,
suspension_damping: 0.65
});Integrace s aktuálním projektem#
Konfigurační objekt a settery#
var wheel = jolt_vehicle_wheel(-0.8, 1.4, -0.2);
wheel.set_radius(0.35);
wheel.set_driven(true);
wheel.set_steering(true);
var wheel_index = car.add_wheel(wheel);Konfigurační factories vracejí GML objekt nastavení; samy nevytvářejí fyziku. Jejich settery vracejí self, tedy tento objekt, a nejsou potvrzením platnosti hodnoty. Pole se spotřebují a ověří při jolt_vehicle, add_wheel nebo add_differential. Vynechané pole zachová default odpovídajícího options zápisu uvedený výše. Změna nastavení po jeho použití nemění existující vozidlo, kolo ani diferenciál. Nastavení nepotřebuje destroy.
Vozidlo při chybě vytvoření vrací undefined. add_differential vrací Boolean; add_wheel vrací číselný index začínající nulou, nebo Boolean false při chybě. Index 0 je úspěch: nepoužívej pouze if (!wheel_index). Konfiguraci kol a diferenciálů dokonči před build().
set_orientation(fx,fy,fz,ux=0,uy=0,uz=1) používá směry v lokálním prostoru chassis. Forward/up musí být konečné, nenulové a kolmé; validace proběhne v add_wheel. set_forward(x,y,z=0) nastaví současně výchozí up +Z. Případné chybné přidání po zahájení nativní konfigurace není atomické; po chybě oprav data a vytvoř draft znovu.
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_vehicle_wheel | jolt_vehicle_wheel(x, y, z) | Vytvoří settings kola s místní XYZ pozicí podvozku. Rozměry a orientaci nastav před vehicle.add_wheel; nejde o JoltBody. |
| JoltVehicle.add_wheel | JoltVehicle.add_wheel(x, y = undefined, z = undefined, options = undefined) | Před build; XYZ + options nebo WheelSettings. Vrací index od 0, při chybě false: index 0 je úspěch. Selhání následného nastavení nemusí vrátit rozpracované native kolo zpět; oprav konfiguraci a vytvoř nový draft. |
| JoltVehicleWheelSettings.set_angular_damping | JoltVehicleWheelSettings.set_angular_damping(value) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. >= 0, výchozí 0.2. |
| JoltVehicleWheelSettings.set_brake | JoltVehicleWheelSettings.set_brake(value) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. Příznaky; výchozí false/false/true/false. Steering/brake/handbrake určují výchozí úhel či moment, explicitní číselný parametr má přednost. |
| JoltVehicleWheelSettings.set_driven | JoltVehicleWheelSettings.set_driven(value) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. Příznaky; výchozí false/false/true/false. Steering/brake/handbrake určují výchozí úhel či moment, explicitní číselný parametr má přednost. |
| JoltVehicleWheelSettings.set_forward | JoltVehicleWheelSettings.set_forward(x, y, z=0) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. Nenulové konečné kolmé forward/up vektory se normalizují. set_forward používá up +Z; orientaci změň před add_wheel. |
| JoltVehicleWheelSettings.set_handbrake | JoltVehicleWheelSettings.set_handbrake(value) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. Příznaky; výchozí false/false/true/false. Steering/brake/handbrake určují výchozí úhel či moment, explicitní číselný parametr má přednost. |
| JoltVehicleWheelSettings.set_inertia | JoltVehicleWheelSettings.set_inertia(value) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. > 0 kg·m², výchozí 0.9. |
| JoltVehicleWheelSettings.set_lateral_friction | JoltVehicleWheelSettings.set_lateral_friction(value) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. Násobitel třecí křivky >= 0, výchozí 1. |
| JoltVehicleWheelSettings.set_longitudinal_friction | JoltVehicleWheelSettings.set_longitudinal_friction(value) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. Násobitel třecí křivky >= 0, výchozí 1. |
| JoltVehicleWheelSettings.set_max_brake_torque | JoltVehicleWheelSettings.set_max_brake_torque(value) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. >= 0 N·m; výchozí 1500/4000 při zapnuté příslušné brzdě, jinak 0. |
| JoltVehicleWheelSettings.set_max_handbrake_torque | JoltVehicleWheelSettings.set_max_handbrake_torque(value) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. >= 0 N·m; výchozí 1500/4000 při zapnuté příslušné brzdě, jinak 0. |
| JoltVehicleWheelSettings.set_max_steering_angle | JoltVehicleWheelSettings.set_max_steering_angle(value) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. 0..90°; výchozí 35 při steering=true, jinak 0. |
| JoltVehicleWheelSettings.set_orientation | JoltVehicleWheelSettings.set_orientation(fx, fy, fz, ux=0, uy=0, uz=1) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. Nenulové konečné kolmé forward/up vektory se normalizují. set_forward používá up +Z; orientaci změň před add_wheel. |
| JoltVehicleWheelSettings.set_position | JoltVehicleWheelSettings.set_position(x, y, z) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. Místní XYZ v m vůči podvozku; force point zapne vlastní bod působení pružiny. |
| JoltVehicleWheelSettings.set_radius | JoltVehicleWheelSettings.set_radius(value) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. Kladné rozměry v m; výchozí radius 0.35, width 0.2. |
| JoltVehicleWheelSettings.set_steering | JoltVehicleWheelSettings.set_steering(value) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. Příznaky; výchozí false/false/true/false. Steering/brake/handbrake určují výchozí úhel či moment, explicitní číselný parametr má přednost. |
| JoltVehicleWheelSettings.set_suspension_damping | JoltVehicleWheelSettings.set_suspension_damping(value) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. Poměr >= 0, výchozí 0.5. |
| JoltVehicleWheelSettings.set_suspension_direction | JoltVehicleWheelSettings.set_suspension_direction(x, y, z) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. Místní konečný nenulový vektor, při předání native normalizovaný. |
| JoltVehicleWheelSettings.set_suspension_force_point | JoltVehicleWheelSettings.set_suspension_force_point(x, y, z) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. Místní XYZ v m vůči podvozku; force point zapne vlastní bod působení pružiny. |
| JoltVehicleWheelSettings.set_suspension_frequency | JoltVehicleWheelSettings.set_suspension_frequency(value) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. > 0 Hz, výchozí 1.5. |
| JoltVehicleWheelSettings.set_suspension_max | JoltVehicleWheelSettings.set_suspension_max(value) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. Délky v m, min <= max; výchozí 0.1/0.4. |
| JoltVehicleWheelSettings.set_suspension_min | JoltVehicleWheelSettings.set_suspension_min(value) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. Délky v m, min <= max; výchozí 0.1/0.4. |
| JoltVehicleWheelSettings.set_suspension_preload | JoltVehicleWheelSettings.set_suspension_preload(value) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. Délka >= 0 m, výchozí 0. |
| JoltVehicleWheelSettings.set_width | JoltVehicleWheelSettings.set_width(value) | Konfigurace před vytvořením; vrací self, validace až při jolt_vehicle/add_wheel/add_differential. Kladné rozměry v m; výchozí radius 0.35, width 0.2. |