Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func InitPhysicsSystem ¶
func InitPhysicsSystem(state *InitPhysicsSystemState)
InitPhysicsSystem creates the singleton entity (if absent), then builds the C-side Box2D world and bodies from ECS. Runs on cardinal.Init.
func PhysicsPipelineSystem ¶
func PhysicsPipelineSystem(state *PhysicsPipelineSystemState)
PhysicsPipelineSystem runs the full physics pipeline as one atomic unit. The plugin registers it on cardinal.PreUpdate so simulation and writeback finish before cardinal.Update game logic in the same tick, while contact/trigger system events remain visible until the tick ends.
Phases:
- Reconcile: sync ECS -> C-side Box2D (create/update/destroy bodies from component changes)
- Step: advance physics simulation, buffer contact/trigger events
- Writeback: sync C-side Box2D -> ECS (write post-step positions/velocities back to components)
func SetRuntimeConfig ¶
func SetRuntimeConfig(c RuntimeConfig)
SetRuntimeConfig stores config for physics systems; call from Plugin.Register only. Zero FixedDT or SubStepCount are replaced with defaults.
Types ¶
type InitPhysicsSystemState ¶
type InitPhysicsSystemState struct {
cardinal.BaseSystemState
Bodies cardinal.Contains[physicsBodyRow]
Singleton physicsSingletonSearch
}
InitPhysicsSystemState runs once at world init: FullRebuildFromECS from current ECS entities.
type PhysicsPipelineSystemState ¶
type PhysicsPipelineSystemState struct {
cardinal.BaseSystemState
Bodies cardinal.Contains[physicsBodyRow]
Singleton physicsSingletonSearch
ContactBegin cardinal.WithSystemEventEmitter[physicevent.ContactBeginEvent]
ContactEnd cardinal.WithSystemEventEmitter[physicevent.ContactEndEvent]
TriggerBegin cardinal.WithSystemEventEmitter[physicevent.TriggerBeginEvent]
TriggerEnd cardinal.WithSystemEventEmitter[physicevent.TriggerEndEvent]
}
PhysicsPipelineSystemState runs the full physics pipeline atomically: reconcile -> step -> writeback. Combining all three phases into a single system guarantees the scheduler cannot interleave game code between them.