Improvements

This commit is contained in:
2024-12-01 17:55:08 +01:00
parent 80de060002
commit 1077800334
6 changed files with 73 additions and 20 deletions

View File

@@ -26,9 +26,6 @@ Trigger_Overlap :: struct {
MAX_TRIGGER_OVERLAPS :: 16;
on_trigger_enter_callback : (*Entity, *Entity);
on_trigger_exit_callback : (*Entity, *Entity);
Collision_Layers :: enum_flags {
NONE;
@@ -52,17 +49,17 @@ Collider :: struct {
layer: Collision_Layers = .LAYER1;
collides_with_layers: Collision_Layers = .LAYER1;
aabb: AABB;
override_aabb: bool;
aabb: AABB;
union {
sphere: Sphere;
mesh : Mesh_Collider;
sphere: Sphere; @DontSerialize
mesh : Mesh_Collider; @DontSerialize
}
overlaps: [MAX_TRIGGER_OVERLAPS] Trigger_Overlap;
num_overlaps: s64;
overlaps: [MAX_TRIGGER_OVERLAPS] Trigger_Overlap; @DontSerialize
num_overlaps: s64; @DontSerialize
ignore: bool;
ignore: bool; @DontSerialize
}
Physics_Body :: struct {
@@ -95,6 +92,16 @@ update_mesh_collider :: (e: *Entity) {
e.collider.mesh.is_baked = true;
}
update_trigger_mesh_colliders :: (scene: *Scene) {
for e: scene.entities {
if e.flags & .TRIGGER {
if e.collider.type == .MESH {
update_mesh_collider(e);
}
}
}
}
update_mesh_colliders :: (scene: *Scene) {
for e: scene.entities {
if e.flags & .COLLISION {
@@ -187,8 +194,8 @@ add_trigger_overlap_if_new :: (triggered_entity: *Entity, triggered_by_entity: *
}
}
if on_trigger_enter_callback != null {
on_trigger_enter_callback(triggered_entity, triggered_by_entity);
if engine.procs.on_trigger_enter != null {
engine.procs.on_trigger_enter(triggered_entity, triggered_by_entity);
}
triggered_entity.collider.overlaps[triggered_entity.collider.num_overlaps] = .{ triggered_by_entity, frame_index };
@@ -288,8 +295,8 @@ update_physics :: (scene: *Scene, dt: float) {
defer index += 1;
if e.collider.overlaps[index].frame_index < frame_index {
if on_trigger_exit_callback != null {
on_trigger_exit_callback(e, e.collider.overlaps[index].entity);
if engine.procs.on_trigger_exit != null {
engine.procs.on_trigger_exit(e, e.collider.overlaps[index].entity);
}
if e.collider.num_overlaps > 1 {