diff --git a/engine/EC/components.h b/engine/EC/components.h index 71f72ea..88a746c 100644 --- a/engine/EC/components.h +++ b/engine/EC/components.h @@ -4,8 +4,8 @@ #include // TODO: Look at sc to use macros to auto generate functions -#define N_COMPONENTS 9 -enum ComponentEnum +#define N_COMPONENTS 10 +typedef enum ComponentEnum { CBBOX_COMP_T, CTRANSFORM_COMP_T, @@ -16,8 +16,8 @@ enum ComponentEnum CCONTAINER_T, CHITBOXES_T, CHURTBOX_T, -}; -typedef enum ComponentEnum ComponentEnum_t; + CSPRITE_T, +}ComponentEnum_t; typedef struct _CBBox_t { @@ -112,6 +112,25 @@ typedef struct _CHurtbox_t bool fragile; }CHurtbox_t; +// Credits to bedroomcoders.co.uk for this +typedef struct Sprite +{ + Texture2D* texture; + Vector2 frame_size; + Vector2 origin; + int frame_count; + int current_frame; + int elapsed; + int speed; + char* name; +}Sprite_t; + +typedef struct _CSprite_t +{ + Sprite_t* sprite; + Vector2 offset; +}CSprite_t; + static inline void set_bbox(CBBox_t* p_bbox, unsigned int x, unsigned int y) { p_bbox->size.x = x; diff --git a/engine/EC/mempool.c b/engine/EC/mempool.c index 00b7748..87d8a35 100644 --- a/engine/EC/mempool.c +++ b/engine/EC/mempool.c @@ -14,13 +14,8 @@ static CPlayerState_t cplayerstate_buffer[1]; // Only player is expected to have static CContainer_t ccontainer_buffer[MAX_COMP_POOL_SIZE]; static CHitBoxes_t chitboxes_buffer[MAX_COMP_POOL_SIZE]; static CHurtbox_t churtbox_buffer[MAX_COMP_POOL_SIZE]; +static CSprite_t csprite_buffer[MAX_COMP_POOL_SIZE]; -// Use hashmap as a Set -// Use list will be used to check if an object exist -// The alternative method to check the free list if idx is not there -// requires bound checking -// It's just easier on the mind overall -// If need to optimise memory, replace free_list with set and remove use_list typedef struct MemPool { void * const buffer; @@ -42,6 +37,7 @@ static MemPool_t comp_mempools[N_COMPONENTS] = {ccontainer_buffer, MAX_COMP_POOL_SIZE, sizeof(CContainer_t), NULL, {0}}, {chitboxes_buffer, MAX_COMP_POOL_SIZE, sizeof(CHitBoxes_t), NULL, {0}}, {churtbox_buffer, MAX_COMP_POOL_SIZE, sizeof(CHurtbox_t), NULL, {0}}, + {csprite_buffer, MAX_COMP_POOL_SIZE, sizeof(CSprite_t), NULL, {0}}, }; static MemPool_t ent_mempool = {entity_buffer, MAX_COMP_POOL_SIZE, sizeof(Entity_t), NULL, {0}}; diff --git a/engine/assets.h b/engine/assets.h index 85c7c18..f016e87 100644 --- a/engine/assets.h +++ b/engine/assets.h @@ -1,21 +1,9 @@ #ifndef __ASSETS_H #define __ASSETS_H #include "sc/map/sc_map.h" +#include "components.h" #include "raylib.h" -// Credits to bedroomcoders.co.uk for this -typedef struct Sprite -{ - Texture2D* texture; - Vector2 frame_size; - Vector2 origin; - int frame_count; - int current_frame; - int elapsed; - int speed; - char* name; -}Sprite_t; - typedef struct Assets { struct sc_map_s64 m_textures; diff --git a/engine/editor_scene.c b/engine/editor_scene.c index 0ff9937..ddbb321 100644 --- a/engine/editor_scene.c +++ b/engine/editor_scene.c @@ -92,6 +92,12 @@ static void level_scene_render_func(Scene_t* scene) }; DrawRectangleLinesEx(rec, 1.5, PURPLE); } + CSprite_t* p_cspr = get_component(&scene->ent_manager, p_ent, CSPRITE_T); + if (p_cspr != NULL) + { + Vector2 pos = Vector2Add(p_ct->position, p_cspr->offset); + draw_sprite(p_cspr->sprite, pos); + } } for (size_t i=0; isize.x + 2, .height = p_bbox->size.y - 1, }; + CSprite_t* p_cspr = add_component(&scene->ent_manager, p_ent, CSPRITE_T); + p_cspr->sprite = get_sprite(&scene->engine->assets, "plr_stand"); } static void toggle_block_system(Scene_t *scene) diff --git a/engine/engine.h b/engine/engine.h index 92d6ec8..054fd13 100644 --- a/engine/engine.h +++ b/engine/engine.h @@ -3,6 +3,8 @@ #include "entManager.h" #include "actions.h" #include "sc/array/sc_array.h" +#include "assets.h" + typedef struct Scene Scene_t; typedef struct GameEngine @@ -10,6 +12,7 @@ typedef struct GameEngine Scene_t **scenes; unsigned int max_scenes; unsigned int curr_scene; + Assets_t assets; }GameEngine_t; void change_scene(GameEngine_t *engine, unsigned int idx); diff --git a/scene_test.c b/scene_test.c index 5afc7e4..9ac2a39 100644 --- a/scene_test.c +++ b/scene_test.c @@ -6,14 +6,40 @@ // Maintain own queue to handle key presses struct sc_queue_32 key_buffer; +Scene_t *scenes[1]; +static GameEngine_t engine = +{ + .scenes = scenes, + .max_scenes = 1, + .curr_scene = 0, + .assets = {0} +}; + int main(void) { sc_queue_init(&key_buffer); InitWindow(1280, 640, "raylib"); SetTargetFPS(60); init_memory_pools(); + + init_assets(&engine.assets); + Texture2D* tex = add_texture(&engine.assets, "plr_tex", "res/test_tex.png"); + Sprite_t* spr = add_sprite(&engine.assets, "plr_stand", tex); + spr->origin = (Vector2){0, 0}; + spr->frame_size = (Vector2){32, 32}; + + spr = add_sprite(&engine.assets, "plr_run", tex); + spr->frame_count = 4; + spr->origin = (Vector2){0, 0}; + spr->frame_size = (Vector2){32, 32}; + spr->speed = 15; + LevelScene_t scene; + scene.scene.engine = &engine; init_level_scene(&scene); + scenes[0] = &scene.scene; + change_scene(&engine, 0); + while(true) {