introduce basic asset system
parent
b4ae2d01df
commit
6621d248b8
|
@ -1,21 +1,28 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "system.h"
|
#include "system.h"
|
||||||
|
|
||||||
typedef struct {
|
#define ASSET_INVALID 0xFF
|
||||||
uint16_t id;
|
|
||||||
uint8_t kind;
|
|
||||||
char* filename;
|
|
||||||
} asset_info;
|
|
||||||
|
|
||||||
enum {
|
typedef enum {
|
||||||
ASSET_KIND_IMAGE,
|
|
||||||
ASSET_KIND_SOUND,
|
|
||||||
ASSET_KIND_FORCE_8 = UINT8_MAX,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum {
|
|
||||||
ASSET_PLAYER,
|
ASSET_PLAYER,
|
||||||
ASSET_FORCE_16 = UINT16_MAX,
|
ASSET_THING,
|
||||||
};
|
|
||||||
|
|
||||||
extern asset_info assets[];
|
MAX_ASSETS,
|
||||||
|
FORCE_ASSET_UINT16 = UINT16_MAX
|
||||||
|
} asset_id;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
AKIND_TEXTURE,
|
||||||
|
AKIND_SOUND,
|
||||||
|
|
||||||
|
FORCE_AKIND_UINT8 = UINT8_MAX
|
||||||
|
} asset_kind;
|
||||||
|
|
||||||
|
int32_t assets_setup(void);
|
||||||
|
void assets_destroy(void);
|
||||||
|
|
||||||
|
uint16_t assets_find(asset_id id);
|
||||||
|
|
||||||
|
asset_kind assets_get_kind(uint16_t id);
|
||||||
|
void *assets_get_snd(uint16_t id);
|
||||||
|
void *assets_get_tex(uint16_t id);
|
||||||
|
|
|
@ -53,3 +53,13 @@ static inline
|
||||||
Image GetBlockImage(uint8_t id) {
|
Image GetBlockImage(uint8_t id) {
|
||||||
return *(Image*)blocks_get_img(id);
|
return *(Image*)blocks_get_img(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
Image GetSpriteImage(uint16_t id) {
|
||||||
|
return *(Image*)assets_get_tex(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
Sound GetSound(uint16_t id) {
|
||||||
|
return *(Sound*)assets_get_snd(id);
|
||||||
|
}
|
|
@ -1,5 +1,81 @@
|
||||||
#include "assets.h"
|
#include "assets.h"
|
||||||
|
#include "raylib.h"
|
||||||
|
|
||||||
asset_info assets[] = {
|
#define ASSETS_COUNT (sizeof(assets)/sizeof(asset))
|
||||||
{.id = ASSET_PLAYER, .kind = ASSET_KIND_IMAGE, .filename = "player.png"}
|
|
||||||
|
typedef struct {
|
||||||
|
asset_id id;
|
||||||
|
asset_kind kind;
|
||||||
|
|
||||||
|
union {
|
||||||
|
Texture2D tex;
|
||||||
|
Sound snd;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// NOTE(zaklaus): metadata
|
||||||
|
} asset;
|
||||||
|
|
||||||
|
#include "assets_list.c"
|
||||||
|
|
||||||
|
int32_t assets_setup(void) {
|
||||||
|
for (uint32_t i=0; i<ASSETS_COUNT; i++) {
|
||||||
|
asset *b = &assets[i];
|
||||||
|
|
||||||
|
switch (b->kind) {
|
||||||
|
case AKIND_TEXTURE: {
|
||||||
|
// TODO(zaklaus): introduce texgen
|
||||||
|
Image img = GenImageColor(1, 1, RAYWHITE);
|
||||||
|
b->tex = LoadTextureFromImage(img);
|
||||||
|
UnloadImage(img);
|
||||||
|
}break;
|
||||||
|
|
||||||
|
case AKIND_SOUND: {
|
||||||
|
// TODO(zaklaus): soundgen
|
||||||
|
}break;
|
||||||
|
|
||||||
|
default: {
|
||||||
|
// TODO(zaklaus): assert
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void assets_destroy(void) {
|
||||||
|
for (uint32_t i=0; i<ASSETS_COUNT; i++) {
|
||||||
|
switch (assets[i].kind) {
|
||||||
|
case AKIND_TEXTURE: {
|
||||||
|
UnloadTexture(assets[i].tex);
|
||||||
|
}break;
|
||||||
|
|
||||||
|
case AKIND_SOUND: {
|
||||||
|
// TODO(zaklaus): soundgen
|
||||||
|
}break;
|
||||||
|
|
||||||
|
default: {
|
||||||
|
// TODO(zaklaus): assert
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t assets_find(asset_id id) {
|
||||||
|
for (uint32_t i=0; i<ASSETS_COUNT; i++) {
|
||||||
|
if (assets[i].id == id)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
return ASSET_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
asset_kind assets_get_kind(uint16_t id) {
|
||||||
|
return assets[id].kind;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *assets_get_snd(uint16_t id) {
|
||||||
|
return (void*)&assets[id].snd;;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *assets_get_tex(uint16_t id) {
|
||||||
|
return (void*)&assets[id].tex;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
#include "assets.h"
|
||||||
|
|
||||||
|
static asset assets[] = {
|
||||||
|
|
||||||
|
};
|
|
@ -8,6 +8,7 @@
|
||||||
#include "camera.h"
|
#include "camera.h"
|
||||||
#include "math.h"
|
#include "math.h"
|
||||||
#include "world/blocks.h"
|
#include "world/blocks.h"
|
||||||
|
#include "assets.h"
|
||||||
#include "utils/raylib_helpers.h"
|
#include "utils/raylib_helpers.h"
|
||||||
|
|
||||||
uint16_t screenWidth = 1600;
|
uint16_t screenWidth = 1600;
|
||||||
|
@ -44,10 +45,12 @@ void platform_init() {
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
|
|
||||||
blocks_setup();
|
blocks_setup();
|
||||||
|
assets_setup();
|
||||||
}
|
}
|
||||||
|
|
||||||
void platform_shutdown() {
|
void platform_shutdown() {
|
||||||
blocks_destroy();
|
blocks_destroy();
|
||||||
|
assets_destroy();
|
||||||
CloseWindow();
|
CloseWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue