Refactor out level loading function
parent
8e9efc622d
commit
9387189927
|
@ -190,19 +190,6 @@ static void level_scene_render_func(Scene_t* scene)
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline unsigned int get_tile_idx(int x, int y, const TileGrid_t* tilemap)
|
|
||||||
{
|
|
||||||
unsigned int tile_x = x / TILE_SIZE;
|
|
||||||
unsigned int tile_y = y / TILE_SIZE;
|
|
||||||
|
|
||||||
if (tile_x < tilemap->width && tile_y < tilemap->height)
|
|
||||||
{
|
|
||||||
return tile_y * tilemap->width + tile_x;
|
|
||||||
}
|
|
||||||
|
|
||||||
return MAX_N_TILES;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void simple_friction_system(Scene_t* scene)
|
static void simple_friction_system(Scene_t* scene)
|
||||||
{
|
{
|
||||||
CMovementState_t* p_mstate;
|
CMovementState_t* p_mstate;
|
||||||
|
@ -290,48 +277,7 @@ int main(void)
|
||||||
|
|
||||||
scene.data.level_pack = pack;
|
scene.data.level_pack = pack;
|
||||||
scene.data.current_level = 0;
|
scene.data.current_level = 0;
|
||||||
|
assert(load_level_tilemap(&scene, 0) == true);
|
||||||
scene.data.tilemap.width = scene.data.level_pack->levels[scene.data.current_level].width;
|
|
||||||
scene.data.tilemap.height = scene.data.level_pack->levels[scene.data.current_level].height;
|
|
||||||
scene.data.tilemap.n_tiles = scene.data.tilemap.width * scene.data.tilemap.height;
|
|
||||||
assert(scene.data.tilemap.n_tiles <= MAX_N_TILES);
|
|
||||||
memset(scene.data.tile_sprites, 0, sizeof(scene.data.tile_sprites));
|
|
||||||
|
|
||||||
LevelMap_t lvl_map = scene.data.level_pack->levels[scene.data.current_level];
|
|
||||||
// Level loading in here
|
|
||||||
for (size_t i = 0; i < scene.data.tilemap.n_tiles;i++)
|
|
||||||
{
|
|
||||||
all_tiles[i].max_water_level = 4;
|
|
||||||
all_tiles[i].solid = NOT_SOLID;
|
|
||||||
all_tiles[i].tile_type = EMPTY_TILE;
|
|
||||||
all_tiles[i].moveable = true;
|
|
||||||
all_tiles[i].size = (Vector2){TILE_SIZE, TILE_SIZE};
|
|
||||||
|
|
||||||
switch (lvl_map.tiles[i].tile_type)
|
|
||||||
{
|
|
||||||
case 1:
|
|
||||||
change_a_tile(&scene.data.tilemap, i, SOLID_TILE);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
all_tiles[i].water_level = all_tiles[i].max_water_level;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
switch (lvl_map.tiles[i].entity_to_spawn)
|
|
||||||
{
|
|
||||||
case 1:
|
|
||||||
{
|
|
||||||
Entity_t* ent = create_player(&scene.scene.ent_manager, &scene.scene.engine->assets);
|
|
||||||
CTransform_t* p_ct = get_component(ent, CTRANSFORM_COMP_T);
|
|
||||||
p_ct->position.x = i & scene.data.tilemap.width;
|
|
||||||
p_ct->position.y = i / scene.data.tilemap.width;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
update_entity_manager(&scene.scene.ent_manager);
|
update_entity_manager(&scene.scene.ent_manager);
|
||||||
|
|
||||||
|
@ -356,7 +302,6 @@ int main(void)
|
||||||
sc_map_put_64(&scene.scene.action_map, KEY_RIGHT, ACTION_RIGHT);
|
sc_map_put_64(&scene.scene.action_map, KEY_RIGHT, ACTION_RIGHT);
|
||||||
sc_map_put_64(&scene.scene.action_map, KEY_P, ACTION_METAL_TOGGLE);
|
sc_map_put_64(&scene.scene.action_map, KEY_P, ACTION_METAL_TOGGLE);
|
||||||
|
|
||||||
|
|
||||||
while(true)
|
while(true)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "scene_impl.h"
|
#include "scene_impl.h"
|
||||||
|
#include "ent_impl.h"
|
||||||
#include "constants.h"
|
#include "constants.h"
|
||||||
|
|
||||||
void init_level_scene_data(LevelSceneData_t* data, uint32_t max_tiles, Tile_t* tiles)
|
void init_level_scene_data(LevelSceneData_t* data, uint32_t max_tiles, Tile_t* tiles)
|
||||||
|
@ -44,17 +45,59 @@ void term_level_scene_data(LevelSceneData_t* data)
|
||||||
UnloadRenderTexture(data->game_viewport); // Unload render texture
|
UnloadRenderTexture(data->game_viewport); // Unload render texture
|
||||||
}
|
}
|
||||||
|
|
||||||
static void clear_level_tilemap(LevelSceneData_t* data)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
bool load_level_tilemap(LevelScene_t* scene, unsigned int level_num)
|
bool load_level_tilemap(LevelScene_t* scene, unsigned int level_num)
|
||||||
{
|
{
|
||||||
|
if (level_num >= scene->data.level_pack->n_levels) return false;
|
||||||
|
|
||||||
|
LevelMap_t lvl_map = scene->data.level_pack->levels[level_num];
|
||||||
|
uint32_t n_tiles = lvl_map.width * lvl_map.height;
|
||||||
|
if (n_tiles > scene->data.tilemap.max_tiles) return false;
|
||||||
|
|
||||||
|
scene->data.current_level = level_num;
|
||||||
|
scene->data.tilemap.width = lvl_map.width;
|
||||||
|
scene->data.tilemap.height = lvl_map.height;
|
||||||
|
scene->data.tilemap.n_tiles = n_tiles;
|
||||||
|
|
||||||
|
clear_entity_manager(&scene->scene.ent_manager);
|
||||||
|
for (size_t i = 0; i < scene->data.tilemap.n_tiles;i++)
|
||||||
|
{
|
||||||
|
scene->data.tilemap.tiles[i].max_water_level = 4;
|
||||||
|
scene->data.tilemap.tiles[i].solid = NOT_SOLID;
|
||||||
|
scene->data.tilemap.tiles[i].tile_type = EMPTY_TILE;
|
||||||
|
scene->data.tilemap.tiles[i].moveable = true;
|
||||||
|
scene->data.tilemap.tiles[i].size = (Vector2){TILE_SIZE, TILE_SIZE};
|
||||||
|
|
||||||
|
switch (lvl_map.tiles[i].tile_type)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
change_a_tile(&scene->data.tilemap, i, SOLID_TILE);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
scene->data.tilemap.tiles[i].water_level = scene->data.tilemap.tiles[i].max_water_level;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (lvl_map.tiles[i].entity_to_spawn)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
Entity_t* ent = create_player(&scene->scene.ent_manager, &scene->scene.engine->assets);
|
||||||
|
CTransform_t* p_ct = get_component(ent, CTRANSFORM_COMP_T);
|
||||||
|
p_ct->position.x = i & scene->data.tilemap.width;
|
||||||
|
p_ct->position.y = i / scene->data.tilemap.width;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void reload_level_tilemap(LevelScene_t* scene)
|
void reload_level_tilemap(LevelScene_t* scene)
|
||||||
{
|
{
|
||||||
|
load_level_tilemap(scene, scene->data.current_level);
|
||||||
}
|
}
|
||||||
|
|
||||||
void change_a_tile(TileGrid_t* tilemap, unsigned int tile_idx, TileType_t new_type)
|
void change_a_tile(TileGrid_t* tilemap, unsigned int tile_idx, TileType_t new_type)
|
||||||
|
|
Loading…
Reference in New Issue