package demonchime import "draw" import "phys" import "tiled" Platform :: struct { handle: Entity_Handle, body: phys.Body_Handle, } make_platform :: proc(rect: Rect) -> (Entity_Handle, ^Platform) { handle, body := phys.make_body(transmute(phys.Rect)rect) return make_entity(&state.platform_list, Platform { body = handle, }) } draw_platforms :: proc() { iter := iter_entity_list(state.platform_list) draw.renderer.tint = {1, 0, 0, 0.25} for p in entity_list_iter(&iter) { body := phys.get_body(p.body) draw.rect(cast(draw.Rect)body.rect) } draw.renderer.tint = {1, 1, 1, 1} } clear_platforms :: proc() { iter := iter_entity_list(state.platform_list) for p in entity_list_iter(&iter) { phys.remove_body(p.body) delete_entity(&state.platform_list, p.handle) } } setup_map_collisions :: proc() { clear_platforms() make_map_collisions :: proc( x: i32, y: i32, tile: tiled.Tile, tile_set: tiled.Tile_Set, ) { objs, is_object_layer := tile.object_group.layer.(tiled.Object_Layer) if !is_object_layer { return } for obj in objs { make_platform({ Vec2{f32(x), f32(y)} + obj.position, obj.size, }) } } tiled.iterate_map_tiles(tiled.current_room.tmap, make_map_collisions) }