diff --git a/scenes/editor_scene.c b/scenes/editor_scene.c index 5ce8ebc..4b8819d 100644 --- a/scenes/editor_scene.c +++ b/scenes/editor_scene.c @@ -14,12 +14,13 @@ enum EntitySpawnSelection { TOGGLE_TILE = 0, TOGGLE_ONEWAY, TOGGLE_LADDER, + TOGGLE_SPIKE, SPAWN_CRATE, SPAWN_METAL_CRATE, SPAWN_BOULDER, }; -#define MAX_SPAWN_TYPE 6 +#define MAX_SPAWN_TYPE 7 static unsigned int current_spawn_selection = 0; static inline unsigned int get_tile_idx(int x, int y, const TileGrid_t* tilemap) @@ -68,6 +69,13 @@ static void level_scene_render_func(Scene_t* scene) { DrawRectangle(x, y, TILE_SIZE, TILE_SIZE, ORANGE); } + else if (tilemap.tiles[i].tile_type == SPIKES) + { + DrawRectangle( + x + tilemap.tiles[i].offset.x, y + tilemap.tiles[i].offset.y, + tilemap.tiles[i].size.x, tilemap.tiles[i].size.y, RED + ); + } if (tilemap.tiles[i].water_level > 0) { @@ -317,6 +325,17 @@ static void toggle_block_system(Scene_t* scene) tilemap.tiles[down_tile].solid = (tilemap.tiles[tile_idx].tile_type != LADDER)? ONE_WAY : NOT_SOLID; } break; + case TOGGLE_SPIKE: + if (tilemap.tiles[tile_idx].tile_type == SPIKES) + { + tilemap.tiles[tile_idx].tile_type = EMPTY_TILE; + } + else + { + tilemap.tiles[tile_idx].tile_type = SPIKES; + } + tilemap.tiles[tile_idx].solid = NOT_SOLID; + break; case SPAWN_CRATE: spawn_crate(scene, tile_idx, false); break; @@ -327,6 +346,34 @@ static void toggle_block_system(Scene_t* scene) spawn_boulder(scene, tile_idx); break; } + if (tilemap.tiles[tile_idx].tile_type == SPIKES) + { + if (tile_idx - tilemap.width >= 0 && tilemap.tiles[tile_idx-tilemap.width].tile_type == SOLID_TILE) + { + tilemap.tiles[tile_idx].offset = (Vector2){0,0}; + tilemap.tiles[tile_idx].size = (Vector2){32,16}; + } + else if (tile_idx % tilemap.width != 0 && tile_idx > 0 && tilemap.tiles[tile_idx-1].tile_type == SOLID_TILE) + { + tilemap.tiles[tile_idx].offset = (Vector2){0,0}; + tilemap.tiles[tile_idx].size = (Vector2){16,32}; + } + else if (tile_idx % tilemap.width + 1 != 0 && tile_idx < MAX_N_TILES - 1 && tilemap.tiles[tile_idx+1].tile_type == SOLID_TILE) + { + tilemap.tiles[tile_idx].offset = (Vector2){16,0}; + tilemap.tiles[tile_idx].size = (Vector2){16,32}; + } + else + { + tilemap.tiles[tile_idx].offset = (Vector2){0,16}; + tilemap.tiles[tile_idx].size = (Vector2){32,16}; + } + } + else + { + tilemap.tiles[tile_idx].offset = (Vector2){0,0}; + tilemap.tiles[tile_idx].size = (Vector2){32,32}; + } last_tile_idx = tile_idx; } } diff --git a/scenes/scene_impl.h b/scenes/scene_impl.h index 0f1e36e..e9ae142 100644 --- a/scenes/scene_impl.h +++ b/scenes/scene_impl.h @@ -15,9 +15,10 @@ typedef enum TileType { EMPTY_TILE = 0, SOLID_TILE, ONEWAY_TILE, - LADDER + LADDER, + SPIKES, } TileType_t; -#define MAX_TILE_TYPES 4 +#define MAX_TILE_TYPES 5 typedef enum SolidType { NOT_SOLID = 0,