ecs-test/ecs/physics_system.odin

31 lines
972 B
Odin

package ecs
import "core:log"
import program_config "../config"
PhysicsSystem :: struct {
using _: SystemBase,
}
physics_system_update :: proc(physics_system: ^PhysicsSystem, coordinator: ^Coordinator, dt: f32) {
entities_to_delete := make([dynamic]EntityID)
defer delete(entities_to_delete)
for entity_id in physics_system.entities {
rigid_body := coordinator_get_component(coordinator, RigidBodyComponent, entity_id)
transform := coordinator_get_component(coordinator, TransformComponent, entity_id)
gravity := coordinator_get_component(coordinator, GravityComponent, entity_id)
transform.position += rigid_body.velocity * dt
rigid_body.velocity += gravity.force * dt
if transform.position.y < program_config.Y_DESPAWN_CUTOFF {
append(&entities_to_delete, entity_id)
}
}
for entity in entities_to_delete {
coordinator_destroy_entity(coordinator, entity)
}
}