Pomocné skripty · Sockets

Breakable connections

Volitelné limity automaticky rozpojí connection podle skutečné reakční síly a torque constraint solveru.

Breakable chování nepotřebuje přepínač. Přítomnost max_force nebo max_torque na male receptu zapne sledování; bez obou polí nemá connection žádný per-step reaction read.

API#

GML
var panel_socket = jolt_socket(panel, "male", "panel_mount", {
    connection_type: "fixed",
    max_force: 1000,
    max_torque: 250
});
Typmax_forcemax_torque
fixedAnoAno
hingeAnoAno
pointAnoNe; konfigurace se odmítne
swing_twistAnoAno pro současný nemotorový Socket recept

Každá přítomná hodnota musí být kladné konečné číslo. Nepřítomná hodnota znamená neomezenou danou složku. Break nastane při force > max_force NEBO torque > max_torque.

Co se skutečně měří#

  • Native bridge po dokončeném solver kroku čte reaction lambdy konkrétního Jolt constraintu.
  • Force je délka lineárního impulzu dělená solver timestepem. Torque je délka příslušného angular impulse dělená stejným timestepem.
  • Inactive nebo sleeping constraint neposkytne platný vzorek, protože Jolt může držet starou lambdu. Ta proto nezpůsobí falešný pozdější break.
  • Kontrola proběhne po každém úspěšném fixed kroku. Překročené connections se nejprve označí a teprve potom bezpečně zničí mimo solver callback.

Diagnostika po prasknutí#

GML
var connection = panel_socket.connection;

// Později, i když socket.connection už je undefined:
if (connection.broken) {
    show_debug_message(connection.break_reason); // force, torque, force_torque
    show_debug_message(connection.break_force);
    show_debug_message(connection.break_torque);
}
  • Break vždy volá běžné SocketConnection.destroy(), takže obnoví pair collision, occupancy, group stav a cooldown.
  • Grabber, výbuch, náraz nebo jiný gameplay systém pouze vytváří fyzikální zatížení; Socket na něj nepotřebuje speciální integraci.
  • Multi-socket group má jednu connection, a proto praskne jako celek.