package demonchime import rl "vendor:raylib" Image_Resource :: struct { texture: rl.Texture2D, anim: Animation_Id, data: []u8, } Tag_Resource :: struct { from: i32, to: i32, } Animation_Resource :: struct { frame_count: i32, frame_durations: []i32, tags: map[string]Tag_Resource, } Object_Resource :: struct { pos: Vec2, parallax: Vec2, properties: map[string]any, } Room_Resource :: struct { width: i32, height: i32, tile_width: i32, tile_height: i32, layers: [][]u32, objects: []Object_Resource, background_image: Maybe(Image_Id), } Tile_Resource :: struct { tileset: Tileset_Id, rect: Rect, id: u32, collisions: []Rect, } Tileset_Resource :: struct { tiles: []u32, image: Image_Id, } Room_Position_Resource :: struct { id: Room_Id, x: i32, y: i32, width: i32, height: i32, } get_image :: proc(id: Image_Id) -> rl.Texture2D { img_res := &images[id] if !rl.IsTextureValid(img_res.texture) { rl_img := rl.LoadImageFromMemory( ".qoi", raw_data(img_res.data), i32(len(img_res.data)), ) if !rl.IsImageValid(rl_img) { die("Could not load asset %v", id) } img_res.texture = rl.LoadTextureFromImage(rl_img); rl.UnloadImage(rl_img) } return img_res.texture } get_room :: proc(id: Room_Id) -> Room_Resource { return rooms[id] }