Improvements
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user