Make everything work

This commit is contained in:
NaiJi ✨ 2020-03-16 22:27:34 +03:00
parent 9c4914b16b
commit 256db75f37
6 changed files with 82 additions and 17 deletions

Binary file not shown.

8
build-debug/test_map Normal file
View File

@ -0,0 +1,8 @@
size
5 5
map
0 0 0 0 0
0 0 1 0 0
0 0 1 1 0
1 1 2 2 2
0 0 0 0 0

View File

@ -19,7 +19,7 @@ sf::Color Cell::color() const noexcept
return cell_color; return cell_color;
} }
void Cell::setHeight(coordinate shift_by_y) void Cell::setHeightShift(coordinate shift_by_y)
{ {
height_shift = shift_by_y; height_shift = shift_by_y;
} }
@ -46,6 +46,11 @@ bool PassableCell::onMovingTo(HeroPtr &hero, LevelPtr &level)
return true; return true;
} }
CellPtr PassableCell::getDefaultInstance() const
{
return std::make_unique<PassableCell>();
}
/////////////////////////////////////// ///////////////////////////////////////
WaterCell::WaterCell(coordinate cell_row, coordinate cell_col, const sf::Color &color) : WaterCell::WaterCell(coordinate cell_row, coordinate cell_col, const sf::Color &color) :
@ -64,12 +69,19 @@ bool WaterCell::onMovingTo(HeroPtr &hero, LevelPtr &level)
return false; return false;
} }
CellPtr WaterCell::getDefaultInstance() const
{
return std::make_unique<WaterCell>();
}
/////////////////////////////////////// ///////////////////////////////////////
WallCell::WallCell(coordinate cell_row, coordinate cell_col, const sf::Color &color) : WallCell::WallCell(coordinate cell_row, coordinate cell_col, const sf::Color &color) :
Cell(cell_row, cell_col, color), Cell(cell_row, cell_col, color)
height_shift(10) // walls are a bit higher than ground and water {
{} // walls are a bit higher than ground and water
height_shift = 10;
}
WallCell::~WallCell() WallCell::~WallCell()
{} {}
@ -82,13 +94,19 @@ bool WallCell::onMovingTo(HeroPtr &hero, LevelPtr &level)
return false; return false;
} }
CellPtr WallCell::getDefaultInstance() const
{
return std::make_unique<WallCell>();
}
/////////////////////////////////////// ///////////////////////////////////////
ChargeCell::ChargeCell(coordinate cell_row, coordinate cell_col, int has_charges, const sf::Color &color) : ChargeCell::ChargeCell(coordinate cell_row, coordinate cell_col, int has_charges, const sf::Color &color) :
Cell(cell_row, cell_col, color), Cell(cell_row, cell_col, color),
cell_charges(has_charges), cell_charges(has_charges)
height_shift(5) // charges are a bit higher than ground and water, but lower than walls {
{} height_shift = 5; // charges are a bit higher than ground and water, but lower than walls
}
ChargeCell::~ChargeCell() ChargeCell::~ChargeCell()
{} {}
@ -102,6 +120,11 @@ bool ChargeCell::onMovingTo(HeroPtr &hero, LevelPtr &level)
return true; return true;
} }
CellPtr ChargeCell::getDefaultInstance() const
{
return std::make_unique<ChargeCell>();
}
/////////////////////////////////////// ///////////////////////////////////////
ExitCell::ExitCell(coordinate cell_row, coordinate cell_col, const sf::Color &color) : ExitCell::ExitCell(coordinate cell_row, coordinate cell_col, const sf::Color &color) :
@ -120,6 +143,11 @@ bool ExitCell::onMovingTo(HeroPtr &hero, LevelPtr &level)
return true; return true;
} }
CellPtr ExitCell::getDefaultInstance() const
{
return std::make_unique<ExitCell>();
}
/////////////////////////////////////// ///////////////////////////////////////
TeleportCell::TeleportCell(coordinate cell_row, coordinate cell_col, coordinate new_cell_row, coordinate new_cell_col, const sf::Color &color) : TeleportCell::TeleportCell(coordinate cell_row, coordinate cell_col, coordinate new_cell_row, coordinate new_cell_col, const sf::Color &color) :
@ -146,13 +174,21 @@ void TeleportCell::setDestination(coordinate new_cell_row, coordinate new_cell_c
new_col = new_cell_col; new_col = new_cell_col;
} }
CellPtr TeleportCell::getDefaultInstance() const
{
return std::make_unique<TeleportCell>();
}
/////////////////////////////////////// ///////////////////////////////////////
TriggerCell::TriggerCell(/*std::vector<CellPtr> &&cells_to_change,*/ coordinate cell_row, coordinate cell_col, const sf::Color &color) : TriggerCell::TriggerCell(/*std::vector<CellPtr> &&cells_to_change,*/ coordinate cell_row, coordinate cell_col, const sf::Color &color) :
Cell(cell_row, cell_col, color), Cell(cell_row, cell_col, color)
height_shift(5) // triggers are a bit higher than ground and water, but lower than walls
{ {
//cells = std::move(cells_to_change); //cells = std::move(cells_to_change);
// triggers are a bit higher than ground and water, but lower than walls
height_shift = 5;
} }
TriggerCell::~TriggerCell() TriggerCell::~TriggerCell()
@ -177,3 +213,8 @@ bool TriggerCell::onMovingTo(HeroPtr &hero, LevelPtr &level)
// It's an impassable object, so player can't move to here. // It's an impassable object, so player can't move to here.
return false; return false;
} }
CellPtr TriggerCell::getDefaultInstance() const
{
return std::make_unique<TriggerCell>();
}

View File

@ -18,7 +18,7 @@ const sf::Color Green = sf::Color( 0, 255, 0);
const sf::Color Red = sf::Color(250, 0, 0); const sf::Color Red = sf::Color(250, 0, 0);
const sf::Color Purple = sf::Color(128, 0, 128); const sf::Color Purple = sf::Color(128, 0, 128);
const sf::Color Pink = sf::Color(255, 192, 203); const sf::Color Pink = sf::Color(255, 192, 203);
const sf::Color Black = sf::Color( 0, 0, 0);
} }
enum CELL_TYPES { enum CELL_TYPES {
@ -41,7 +41,7 @@ class Cell;
using HeroPtr = std::unique_ptr<Hero>; using HeroPtr = std::unique_ptr<Hero>;
using LevelPtr = std::unique_ptr<Level>; using LevelPtr = std::unique_ptr<Level>;
using CellPtr = std::unique_ptr<Cell> using CellPtr = std::unique_ptr<Cell>;
/////////////////////////////////////// ///////////////////////////////////////
@ -68,6 +68,8 @@ public:
/// Determine if Hero can move onto this cell or not /// Determine if Hero can move onto this cell or not
virtual bool onMovingTo(HeroPtr &hero, LevelPtr &level) = 0; virtual bool onMovingTo(HeroPtr &hero, LevelPtr &level) = 0;
virtual CellPtr getDefaultInstance() const = 0;
}; };
/////////////////////////////////////// ///////////////////////////////////////
@ -83,6 +85,8 @@ public:
virtual ~PassableCell() override; virtual ~PassableCell() override;
virtual bool onMovingTo(HeroPtr &hero, LevelPtr &level) override; virtual bool onMovingTo(HeroPtr &hero, LevelPtr &level) override;
virtual CellPtr getDefaultInstance() const override;
}; };
/////////////////////////////////////// ///////////////////////////////////////
@ -98,6 +102,8 @@ public:
virtual ~WaterCell() override; virtual ~WaterCell() override;
virtual bool onMovingTo(HeroPtr &hero, LevelPtr &level) override; virtual bool onMovingTo(HeroPtr &hero, LevelPtr &level) override;
virtual CellPtr getDefaultInstance() const override;
}; };
/////////////////////////////////////// ///////////////////////////////////////
@ -113,6 +119,8 @@ public:
virtual ~WallCell() override; virtual ~WallCell() override;
virtual bool onMovingTo(HeroPtr &hero, LevelPtr &level) override; virtual bool onMovingTo(HeroPtr &hero, LevelPtr &level) override;
virtual CellPtr getDefaultInstance() const override;
}; };
/////////////////////////////////////// ///////////////////////////////////////
@ -132,6 +140,8 @@ public:
virtual ~ChargeCell() override; virtual ~ChargeCell() override;
virtual bool onMovingTo(HeroPtr &hero, LevelPtr &level) override; virtual bool onMovingTo(HeroPtr &hero, LevelPtr &level) override;
virtual CellPtr getDefaultInstance() const override;
}; };
/////////////////////////////////////// ///////////////////////////////////////
@ -147,6 +157,8 @@ public:
virtual ~ExitCell() override; virtual ~ExitCell() override;
virtual bool onMovingTo(HeroPtr &hero, LevelPtr &level) override; virtual bool onMovingTo(HeroPtr &hero, LevelPtr &level) override;
virtual CellPtr getDefaultInstance() const override;
}; };
/////////////////////////////////////// ///////////////////////////////////////
@ -169,6 +181,8 @@ public:
void setDestination(coordinate new_cell_row, coordinate new_cell_col); void setDestination(coordinate new_cell_row, coordinate new_cell_col);
virtual bool onMovingTo(HeroPtr &hero, LevelPtr &level) override; virtual bool onMovingTo(HeroPtr &hero, LevelPtr &level) override;
virtual CellPtr getDefaultInstance() const override;
}; };
/////////////////////////////////////// ///////////////////////////////////////
@ -189,6 +203,8 @@ public:
virtual ~TriggerCell() override; virtual ~TriggerCell() override;
virtual bool onMovingTo(HeroPtr &hero, LevelPtr &level) override; virtual bool onMovingTo(HeroPtr &hero, LevelPtr &level) override;
virtual CellPtr getDefaultInstance() const override;
}; };
#endif // CELL_H #endif // CELL_H

View File

@ -150,7 +150,7 @@ void Game::renderMap()
vertical_shift = static_cast<float>(map[y][x]->heightShift()); vertical_shift = static_cast<float>(map[y][x]->heightShift());
// If cell has any height value, we should draw walls for it // If cell has any height value, we should draw walls for it
if (vertical_shift > 0) /*if (vertical_shift > 0)
{ {
// Brush for vertical walls // Brush for vertical walls
sf::ConvexShape convex_wall_brush; sf::ConvexShape convex_wall_brush;
@ -163,13 +163,13 @@ void Game::renderMap()
convex_wall_brush.setPoint(5, sf::Vector2f(cell_width, cell_height)); convex_wall_brush.setPoint(5, sf::Vector2f(cell_width, cell_height));
convex_wall_brush.setOutlineThickness(0); convex_wall_brush.setOutlineThickness(0);
sf::Color wall_color = convex_wall_brush.getFillColor() - sf::Color(50, 50, 50); sf::Color wall_color = map[y][x]->color();
convex_wall_brush.setFillColor(wall_color); convex_wall_brush.setFillColor(wall_color);
convex_wall_brush.setPosition(painter_x, painter_y); convex_wall_brush.setPosition(painter_x, painter_y);
main_window.draw(convex_wall_brush); main_window.draw(convex_wall_brush);
} }*/
// Draw the top surface of the cell itself // Draw the top surface of the cell itself

View File

@ -22,16 +22,16 @@ void Level::readMap(std::ifstream &file)
for (coordinate k = 0; k < map[j].size(); ++k) for (coordinate k = 0; k < map[j].size(); ++k)
{ {
file >> i; file >> i;
map[j][k].reset(default_cells[i]); map[j][k] = default_cells[i]->getDefaultInstance();
map[j][k]->setPosition(j, k); map[j][k]->setPosition(j, k);
} }
} }
} }
template<typename D, typename B> // [D]erived - [B]ase template<typename D, typename B> // [D]erived - [B]ase
unique_ptr<D> static_unique_pointer_cast (unique_ptr<B>&& old) std::unique_ptr<D> static_unique_pointer_cast (std::unique_ptr<B>&& old)
{ {
return unique_ptr<D>{static_cast<D*>(old.release())}; return std::unique_ptr<D>{static_cast<D*>(old.release())};
} }
Level::Level(const std::string &map_file) Level::Level(const std::string &map_file)