Add more digging logic

This commit is contained in:
Bram Verhulst
2024-03-20 17:10:36 +01:00
parent a165c0bc6f
commit ad847355b5
9 changed files with 134 additions and 46 deletions

View File

@@ -15,14 +15,15 @@ WorldLevel::WorldLevel(Camera* camera, Rectf viewport):
Level(camera),
m_player(Player { Point2f { 0, 100 } }),
m_mousePos { 0, 0 },
m_viewport(viewport)
m_viewport(viewport),
m_gridManager(WorldGridManager())
{
// The grid is 34 x 50 big, the top center is 0,0 in world coords
for (size_t x { 0 }; x < WORLD_WIDTH; ++x) {
for (size_t y { 0 }; y < WORLD_HEIGHT; ++y) {
int actualX = x - WORLD_WIDTH / 2;
Point2f pos = Point2f{ float(actualX * TILE_WIDTH), -float(y * TILE_HEIGHT) - TILE_HEIGHT};
m_worldTiles[x][y] = new WorldTile{ pos, GroundTileTypes::Dirt, TextureManager::GetInstance() };
m_gridManager.SetTileAtIndex(x,y, new WorldTile{ pos, GroundTileTypes::Dirt, TextureManager::GetInstance() });
}
}
@@ -43,8 +44,8 @@ void WorldLevel::Update(float elapsedSec) {
for (size_t x { 0 }; x < WORLD_WIDTH; ++x) {
for (size_t y { 0 }; y < WORLD_HEIGHT; ++y) {
if(m_worldTiles[x][y]->GetCollisionRect().Contains(m_mousePos)) {
selectedTile = m_worldTiles[x][y];
if(m_gridManager.GetTileAtIndex(x,y)->GetCollisionRect().Contains(m_mousePos)) {
selectedTile = m_gridManager.GetTileAtIndex(x,y);
}
}
}
@@ -56,6 +57,11 @@ void WorldLevel::Update(float elapsedSec) {
m_player.Update(elapsedSec, *this);
WorldTile* t = m_gridManager.GetTileAtWorldPos(m_mousePos);
if(t != nullptr) {
t->SetTileType(GroundTileTypes::Air);
}
//Point2f playerPos = m_player.GetPosition();
//Point2f newCameraPos = playerPos;
//m_pCamera->SetPosition(newCameraPos);
@@ -81,15 +87,15 @@ void WorldLevel::Draw() const {
for (size_t x { 0 }; x < WORLD_WIDTH; ++x) {
for (size_t y { 0 }; y < WORLD_HEIGHT; ++y) {
m_worldTiles[x][y]->Draw();
m_gridManager.GetTileAtIndex(x,y)->Draw();
}
}
//loop over worldtiles
for (int x { 0 }; x < WORLD_WIDTH; ++x) {
for (int y { 0 }; y < WORLD_HEIGHT; ++y) {
if(m_worldTiles[x][y]->GetTileType() == GroundTileTypes::Dirt) {
Collision::CollisionRect rect = m_worldTiles[x][y]->GetCollisionRect().getCollisionRect();
if(m_gridManager.GetTileAtIndex(x,y)->GetTileType() == GroundTileTypes::Dirt) {
Collision::CollisionRect rect = m_gridManager.GetTileAtIndex(x,y)->GetCollisionRect().getCollisionRect();
utils::SetColor(Colors::GREEN);
utils::DrawRect(rect.pos, rect.size.x, rect.size.y);
}
@@ -153,16 +159,7 @@ void WorldLevel::ProcessImGui() {
// ImGui::Text("Size: (%f, %f)", contact.second->size.x, contact.second->size.y);
// }
ImGui::End();
}
}
WorldTile* WorldLevel::GetTileAt(const Point2f& pos) const {
return m_worldTiles[pos.x][pos.y];
}
void WorldLevel::SetTileAt(const Point2f& pos, WorldTile* tile) {
}
std::array<std::array<WorldTile*, WorldLevel::WORLD_WIDTH>, WorldLevel::WORLD_HEIGHT> WorldLevel::GetAllTiles() const {
return m_worldTiles;
}