Preparation for different types of terrain

This commit is contained in:
2021-04-30 09:10:58 +02:00
parent 5562ca4d82
commit 1927b71629
9 changed files with 175 additions and 134 deletions
+24 -20
View File
@@ -5,45 +5,45 @@
#include "blocks.hpp"
#include "objectids.hpp"
std::shared_ptr<SDLPP::RectangleRender> decodeObject( char obj, double x, double y, std::shared_ptr<SDLPP::Renderer> &renderer) {
std::shared_ptr<SDLPP::RectangleRender> decodeObject( char obj, BlockType type, double x, double y, std::shared_ptr<SDLPP::Renderer> &renderer) {
switch(obj) {
case 'F':
return createTerrainBlock(FLOOR_OVERWORLD_ID, renderer, x, y, true);
return createTerrainBlock(FLOOR_ID, type, renderer, x, y, true);
case 'I':
return createTerrainBlock(HILL_OVERWORLD_INCLINE_ID, renderer, x, y);
return createTerrainBlock(HILL_INCLINE_ID, type, renderer, x, y);
case 'R':
return createTerrainBlock(HILL_OVERWORLD_DOTS_RIGHT_ID, renderer, x, y);
return createTerrainBlock(HILL_DOTS_RIGHT_ID, type, renderer, x, y);
case 'G':
return createTerrainBlock(HILL_OVERWORLD_FILL_ID, renderer, x, y);
return createTerrainBlock(HILL_FILL_ID, type, renderer, x, y);
case 'L':
return createTerrainBlock(HILL_OVERWORLD_DOTS_LEFT_ID, renderer, x, y);
return createTerrainBlock(HILL_DOTS_LEFT_ID, type, renderer, x, y);
case 'D':
return createTerrainBlock(HILL_OVERWORLD_DECLINE_ID, renderer, x, y);
return createTerrainBlock(HILL_DECLINE_ID, type, renderer, x, y);
case 'T':
return createTerrainBlock(HILL_OVERWORLD_TOP_ID, renderer, x, y);
return createTerrainBlock(HILL_TOP_ID, type, renderer, x, y);
case 'q':
return createTerrainBlock(BUSH_OVERWORLD_LEFT_ID, renderer, x, y);
return createTerrainBlock(BUSH_LEFT_ID, type, renderer, x, y);
case 'w':
return createTerrainBlock(BUSH_OVERWORLD_MIDDLE_ID, renderer, x, y);
return createTerrainBlock(BUSH_MIDDLE_ID, type, renderer, x, y);
case 'r':
return createTerrainBlock(BUSH_OVERWORLD_RIGHT_ID, renderer, x, y);
return createTerrainBlock(BUSH_RIGHT_ID, type, renderer, x, y);
case 'a':
return createTerrainBlock(CLOUD_OVERWORLD_LEFT_BOTTOM_ID, renderer, x, y);
return createTerrainBlock(CLOUD_LEFT_BOTTOM_ID, type, renderer, x, y);
case 's':
return createTerrainBlock(CLOUD_OVERWORLD_MIDDLE_BOTTOM_ID, renderer, x, y);
return createTerrainBlock(CLOUD_MIDDLE_BOTTOM_ID, type, renderer, x, y);
case 'd':
return createTerrainBlock(CLOUD_OVERWORLD_RIGHT_BOTTOM_ID, renderer, x, y);
return createTerrainBlock(CLOUD_RIGHT_BOTTOM_ID, type, renderer, x, y);
case 'z':
return createTerrainBlock(CLOUD_OVERWORLD_LEFT_TOP_ID, renderer, x, y);
return createTerrainBlock(CLOUD_LEFT_TOP_ID, type, renderer, x, y);
case 'x':
return createTerrainBlock(CLOUD_OVERWORLD_MIDDLE_TOP_ID, renderer, x, y);
return createTerrainBlock(CLOUD_MIDDLE_TOP_ID, type, renderer, x, y);
case 'c':
return createTerrainBlock(CLOUD_OVERWORLD_RIGHT_TOP_ID, renderer, x, y);
return createTerrainBlock(CLOUD_RIGHT_TOP_ID, type, renderer, x, y);
}
return nullptr;
}
void loadMap(std::shared_ptr<SDLPP::Scene> &scene, std::shared_ptr<SDLPP::RectangleRender> &mario, const std::string &file, std::shared_ptr<SDLPP::Renderer> &renderer) {
void loadMap(std::shared_ptr<SDLPP::Scene> &scene, std::shared_ptr<SDLPP::RectangleRender> mario, const std::string &file, std::shared_ptr<SDLPP::Renderer> &renderer) {
std::fstream mapFile;
mapFile.open(file, std::ios::in);
std::string buffer;
@@ -63,12 +63,16 @@ void loadMap(std::shared_ptr<SDLPP::Scene> &scene, std::shared_ptr<SDLPP::Rectan
cur_x += BLOCK_SIZE;
if(buffer[j] == ' ')
continue;
auto obj = decodeObject(buffer[j], cur_x, cur_y, renderer);
auto obj = decodeObject(buffer[j], OVERWORLD, cur_x, cur_y, renderer);
if(obj != nullptr)
scene->addObject(obj);
}
cur_y += BLOCK_SIZE;
}
mario->setPos(mario_x * BLOCK_SIZE, 1 - (rows - mario_y) * BLOCK_SIZE);
if(mario != nullptr) {
mario->setPos(mario_x * BLOCK_SIZE, 1 - (rows - mario_y) * BLOCK_SIZE);
} else {
//createMarioBlock
}
scene->moveZTop(mario);
}