Mercurial > molko
view libmlk-example/mlk/example/registry.c @ 635:3cb1860d9f11
rpg: improve message selectable lines
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 05 Sep 2023 11:51:46 +0200 |
parents | 76ce31b0151f |
children |
line wrap: on
line source
/* * registry.h -- registry of resources * * Copyright (c) 2020-2023 David Demelier <markand@malikania.fr> * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include <stddef.h> #include <mlk/core/err.h> #include <mlk/core/image.h> #include <mlk/core/panic.h> #include <mlk/core/sys.h> #include <mlk/core/util.h> #include <assets/images/battle-background.h> #include <assets/images/black-cat.h> #include <assets/images/haunted-wood.h> #include <assets/images/sword.h> #include <assets/sounds/fire.h> #include <assets/sounds/open-chest.h> #include <assets/sprites/cat-running.h> #include <assets/sprites/chest.h> #include <assets/sprites/explosion.h> #include <assets/sprites/john-sword.h> #include <assets/sprites/john-walk.h> #include <assets/sprites/john.h> #include <assets/sprites/numbers.h> #include <assets/sprites/people.h> #include <assets/sprites/ui-cursor.h> #include <assets/sprites/water.h> #include <assets/sprites/world.h> #include <assets/music/vabsounds-romance.h> #include "registry.h" struct mlk_texture mlk_registry_images[MLK_REGISTRY_IMAGE_LAST] = {0}; struct mlk_texture mlk_registry_textures[MLK_REGISTRY_TEXTURE_LAST] = {0}; struct mlk_sprite mlk_registry_sprites[MLK_REGISTRY_TEXTURE_LAST] = {0}; struct mlk_sound mlk_registry_sounds[MLK_REGISTRY_SOUND_LAST] = {0}; struct mlk_music mlk_registry_music[MLK_REGISTRY_MUSIC_LAST] = {0}; #define MLK_REGISTRY_IMAGE(i, data) \ { (i), (data), sizeof (data) } #define MLK_REGISTRY_TEXTURE(s, data, cw, ch) \ { (s), (data), sizeof (data), (cw), (ch) } #define MLK_REGISTRY_SOUND(s, data) \ { (s), (data), sizeof (data) } #define MLK_REGISTRY_MUSIC(m, data) \ { (m), (data), sizeof (data) } static const struct { enum mlk_registry_image index; const unsigned char *data; size_t datasz; } images[] = { MLK_REGISTRY_IMAGE(MLK_REGISTRY_IMAGE_BATTLE_BACKGROUND, assets_images_battle_background) }; static const struct { enum mlk_registry_texture index; const unsigned char *data; size_t datasz; unsigned int cellw; unsigned int cellh; } textures[] = { MLK_REGISTRY_TEXTURE(MLK_REGISTRY_TEXTURE_BLACK_CAT, assets_images_black_cat, 0, 0), MLK_REGISTRY_TEXTURE(MLK_REGISTRY_TEXTURE_CAT_RUNNING, assets_sprites_cat_running, 512, 256), MLK_REGISTRY_TEXTURE(MLK_REGISTRY_TEXTURE_CHEST, assets_sprites_chest, 32, 32), MLK_REGISTRY_TEXTURE(MLK_REGISTRY_TEXTURE_CURSOR, assets_sprites_ui_cursor, 24, 24), MLK_REGISTRY_TEXTURE(MLK_REGISTRY_TEXTURE_EXPLOSION, assets_sprites_explosion, 256, 256), MLK_REGISTRY_TEXTURE(MLK_REGISTRY_TEXTURE_HAUNTED_WOOD, assets_images_haunted_wood, 0, 0), MLK_REGISTRY_TEXTURE(MLK_REGISTRY_TEXTURE_JOHN, assets_sprites_john, 48, 48), MLK_REGISTRY_TEXTURE(MLK_REGISTRY_TEXTURE_JOHN_SWORD, assets_sprites_john_sword, 256, 256), MLK_REGISTRY_TEXTURE(MLK_REGISTRY_TEXTURE_JOHN_WALK, assets_sprites_john_walk, 256, 256), MLK_REGISTRY_TEXTURE(MLK_REGISTRY_TEXTURE_NUMBERS, assets_sprites_numbers, 48, 48), MLK_REGISTRY_TEXTURE(MLK_REGISTRY_TEXTURE_PEOPLE, assets_sprites_people, 48, 48), MLK_REGISTRY_TEXTURE(MLK_REGISTRY_TEXTURE_SWORD, assets_images_sword, 0, 0), MLK_REGISTRY_TEXTURE(MLK_REGISTRY_TEXTURE_WATER, assets_sprites_water, 48, 48), MLK_REGISTRY_TEXTURE(MLK_REGISTRY_TEXTURE_WORLD, assets_sprites_world, 48, 48) }; static const struct { enum mlk_registry_sound index; const unsigned char *data; size_t datasz; } sounds[] = { MLK_REGISTRY_SOUND(MLK_REGISTRY_SOUND_FIRE, assets_sounds_fire), MLK_REGISTRY_SOUND(MLK_REGISTRY_SOUND_OPEN_CHEST, assets_sounds_open_chest) }; static const struct { enum mlk_registry_music index; const unsigned char *data; size_t datasz; } musics[] = { MLK_REGISTRY_MUSIC(MLK_REGISTRY_MUSIC_ROMANCE, assets_music_vabsounds_romance) }; static void load_images(void) { struct mlk_texture *texture; for (size_t i = 0; i < MLK_UTIL_SIZE(images); ++i) { texture = &mlk_registry_images[images[i].index]; if (mlk_image_openmem(texture, images[i].data, images[i].datasz) < 0) mlk_panicf("unable to open image: %s", mlk_err()); } } static void load_textures_and_sprites(void) { struct mlk_texture *texture; struct mlk_sprite *sprite; for (size_t i = 0; i < MLK_UTIL_SIZE(textures); ++i) { texture = &mlk_registry_textures[textures[i].index]; sprite = &mlk_registry_sprites[textures[i].index]; if (mlk_image_openmem(texture, textures[i].data, textures[i].datasz) < 0) mlk_panicf("unable to open image: %s", mlk_err()); if (textures[i].cellw == 0 || textures[i].cellh == 0) { sprite->cellw = texture->w; sprite->cellh = texture->h; } else { sprite->cellw = textures[i].cellw; sprite->cellh = textures[i].cellh; } sprite->texture = texture; mlk_sprite_init(sprite); } } static void load_sounds(void) { struct mlk_sound *sound; for (size_t i = 0; i < MLK_UTIL_SIZE(sounds); ++i) { sound = &mlk_registry_sounds[sounds[i].index]; if (mlk_sound_openmem(sound, sounds[i].data, sounds[i].datasz) < 0) mlk_panicf("unable to open sound: %s", mlk_err()); } } static void load_music(void) { struct mlk_music *music; for (size_t i = 0; i < MLK_UTIL_SIZE(musics); ++i) { music = &mlk_registry_music[musics[i].index]; if (mlk_music_openmem(music, musics[i].data, musics[i].datasz) < 0) mlk_panicf("unable to open music: %s", mlk_err()); } } void mlk_registry_init(void) { load_images(); load_textures_and_sprites(); load_sounds(); load_music(); } void mlk_registry_finish(void) { for (size_t i = 0; i < MLK_UTIL_SIZE(mlk_registry_images); ++i) mlk_texture_finish(&mlk_registry_images[i]); for (size_t i = 0; i < MLK_UTIL_SIZE(mlk_registry_textures); ++i) mlk_texture_finish(&mlk_registry_textures[i]); for (size_t i = 0; i < MLK_UTIL_SIZE(mlk_registry_sounds); ++i) mlk_sound_finish(&mlk_registry_sounds[i]); for (size_t i = 0; i < MLK_UTIL_SIZE(mlk_registry_music); ++i) mlk_music_finish(&mlk_registry_music[i]); }