package demonchime import "fw" import "phys" import hm "core:container/handle_map" Platform :: struct { handle: Handle, body: phys.Body_Handle, } make_platform :: proc(rect: Rect) -> (Handle, ^Platform) { phys_handle := phys.make_body(transmute(phys.Rect)rect, layers = {.Hard}) handle := hm.add(&state.platform_list, Platform{body = phys_handle}) return handle, hm.get(&state.platform_list, handle) } draw_platforms :: proc() { iter := hm.iterator_make(&state.platform_list) color := Color{1, 0, 0, 0.25} for p, _ in hm.iterate(&iter) { rect := phys.get_rect(p.body) fw.draw_rect(rect.start, rect.size, color = color) } } clear_platforms :: proc() { iter := hm.iterator_make(&state.platform_list) for p, _ in hm.iterate(&iter) { phys.remove_body(p.body) } hm.clear(&state.platform_list) } setup_room_collisions :: proc() { clear_platforms() iterate_room_tiles(current_room.id, proc(x: i32, y: i32, tile_id: u32) { tile := tiles[tile_id] for coll in tile.collisions { make_platform({coll.start + {f32(x), f32(y)}, coll.size}) } }) } on_room_open_platforms :: proc(room_id: Room_Id) { setup_room_collisions() } object_spawner_collision :: proc(obj: Object_Resource) { make_platform(Rect{obj.pos, obj.size}) }