From d2bc49707077329967c7dd48207dc6167ace67db Mon Sep 17 00:00:00 2001 From: zvon Date: Wed, 26 May 2021 14:18:39 +0200 Subject: [PATCH] Mario: set mario pointer when loading map for editor --- mario/editor.cpp | 6 +++--- mario/maploader.cpp | 33 ++++++++++++++++++++++----------- mario/maploader.hpp | 4 +++- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/mario/editor.cpp b/mario/editor.cpp index c613a04..92e7ac7 100644 --- a/mario/editor.cpp +++ b/mario/editor.cpp @@ -291,9 +291,8 @@ void placeTool( SDLPP::Scene &scene ) { new_obj->getCollisions()[0]->setId( EDITOR_TERRAIN_ID ); break; case VisitorType::Modifier: - if(tool_type == BlockRole::CHARACTER) { + if(tool_type == BlockRole::MARIO) { std::get< MapObject::CHARACTER_TYPE >( obj ) = LandType::OVERWORLD; - // TODO character ID std::get< MapObject::CHARACTER_ID >( obj ) = MARIO_ID; std::get< MapObject::MODIFIER_TYPE >( obj ) = 0; std::get< MapObject::MODIFIER_DATA >( obj ) = 0; @@ -306,6 +305,7 @@ void placeTool( SDLPP::Scene &scene ) { global_vars.mario_pos = getSelectedObjectPosition(); new_obj->getCollisions()[0]->setId( EDITOR_CHARACTER_ID ); z_index = scene.getObjects().size() - 1; + // TODO BlockRole::Character } else { // TODO data std::cout << "Want to set: " << (int)std::get< MapObject::MODIFIER_TYPE >( obj ) << std::endl; @@ -417,7 +417,7 @@ int main() { bg->setId( 1 ); scene->addObject( bg ); - loadMap( scene, "test_binary.bin", renderer, global_vars.objects ); + loadMap( scene, global_vars.mario, "test_binary.bin", renderer, global_vars.objects ); // grid for ( int i = 1; i < ( MAP_WIDTH + 2 ); i++ ) { diff --git a/mario/maploader.cpp b/mario/maploader.cpp index 30d18ff..1d8bf2d 100644 --- a/mario/maploader.cpp +++ b/mario/maploader.cpp @@ -46,8 +46,9 @@ void loadMap( std::shared_ptr< SDLPP::Scene > &scene, if ( id == FLOOR_ID || id == BRICK_ID || id == BRICK_TOP_ID ) { collision = true; } - // TODO definitely make this somehow more streamlined, probably flags - if(modifier_type == DESTRUCTIBLE_ID) { + // TODO definitely make this somehow more streamlined, probably + // flags + if ( modifier_type == DESTRUCTIBLE_ID ) { destructible = true; } // TODO add modifiers to createTerrainBlock @@ -68,7 +69,9 @@ void loadMap( std::shared_ptr< SDLPP::Scene > &scene, } // editor loader -void loadMap( std::shared_ptr< SDLPP::Scene > &scene, const std::string &file, +void loadMap( std::shared_ptr< SDLPP::Scene > &scene, + std::shared_ptr< SDLPP::RenderObject > &mario, + const std::string &file, std::shared_ptr< SDLPP::Renderer > &renderer, std::vector< mapColumnType > &objects ) { std::ifstream map_file; @@ -102,7 +105,7 @@ void loadMap( std::shared_ptr< SDLPP::Scene > &scene, const std::string &file, character = additional_data & 0x0F; } } - col[j] = { type, id, character_type, character, + col[j] = { type, id, character_type, character, modifier_type, modifier_data }; // TODO add modifiers to createTerrainBlock auto obj = @@ -115,13 +118,16 @@ void loadMap( std::shared_ptr< SDLPP::Scene > &scene, const std::string &file, scene->addObject( createMario( static_cast< LandType::Value >( character_type ), renderer, i, j ) ); + mario = scene->getObject(scene->getObjects().size() - 1); } } if ( modifier_type ) { - auto mod = createTerrainBlock( modifier_type, LandType::OVERWORLD, renderer, i, j, g_translucent_terrain_texture, true ); + auto mod = createTerrainBlock( + modifier_type, LandType::OVERWORLD, renderer, i, j, + g_translucent_terrain_texture, true ); mod->getCollisions()[0]->setId( EDITOR_TERRAIN_ID ); - dynamic_cast(mod.get())->setTerrain(false); - scene->addObject(mod); + dynamic_cast< MarioBlock * >( mod.get() )->setTerrain( false ); + scene->addObject( mod ); } } } @@ -142,20 +148,25 @@ void saveMap( const std::string &file, std::vector< mapColumnType > &objects ) { auto &obj = col[i]; uint16_t wide_type = std::get< MapObject::TERRAIN_TYPE >( obj ); wide_type = wide_type << 12; - uint16_t write_num = ( 0x0FFF & std::get< MapObject::TERRAIN_ID >( obj ) ) | wide_type; + uint16_t write_num = + ( 0x0FFF & std::get< MapObject::TERRAIN_ID >( obj ) ) | + wide_type; // character type can be 0 (overworld), modifier data can be 0 - if ( std::get< MapObject::CHARACTER_ID >( obj ) || std::get< MapObject::MODIFIER_TYPE >( obj ) ) { + if ( std::get< MapObject::CHARACTER_ID >( obj ) || + std::get< MapObject::MODIFIER_TYPE >( obj ) ) { write_num |= 0x8000; } output_file.write( ( char * )&write_num, sizeof( uint16_t ) / sizeof( char ) ); uint8_t additional_data = 0; if ( std::get< MapObject::CHARACTER_ID >( obj ) ) { - additional_data |= std::get< MapObject::CHARACTER_TYPE >( obj ) << 4; + additional_data |= std::get< MapObject::CHARACTER_TYPE >( obj ) + << 4; additional_data |= std::get< MapObject::CHARACTER_ID >( obj ); } else if ( std::get< MapObject::MODIFIER_TYPE >( obj ) ) { std::cout << "SAVING MODIFIERS!" << std::endl; - additional_data |= std::get< MapObject::MODIFIER_TYPE >( obj ) << 4; + additional_data |= std::get< MapObject::MODIFIER_TYPE >( obj ) + << 4; additional_data |= 0x80; additional_data |= std::get< MapObject::MODIFIER_DATA >( obj ); } diff --git a/mario/maploader.hpp b/mario/maploader.hpp index 31f533d..9b13b01 100644 --- a/mario/maploader.hpp +++ b/mario/maploader.hpp @@ -23,7 +23,9 @@ 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, const std::string &file, +void loadMap( std::shared_ptr< SDLPP::Scene > &scene, + std::shared_ptr< SDLPP::RenderObject > &mario, + const std::string &file, std::shared_ptr< SDLPP::Renderer > &renderer, std::vector< mapColumnType > &objects ); void saveMap( const std::string &file, std::vector< mapColumnType > &objects );