aboutsummaryrefslogtreecommitdiff
path: root/src/world.odin
diff options
context:
space:
mode:
authoriamcheeseman <[hidden email]>2026-01-14 15:05:20 -0500
committeriamcheeseman <[hidden email]>2026-01-14 15:05:20 -0500
commit8d824c95f1b64bec6d7e298c7c7d925c4ba3422a (patch)
treea3ce2a994fe4007390ad6d8c9603b6f87b2febb6 /src/world.odin
parent9774795b85710c018dca4219ba5c8a71775caadd (diff)
formatting and other cool changes
Diffstat (limited to 'src/world.odin')
-rw-r--r--src/world.odin39
1 files changed, 32 insertions, 7 deletions
diff --git a/src/world.odin b/src/world.odin
index 1e22cb1..d2e8601 100644
--- a/src/world.odin
+++ b/src/world.odin
@@ -3,11 +3,20 @@ package demonchime
import rl "vendor:raylib"
Object_Spawner :: proc(Object_Resource)
+Room_Change_Callback :: proc(Room_Id)
current_room: Room_Position_Resource
object_spawners := [Object_Type]Object_Spawner{
.PLAYER_SPAWN = object_spawner_player_spawn,
+ // .COLLISION = object_spawner_collision,
+}
+
+room_open_cb := []Room_Change_Callback{
+ on_room_open_platforms,
+}
+
+room_close_cb := []Room_Change_Callback{
}
@(private = "file")
@@ -15,10 +24,28 @@ spawn_objects :: proc(room_id: Room_Id) {
room := get_room(room_id)
for obj in room.objects {
- object_spawners[obj.type](obj)
+ spawner := object_spawners[obj.type]
+ if spawner != nil {
+ spawner(obj)
+ }
}
}
+@(private = "file")
+_open_room :: proc(room_pos: Room_Position_Resource) {
+ for cb in room_close_cb {
+ cb(current_room.id)
+ }
+
+ current_room = room_pos
+
+ for cb in room_open_cb {
+ cb(current_room.id)
+ }
+
+ spawn_objects(current_room.id)
+}
+
open_room_at :: proc(pos: [2]i32) -> bool {
pos := pos
pos += {current_room.x, current_room.y}
@@ -32,8 +59,7 @@ open_room_at :: proc(pos: [2]i32) -> bool {
pos.x <= room_pos.x + room_pos.width &&
pos.y >= room_pos.y &&
pos.y <= room_pos.y + room_pos.height {
- current_room = room_pos
- spawn_objects(current_room.id)
+ _open_room(room_pos)
return true
}
}
@@ -43,8 +69,7 @@ open_room_at :: proc(pos: [2]i32) -> bool {
open_room :: proc(id: Room_Id) -> bool {
for room_pos in world {
if room_pos.id == id {
- current_room = room_pos
- spawn_objects(current_room.id)
+ _open_room(room_pos)
return true
}
}
@@ -79,9 +104,9 @@ draw_room :: proc(id: Room_Id) {
iterate_room_tiles(id, draw_tile)
}
-Map_Iterate_Callback :: proc(_: i32, _: i32, _: u32)
+Room_Iterate_Callback :: proc(_: i32, _: i32, _: u32)
-iterate_room_tiles :: proc(id: Room_Id, callback: Map_Iterate_Callback) {
+iterate_room_tiles :: proc(id: Room_Id, callback: Room_Iterate_Callback) {
room := get_room(id)
for layer in room.layers {