Mario: added destructible modifier to editor
This commit is contained in:
+22
-11
@@ -5,6 +5,7 @@
|
||||
#include "sprites.hpp"
|
||||
#include "blocks.hpp"
|
||||
#include "objectids.hpp"
|
||||
#include "global_vars.hpp"
|
||||
|
||||
// TODO move to one function
|
||||
void loadMap( std::shared_ptr< SDLPP::Scene > &scene,
|
||||
@@ -45,6 +46,10 @@ 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) {
|
||||
destructible = true;
|
||||
}
|
||||
// TODO add modifiers to createTerrainBlock
|
||||
auto obj =
|
||||
createTerrainBlock( id, static_cast< LandType::Value >( type ),
|
||||
@@ -112,6 +117,12 @@ void loadMap( std::shared_ptr< SDLPP::Scene > &scene, const std::string &file,
|
||||
renderer, i, j ) );
|
||||
}
|
||||
}
|
||||
if ( modifier_type ) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( objects.size() < 18 ) {
|
||||
@@ -129,24 +140,24 @@ void saveMap( const std::string &file, std::vector< mapColumnType > &objects ) {
|
||||
for ( auto &col : objects ) {
|
||||
for ( int i = 0; i < 16; i++ ) {
|
||||
auto &obj = col[i];
|
||||
uint16_t wide_type = std::get< 0 >( obj );
|
||||
uint16_t wide_type = std::get< MapObject::TERRAIN_TYPE >( obj );
|
||||
wide_type = wide_type << 12;
|
||||
uint16_t write_num = ( 0x0FFF & std::get< 1 >( obj ) ) | wide_type;
|
||||
// 3 becuase character type can be 0 (overworld), 4 because modifier
|
||||
// data can be 0 (breakable)
|
||||
if ( std::get< 3 >( obj ) || std::get< 4 >( obj ) ) {
|
||||
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 ) ) {
|
||||
write_num |= 0x8000;
|
||||
}
|
||||
output_file.write( ( char * )&write_num,
|
||||
sizeof( uint16_t ) / sizeof( char ) );
|
||||
uint8_t additional_data = 0;
|
||||
if ( std::get< 3 >( obj ) ) {
|
||||
additional_data |= std::get< 2 >( obj ) << 4;
|
||||
additional_data |= std::get< 3 >( obj );
|
||||
} else if ( std::get< 4 >( obj ) ) {
|
||||
additional_data |= std::get< 4 >( obj ) << 4;
|
||||
if ( std::get< MapObject::CHARACTER_ID >( obj ) ) {
|
||||
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 |= 0x80;
|
||||
additional_data |= std::get< 5 >( obj );
|
||||
additional_data |= std::get< MapObject::MODIFIER_DATA >( obj );
|
||||
}
|
||||
if ( additional_data ) {
|
||||
output_file.write( ( char * )&additional_data,
|
||||
|
||||
Reference in New Issue
Block a user