Skip to content
Snippets Groups Projects

Merge the refactoring + box2d movement

4 files
+ 57
37
Compare changes
  • Side-by-side
  • Inline

Files

+ 19
18
@@ -56,22 +56,22 @@ Level::Level(const std::string& path, Engine& engine)
// if level is smaler than 20x20 surround with water tiles
if (m_width < 20 || m_height < 20)
{
int w_start = (20 - m_width) / 2;
int h_start = (20 - m_height) / 2;
int x_start = (20 - width) / 2;
int y_start = (20 - height) / 2;
std::vector<uint8_t> transformed_tiles_array;
transformed_tiles_array.reserve(20 * 20);
for (int y = 0; y < 20; y++)
{
for (int x = 0; x < 20; x++)
{
if (x < w_start || y < h_start || x >= w_start + m_width || y >= h_start + m_height)
if (x < x_start || y < y_start || x >= x_start + width || y >= y_start + height)
{
transformed_tiles_array.push_back(1);
}
else
{
transformed_tiles_array.push_back(
level_tilesarray[x - w_start + (y - h_start) * m_width]);
level_tilesarray[x - x_start + (y - y_start) * width]);
}
}
}
@@ -87,30 +87,31 @@ Level::Level(const std::string& path, Engine& engine)
std::vector<Building> buildings;
tiles.reserve(m_width * m_height);
bool has_factions[] = {false, false, false, false, false};
for (int i = 0; i < level_tilesarray.size(); i++)
for (size_t i = 0; i < level_tilesarray.size(); i++)
{
int tileX = i % m_width;
int tileY = i / m_width;
if (level_tilesarray[i] >= 50)
{
tiles.push_back(Tile(TileId(TileId::PLAIN), tileX, tileY));
BuildingId building_id = static_cast<BuildingId>((level_tilesarray[i] - 50) % 5);
Faction factionId = static_cast<Faction>((level_tilesarray[i] - 50) / 5);
// tile id >= 50 -> building -> have to add Plain Tile and Building
tiles.push_back(Tile(TileId(TileId::PLAIN), x, y));
BuildingId building_id = static_cast<BuildingId>((level_tilesarray[i] - 50) % 5);
BuildingFaction faction_id =
static_cast<BuildingFaction>((level_tilesarray[i] - 50) / 5);
if (building_id == BuildingId::HEADQUARTER)
{
int index = static_cast<int>(factionId);
if (!has_factions[index])
{
addUnit(
tileX, tileY, factionId, UnitTypeId::INFANTERY, UnitState::UNAVAILABLE,
engine.getUnitConfig());
}
has_factions[static_cast<int>(factionId)] = true;
// an infantery unit should be added onto every HQ
units.push_back(Unit(
x, y, static_cast<UnitFaction>(faction_id), UnitId::INFANTERY,
UnitState::UNAVAILABLE, engine.getUnitConfig()));
has_factions[static_cast<int>(faction_id)] = true; // collect existing factions
// for later building turnQ
}
buildings.push_back(Building(tileX, tileY, building_id, factionId));
}
else
{
// if tile id belongs to terrain tile, just a tile needs to added
TileId tile_id = static_cast<TileId>(level_tilesarray[i]);
tiles.push_back(Tile(tile_id, tileX, tileY));
}
@@ -141,8 +142,8 @@ Level::Level(const std::string& path, Engine& engine)
m_turnQ = turnQ;
m_turnQ.front().startTurn(m_units, m_buildings);
std::cout << "exiting" << "\n";
level.m_turnQ.front().startTurn(level.m_units, level.m_buildings);
return std::make_shared<Level>(level);
}
std::pair<int, int> Level::calcTilePos(int mouseX, int mouseY)
Loading