Preparation for different types of terrain
This commit is contained in:
+56
-39
@@ -2,6 +2,35 @@
|
||||
#include "global_vars.hpp"
|
||||
#include "objectids.hpp"
|
||||
#include "sprites.hpp"
|
||||
#include <unordered_map>
|
||||
|
||||
const std::vector< uint64_t > possibleBlocks = { FLOOR_ID,
|
||||
HILL_INCLINE_ID,
|
||||
HILL_DECLINE_ID,
|
||||
HILL_DOTS_RIGHT_ID,
|
||||
HILL_DOTS_LEFT_ID,
|
||||
HILL_FILL_ID,
|
||||
HILL_TOP_ID,
|
||||
BUSH_LEFT_ID,
|
||||
BUSH_MIDDLE_ID,
|
||||
BUSH_RIGHT_ID,
|
||||
CLOUD_LEFT_BOTTOM_ID,
|
||||
CLOUD_MIDDLE_BOTTOM_ID,
|
||||
CLOUD_RIGHT_BOTTOM_ID,
|
||||
CLOUD_LEFT_TOP_ID,
|
||||
CLOUD_MIDDLE_TOP_ID,
|
||||
CLOUD_RIGHT_TOP_ID };
|
||||
|
||||
const std::unordered_map<uint64_t, const SDL_Rect*> block_mapping = {
|
||||
{FLOOR_ID, &FLOOR_SRC}, {HILL_INCLINE_ID, &HILL_INCLINE_SRC},
|
||||
{HILL_DECLINE_ID, &HILL_DECLINE_SRC}, {HILL_DOTS_RIGHT_ID, &HILL_DOTS_RIGHT_SRC},
|
||||
{HILL_DOTS_LEFT_ID, &HILL_DOTS_LEFT_SRC}, {HILL_FILL_ID, &HILL_FILL_SRC},
|
||||
{HILL_TOP_ID, &HILL_TOP_SRC}, {BUSH_LEFT_ID, &BUSH_LEFT_SRC}, {BUSH_MIDDLE_ID, &BUSH_MIDDLE_SRC},
|
||||
{BUSH_RIGHT_ID, &BUSH_RIGHT_SRC}, {CLOUD_LEFT_BOTTOM_ID, &CLOUD_LEFT_BOTTOM_SRC},
|
||||
{CLOUD_MIDDLE_BOTTOM_ID, &CLOUD_MIDDLE_BOTTOM_SRC}, {CLOUD_RIGHT_BOTTOM_ID, &CLOUD_RIGHT_BOTTOM_SRC},
|
||||
{CLOUD_LEFT_TOP_ID, &CLOUD_LEFT_TOP_SRC}, {CLOUD_MIDDLE_TOP_ID, &CLOUD_MIDDLE_TOP_SRC},
|
||||
{CLOUD_RIGHT_TOP_ID, &CLOUD_RIGHT_TOP_SRC}
|
||||
};
|
||||
|
||||
std::shared_ptr< SDLPP::RectangleRender >
|
||||
createBlock( std::shared_ptr< SDLPP::Renderer > &renderer, double x, double y,
|
||||
@@ -17,55 +46,43 @@ createBlock( std::shared_ptr< SDLPP::Renderer > &renderer, double x, double y,
|
||||
return block;
|
||||
}
|
||||
|
||||
SDL_Rect getSourceRectByID( uint64_t id ) {
|
||||
switch ( id ) {
|
||||
case FLOOR_OVERWORLD_ID:
|
||||
return FLOOR_OVERWORLD_SRC;
|
||||
case HILL_OVERWORLD_INCLINE_ID:
|
||||
return HILL_OVERWORLD_INCLINE_SRC;
|
||||
case HILL_OVERWORLD_DECLINE_ID:
|
||||
return HILL_OVERWORLD_DECLINE_SRC;
|
||||
case HILL_OVERWORLD_DOTS_RIGHT_ID:
|
||||
return HILL_OVERWORLD_DOTS_RIGHT_SRC;
|
||||
case HILL_OVERWORLD_DOTS_LEFT_ID:
|
||||
return HILL_OVERWORLD_DOTS_LEFT_SRC;
|
||||
case HILL_OVERWORLD_FILL_ID:
|
||||
return HILL_OVERWORLD_FILL_SRC;
|
||||
case HILL_OVERWORLD_TOP_ID:
|
||||
return HILL_OVERWORLD_TOP_SRC;
|
||||
case BUSH_OVERWORLD_LEFT_ID:
|
||||
return BUSH_OVERWORLD_LEFT_SRC;
|
||||
case BUSH_OVERWORLD_MIDDLE_ID:
|
||||
return BUSH_OVERWORLD_MIDDLE_SRC;
|
||||
case BUSH_OVERWORLD_RIGHT_ID:
|
||||
return BUSH_OVERWORLD_RIGHT_SRC;
|
||||
case CLOUD_OVERWORLD_LEFT_BOTTOM_ID:
|
||||
return CLOUD_OVERWORLD_LEFT_BOTTOM_SRC;
|
||||
case CLOUD_OVERWORLD_MIDDLE_BOTTOM_ID:
|
||||
return CLOUD_OVERWORLD_MIDDLE_BOTTOM_SRC;
|
||||
case CLOUD_OVERWORLD_RIGHT_BOTTOM_ID:
|
||||
return CLOUD_OVERWORLD_RIGHT_BOTTOM_SRC;
|
||||
case CLOUD_OVERWORLD_LEFT_TOP_ID:
|
||||
return CLOUD_OVERWORLD_LEFT_TOP_SRC;
|
||||
case CLOUD_OVERWORLD_MIDDLE_TOP_ID:
|
||||
return CLOUD_OVERWORLD_MIDDLE_TOP_SRC;
|
||||
case CLOUD_OVERWORLD_RIGHT_TOP_ID:
|
||||
return CLOUD_OVERWORLD_RIGHT_TOP_SRC;
|
||||
SDL_Rect getSourceRectByID( uint64_t id, BlockType type ) {
|
||||
if(block_mapping.find(id) == block_mapping.end())
|
||||
return {};
|
||||
SDL_Rect ret_src = *block_mapping.at(id);
|
||||
switch ( type ) {
|
||||
case OVERWORLD:
|
||||
ret_src.x += OVERWORLD_SHIFT.getX();
|
||||
ret_src.y += OVERWORLD_SHIFT.getY();
|
||||
break;
|
||||
case UNDERWORLD:
|
||||
ret_src.x += UNDERWORLD_SHIFT.getX();
|
||||
ret_src.y += UNDERWORLD_SHIFT.getY();
|
||||
break;
|
||||
case WATER:
|
||||
ret_src.x += WATER_SHIFT.getX();
|
||||
ret_src.y += WATER_SHIFT.getY();
|
||||
break;
|
||||
case BOWSER:
|
||||
ret_src.x += BOWSER_SHIFT.getX();
|
||||
ret_src.y += BOWSER_SHIFT.getY();
|
||||
break;
|
||||
}
|
||||
return {};
|
||||
return ret_src;
|
||||
}
|
||||
|
||||
std::shared_ptr< SDLPP::RectangleRender >
|
||||
createTerrainBlock( uint64_t block_id,
|
||||
createTerrainBlock( uint64_t block_id, BlockType type,
|
||||
std::shared_ptr< SDLPP::Renderer > &renderer, double x,
|
||||
double y, bool collision ) {
|
||||
return createBlock( renderer, x, y, g_terrain_texture,
|
||||
getSourceRectByID( block_id ), block_id, collision );
|
||||
getSourceRectByID( block_id, type ), block_id,
|
||||
collision );
|
||||
}
|
||||
|
||||
std::shared_ptr< SDLPP::RectangleRender >
|
||||
createTerrainBlock( uint64_t block_id,
|
||||
createTerrainBlock( uint64_t block_id, BlockType type,
|
||||
std::shared_ptr< SDLPP::Renderer > &renderer,
|
||||
bool collision ) {
|
||||
return createTerrainBlock( block_id, renderer, 0, 0, collision );
|
||||
return createTerrainBlock( block_id, type, renderer, 0, 0, collision );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user