Add tilemap rendering from sprite

Internal Changelog:
- Add a mapping from connectivity to tile to render
- Add new field for static tilemap sprite
scene_man
En Yi 2024-05-09 21:07:15 +08:00
parent d7113d42fe
commit 7b4af0b513
3 changed files with 16 additions and 3 deletions

View File

@ -101,7 +101,7 @@ static inline bool add_a_sprite(Assets_t* assets, const SpriteInfo_t* spr_info,
// Cannot be zero // Cannot be zero
spr->frame_count = 1; spr->frame_count = 1;
} }
spr->frame_per_row = spr_info->frame_count; spr->frame_per_row = spr_info->frame_per_row;
spr->speed = spr_info->speed; spr->speed = spr_info->speed;
return true; return true;
} }

View File

@ -44,6 +44,13 @@ static bool crate_activation = false;
#define GAME_LAYER 0 #define GAME_LAYER 0
#define SELECTION_LAYER 1 #define SELECTION_LAYER 1
#define CONTROL_LAYER 2 #define CONTROL_LAYER 2
static const uint8_t CONNECTIVITY_TILE_MAPPING[16] = {
0,3,15,14,
1,2,12,13,
7,6,11,10,
4,5,8 ,9 ,
};
static char* get_spawn_selection_string(enum EntitySpawnSelection sel) static char* get_spawn_selection_string(enum EntitySpawnSelection sel)
{ {
switch(sel) switch(sel)
@ -481,8 +488,12 @@ static void render_editor_game_scene(Scene_t* scene)
} }
if (tilemap.tiles[i].solid == SOLID) if (tilemap.tiles[i].solid == SOLID)
{ {
sprintf(buffer, "%u", tilemap.tiles[i].connectivity); draw_sprite(
DrawText(buffer, x + tilemap.tile_size / 2, y + tilemap.tile_size / 2, 12, WHITE); data->solid_tile_sprites, CONNECTIVITY_TILE_MAPPING[tilemap.tiles[i].connectivity],
(Vector2){x,y}, 0.0f, false
);
//sprintf(buffer, "%u", tilemap.tiles[i].connectivity);
//DrawText(buffer, x + tilemap.tile_size / 2, y + tilemap.tile_size / 2, 12, WHITE);
} }
} }
} }
@ -1002,6 +1013,7 @@ void init_sandbox_scene(LevelScene_t* scene)
scene->data.tile_sprites[SPIKES + TILE_90CWROT] = get_sprite(&scene->scene.engine->assets, "l_spikes"); scene->data.tile_sprites[SPIKES + TILE_90CWROT] = get_sprite(&scene->scene.engine->assets, "l_spikes");
scene->data.tile_sprites[SPIKES + TILE_90CCWROT] = get_sprite(&scene->scene.engine->assets, "r_spikes"); scene->data.tile_sprites[SPIKES + TILE_90CCWROT] = get_sprite(&scene->scene.engine->assets, "r_spikes");
scene->data.tile_sprites[SPIKES + TILE_180ROT] = get_sprite(&scene->scene.engine->assets, "u_spikes"); scene->data.tile_sprites[SPIKES + TILE_180ROT] = get_sprite(&scene->scene.engine->assets, "u_spikes");
scene->data.solid_tile_sprites = get_sprite(&scene->scene.engine->assets, "stile0");
for (size_t i = 0; i < scene->data.tilemap.width; ++i) for (size_t i = 0; i < scene->data.tilemap.width; ++i)
{ {

View File

@ -44,6 +44,7 @@ typedef struct LevelSceneData {
Rectangle game_rec; Rectangle game_rec;
LevelCamera_t camera; LevelCamera_t camera;
Sprite_t* tile_sprites[MAX_TILE_SPRITES]; Sprite_t* tile_sprites[MAX_TILE_SPRITES];
Sprite_t* solid_tile_sprites;
LevelPack_t* level_pack; LevelPack_t* level_pack;
unsigned int current_level; unsigned int current_level;
CoinCounter_t coins; CoinCounter_t coins;