Mario: set mario pointer when loading map for editor

This commit is contained in:
zvon 2021-05-26 14:18:39 +02:00
parent 19c29b261c
commit d2bc497070
3 changed files with 28 additions and 15 deletions

View File

@ -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++ ) {

View File

@ -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<MarioBlock*>(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 );
}

View File

@ -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 );