Remove redundant functions from blocks.cpp, fix editor problem with pagination
This commit is contained in:
+12
-182
@@ -1,5 +1,4 @@
|
||||
#include "blocks.hpp"
|
||||
#include "blocks/coinblock.hpp"
|
||||
#include "global_vars.hpp"
|
||||
#include "objectids.hpp"
|
||||
#include "sprites.hpp"
|
||||
@@ -7,7 +6,7 @@
|
||||
#include <unordered_map>
|
||||
#include "mario_visitor.hpp"
|
||||
#include "blocks/simpleblocks.hpp"
|
||||
#include "blocks/coinblock.hpp"
|
||||
#include "blocks/coineditorblock.hpp"
|
||||
#include "mario.hpp"
|
||||
|
||||
#define CAN_BE_DESTROYED_FLAG 0x0000000000000001
|
||||
@@ -24,6 +23,7 @@ MarioBlock::MarioBlock( int x, int y,
|
||||
setMovementSpeed( 1 );
|
||||
_coins = 0;
|
||||
_mushroom = false;
|
||||
_base_src = src;
|
||||
}
|
||||
void MarioBlock::visit( SDLPP::Visitor &visitor ) {
|
||||
#ifdef EDITOR
|
||||
@@ -128,7 +128,7 @@ void MarioBlock::ensureCollision() {
|
||||
}
|
||||
}
|
||||
void MarioBlock::setWorldTypeSrc( LandType::Value world ) {
|
||||
auto rect = getTextureSourceRect();
|
||||
auto rect = _base_src;
|
||||
switch ( world ) {
|
||||
case LandType::OVERWORLD:
|
||||
rect.x += OVERWORLD_SHIFT.getX();
|
||||
@@ -226,151 +226,6 @@ const std::vector< LandType::Value > possibleLands = {
|
||||
LandType::OVERWORLD, LandType::UNDERWORLD, LandType::WATER, LandType::BOWSER
|
||||
};
|
||||
|
||||
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 },
|
||||
{ PIPE_LEFT_BOTTOM_ID, &PIPE_LEFT_BOTTOM_SRC },
|
||||
{ PIPE_LEFT_TOP_ID, &PIPE_LEFT_TOP_SRC },
|
||||
{ PIPE_RIGHT_BOTTOM_ID, &PIPE_RIGHT_BOTTOM_SRC },
|
||||
{ PIPE_RIGHT_TOP_ID, &PIPE_RIGHT_TOP_SRC },
|
||||
{ CASTLE_LEFT_ID, &CASTLE_LEFT_SRC },
|
||||
{ CASTLE_RIGHT_ID, &CASTLE_RIGHT_SRC },
|
||||
{ CASTLE_BLACK_ID, &CASTLE_BLACK_SRC },
|
||||
{ CASTLE_ENTRY_ID, &CASTLE_ENTRY_SRC },
|
||||
{ CASTLE_TOWER_ID, &CASTLE_TOWER_SRC },
|
||||
{ CASTLE_TOWER_FILLED_ID, &CASTLE_TOWER_FILLED_SRC },
|
||||
{ VINE_TOP_ID, &VINE_TOP_SRC },
|
||||
{ VINE_BOTTOM_ID, &VINE_BOTTOM_SRC },
|
||||
{ POLE_TOP_ID, &POLE_TOP_SRC },
|
||||
{ POLE_BOTTOM_ID, &POLE_BOTTOM_SRC },
|
||||
{ FLAG_ID, &FLAG_SRC },
|
||||
{ STEP_ID, &STEP_SRC },
|
||||
{ BRICK_ID, &BRICK_SRC },
|
||||
{ BRICK_TOP_ID, &BRICK_TOP_SRC },
|
||||
{ SIDEWAY_PIPE_END_TOP_ID, &SIDEWAY_PIPE_END_TOP_SRC },
|
||||
{ SIDEWAY_PIPE_END_BOTTOM_ID, &SIDEWAY_PIPE_END_BOTTOM_SRC },
|
||||
{ SIDEWAY_PIPE_MIDDLE_TOP_ID, &SIDEWAY_PIPE_MIDDLE_TOP_SRC },
|
||||
{ SIDEWAY_PIPE_MIDDLE_BOTTOM_ID, &SIDEWAY_PIPE_MIDDLE_BOTTOM_SRC },
|
||||
{ SIDEWAY_PIPE_CONNECTOR_TOP_ID, &SIDEWAY_PIPE_CONNECTOR_TOP_SRC },
|
||||
{ SIDEWAY_PIPE_CONNECTOR_BOTTOM_ID, &SIDEWAY_PIPE_CONNECTOR_BOTTOM_SRC },
|
||||
{ TREE_PLATFORM_TOP_LEFT_ID, &TREE_PLATFORM_TOP_LEFT_SRC },
|
||||
{ TREE_PLATFORM_TOP_MIDDLE_ID, &TREE_PLATFORM_TOP_MIDDLE_SRC },
|
||||
{ TREE_PLATFORM_TOP_RIGHT_ID, &TREE_PLATFORM_TOP_RIGHT_SRC },
|
||||
{ TREE_PLATFORM_BARK_ID, &TREE_PLATFORM_BARK_SRC },
|
||||
{ WATER_TOP_ID, &WATER_TOP_SRC },
|
||||
{ WATER_FILL_ID, &WATER_FILL_SRC },
|
||||
{ MUSHROOM_PLATFORM_TOP_LEFT_ID, &MUSHROOM_PLATFORM_TOP_LEFT_SRC },
|
||||
{ MUSHROOM_PLATFORM_TOP_MIDDLE_ID, &MUSHROOM_PLATFORM_TOP_MIDDLE_SRC },
|
||||
{ MUSHROOM_PLATFORM_TOP_RIGHT_ID, &MUSHROOM_PLATFORM_TOP_RIGHT_SRC },
|
||||
{ MUSHROOM_PLATFORM_BARK_TOP_ID, &MUSHROOM_PLATFORM_BARK_TOP_SRC },
|
||||
{ MUSHROOM_PLATFORM_BARK_BOTTOM_ID, &MUSHROOM_PLATFORM_BARK_BOTTOM_SRC },
|
||||
{ TREE_BARK_ID, &TREE_BARK_SRC },
|
||||
{ TREE_LEAVES_SMALL_ID, &TREE_LEAVES_SMALL_SRC },
|
||||
{ TREE_LEAVES_TOP_ID, &TREE_LEAVES_TOP_SRC },
|
||||
{ TREE_LEAVES_BOTTOM_ID, &TREE_LEAVES_BOTTOM_SRC },
|
||||
{ CANNON_TOWER_ID, &CANNON_TOWER_SRC },
|
||||
{ CANNON_PEDESTAL_ID, &CANNON_PEDESTAL_SRC },
|
||||
{ CANNON_ID, &CANNON_SRC },
|
||||
{ MARIO_ID, &MARIO_STANDING_SRC },
|
||||
{ DESTRUCTIBLE_MODIFIER_ID, &MOD_DESTRUCTIBLE_SRC },
|
||||
{ BACKGROUND_MODIFIER_ID, &MOD_BACKGROUND_SRC },
|
||||
{ COIN_MODIFIER_ID, &MOD_COIN_SRC },
|
||||
{ MUSHROOM_MODIFIER_ID, &MOD_MUSHROOM_SRC },
|
||||
};
|
||||
|
||||
const std::unordered_map< uint64_t, uint64_t > block_flags = {
|
||||
{ FLOOR_ID, CAN_BE_DESTROYED_FLAG | HAS_COLLISION },
|
||||
{ HILL_INCLINE_ID, 0 },
|
||||
{ HILL_DECLINE_ID, 0 },
|
||||
{ HILL_DOTS_RIGHT_ID, 0 },
|
||||
{ HILL_DOTS_LEFT_ID, 0 },
|
||||
{ HILL_FILL_ID, 0 },
|
||||
{ HILL_TOP_ID, 0 },
|
||||
{ BUSH_LEFT_ID, 0 },
|
||||
{ BUSH_MIDDLE_ID, 0 },
|
||||
{ BUSH_RIGHT_ID, 0 },
|
||||
{ CLOUD_LEFT_BOTTOM_ID, 0 },
|
||||
{ CLOUD_MIDDLE_BOTTOM_ID, 0 },
|
||||
{ CLOUD_RIGHT_BOTTOM_ID, 0 },
|
||||
{ CLOUD_LEFT_TOP_ID, 0 },
|
||||
{ CLOUD_MIDDLE_TOP_ID, 0 },
|
||||
{ CLOUD_RIGHT_TOP_ID, 0 },
|
||||
{ PIPE_LEFT_BOTTOM_ID, HAS_COLLISION },
|
||||
{ PIPE_LEFT_TOP_ID, HAS_COLLISION },
|
||||
{ PIPE_RIGHT_BOTTOM_ID, HAS_COLLISION },
|
||||
{ PIPE_RIGHT_TOP_ID, HAS_COLLISION },
|
||||
{ CASTLE_LEFT_ID, 0 },
|
||||
{ CASTLE_RIGHT_ID, 0 },
|
||||
{ CASTLE_BLACK_ID, 0 },
|
||||
{ CASTLE_ENTRY_ID, 0 },
|
||||
{ CASTLE_TOWER_ID, 0 },
|
||||
{ CASTLE_TOWER_FILLED_ID, 0 },
|
||||
{ VINE_TOP_ID, HAS_COLLISION },
|
||||
{ VINE_BOTTOM_ID, HAS_COLLISION },
|
||||
{ POLE_TOP_ID, HAS_COLLISION },
|
||||
{ POLE_BOTTOM_ID, HAS_COLLISION },
|
||||
{ FLAG_ID, 0 },
|
||||
{ STEP_ID, CAN_BE_DESTROYED_FLAG | HAS_COLLISION },
|
||||
{ BRICK_ID, CAN_BE_DESTROYED_FLAG | HAS_COLLISION },
|
||||
{ BRICK_TOP_ID, CAN_BE_DESTROYED_FLAG | HAS_COLLISION },
|
||||
{ SIDEWAY_PIPE_END_TOP_ID, HAS_COLLISION },
|
||||
{ SIDEWAY_PIPE_END_BOTTOM_ID, HAS_COLLISION },
|
||||
{ SIDEWAY_PIPE_MIDDLE_TOP_ID, HAS_COLLISION },
|
||||
{ SIDEWAY_PIPE_MIDDLE_BOTTOM_ID, HAS_COLLISION },
|
||||
{ SIDEWAY_PIPE_CONNECTOR_TOP_ID, HAS_COLLISION },
|
||||
{ SIDEWAY_PIPE_CONNECTOR_BOTTOM_ID, HAS_COLLISION },
|
||||
{ TREE_PLATFORM_TOP_LEFT_ID, HAS_COLLISION },
|
||||
{ TREE_PLATFORM_TOP_MIDDLE_ID, HAS_COLLISION },
|
||||
{ TREE_PLATFORM_TOP_RIGHT_ID, HAS_COLLISION },
|
||||
{ TREE_PLATFORM_BARK_ID, HAS_COLLISION },
|
||||
{ WATER_TOP_ID, HAS_COLLISION },
|
||||
{ WATER_FILL_ID, HAS_COLLISION },
|
||||
{ MUSHROOM_PLATFORM_TOP_LEFT_ID, HAS_COLLISION },
|
||||
{ MUSHROOM_PLATFORM_TOP_MIDDLE_ID, HAS_COLLISION },
|
||||
{ MUSHROOM_PLATFORM_TOP_RIGHT_ID, HAS_COLLISION },
|
||||
{ MUSHROOM_PLATFORM_BARK_TOP_ID, HAS_COLLISION },
|
||||
{ MUSHROOM_PLATFORM_BARK_BOTTOM_ID, HAS_COLLISION },
|
||||
{ TREE_BARK_ID, HAS_COLLISION },
|
||||
{ TREE_LEAVES_SMALL_ID, HAS_COLLISION },
|
||||
{ TREE_LEAVES_TOP_ID, HAS_COLLISION },
|
||||
{ TREE_LEAVES_BOTTOM_ID, HAS_COLLISION },
|
||||
{ CANNON_TOWER_ID, HAS_COLLISION },
|
||||
{ CANNON_PEDESTAL_ID, HAS_COLLISION },
|
||||
{ CANNON_ID, HAS_COLLISION },
|
||||
{ MARIO_ID, 0 },
|
||||
{ DESTRUCTIBLE_MODIFIER_ID, 0 },
|
||||
{ BACKGROUND_MODIFIER_ID, 0 },
|
||||
};
|
||||
|
||||
bool blockCanBeDestroyed( uint64_t id ) {
|
||||
auto it = block_flags.find( id );
|
||||
if ( it == block_flags.end() )
|
||||
return false;
|
||||
return it->second & CAN_BE_DESTROYED_FLAG;
|
||||
}
|
||||
|
||||
bool blockHasCollision( uint64_t id ) {
|
||||
auto it = block_flags.find( id );
|
||||
if ( it == block_flags.end() ) {
|
||||
return false;
|
||||
}
|
||||
return it->second & HAS_COLLISION;
|
||||
}
|
||||
|
||||
std::shared_ptr< MarioBlock >
|
||||
createBlockById( uint64_t id, int x, int y,
|
||||
std::shared_ptr< SDLPP::Renderer > &renderer ) {
|
||||
@@ -618,23 +473,23 @@ createBlockById( uint64_t id, int x, int y,
|
||||
break;
|
||||
case MARIO_ID:
|
||||
result = std::static_pointer_cast< MarioBlock >(
|
||||
std::make_shared<Mario>(x,y,renderer));
|
||||
std::make_shared< Mario >( x, y, renderer ) );
|
||||
break;
|
||||
case DESTRUCTIBLE_MODIFIER_ID:
|
||||
result = std::static_pointer_cast< MarioBlock >(
|
||||
std::make_shared<DestructibleModifierBlock>(x,y,renderer));
|
||||
std::make_shared< DestructibleModifierBlock >( x, y, renderer ) );
|
||||
break;
|
||||
case BACKGROUND_MODIFIER_ID:
|
||||
result = std::static_pointer_cast< MarioBlock >(
|
||||
std::make_shared<BackgroundModifierBlock>(x,y,renderer));
|
||||
std::make_shared< BackgroundModifierBlock >( x, y, renderer ) );
|
||||
break;
|
||||
case COIN_MODIFIER_ID:
|
||||
result = std::static_pointer_cast< MarioBlock >(
|
||||
std::make_shared<CoinEditorBlock>(x,y,renderer));
|
||||
std::make_shared< CoinEditorBlock >( x, y, renderer ) );
|
||||
break;
|
||||
case MUSHROOM_MODIFIER_ID:
|
||||
result = std::static_pointer_cast< MarioBlock >(
|
||||
std::make_shared<MushroomModifierBlock>(x,y,renderer));
|
||||
std::make_shared< MushroomModifierBlock >( x, y, renderer ) );
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
@@ -645,13 +500,13 @@ createBlock( std::shared_ptr< SDLPP::Renderer > &renderer, int x, int y,
|
||||
uint64_t id, LandType::Value land_type, bool destructible,
|
||||
bool editor ) {
|
||||
auto block = createBlockById( id, x, y, renderer );
|
||||
if(block == nullptr) {
|
||||
if ( block == nullptr ) {
|
||||
return nullptr;
|
||||
}
|
||||
block->setAlignment( SDLPP::OBJ_CENTER, SDLPP::OBJ_CENTER );
|
||||
block->setStatic();
|
||||
block->setType( land_type );
|
||||
if(destructible) {
|
||||
if ( destructible ) {
|
||||
block->setDestructible();
|
||||
}
|
||||
if ( editor ) {
|
||||
@@ -660,31 +515,6 @@ createBlock( std::shared_ptr< SDLPP::Renderer > &renderer, int x, int y,
|
||||
return block;
|
||||
}
|
||||
|
||||
SDL_Rect getSourceRectByID( uint64_t id, LandType::Value type ) {
|
||||
auto mapping = block_mapping.find( id );
|
||||
if ( mapping == block_mapping.end() )
|
||||
return {};
|
||||
SDL_Rect ret_src = *mapping->second;
|
||||
switch ( type ) {
|
||||
case LandType::OVERWORLD:
|
||||
ret_src.x += OVERWORLD_SHIFT.getX();
|
||||
ret_src.y += OVERWORLD_SHIFT.getY();
|
||||
break;
|
||||
case LandType::UNDERWORLD:
|
||||
ret_src.x += UNDERWORLD_SHIFT.getX();
|
||||
ret_src.y += UNDERWORLD_SHIFT.getY();
|
||||
break;
|
||||
case LandType::WATER:
|
||||
ret_src.x += WATER_SHIFT.getX();
|
||||
ret_src.y += WATER_SHIFT.getY();
|
||||
break;
|
||||
case LandType::BOWSER:
|
||||
ret_src.x += BOWSER_SHIFT.getX();
|
||||
ret_src.y += BOWSER_SHIFT.getY();
|
||||
break;
|
||||
}
|
||||
return ret_src;
|
||||
}
|
||||
// TODO coin count
|
||||
std::shared_ptr< MarioBlock >
|
||||
createTerrainBlock( uint64_t block_id, LandType::Value type,
|
||||
@@ -705,8 +535,8 @@ std::shared_ptr< MarioBlock >
|
||||
createMario( LandType::Value type, std::shared_ptr< SDLPP::Renderer > &renderer,
|
||||
int x, int y, bool editor ) {
|
||||
// TODO add type additions
|
||||
auto mario = createBlock(renderer, x, y, MARIO_ID, type, false, true);
|
||||
if(editor) {
|
||||
auto mario = createBlock( renderer, x, y, MARIO_ID, type, false, true );
|
||||
if ( editor ) {
|
||||
mario->setTerrain( false );
|
||||
mario->removeCollisions();
|
||||
mario->ensureCollision();
|
||||
|
||||
Reference in New Issue
Block a user