#include "pch.h" #include "WorldTile.h" #include #include "Camera.h" #include "colors.h" #include "../TextureManager.h" #include "utils.h" #include "WorldGridManager.h" WorldTile::WorldTile(const Point2f& position, GroundTileType* groundTileType, TextureManager* pTextureManager, WorldGridManager* pGridManager) : m_Position { position }, m_GroundTileType { groundTileType }, m_pGridManager { pGridManager } { // const std::string dirtPath = + "tiles/dirt/dirt" + std::to_string(utils::randRange(1, 5)) + ".png"; // m_pTexture = new Texture(dirtPath); m_pTexture = pTextureManager->GetTexture(groundTileType->getPath()); m_pBottomLeftTexture = pTextureManager->GetTexture("tiles/dirt/sidepieces/bottomRight.png"); m_pBottomRightTexture = pTextureManager->GetTexture("tiles/dirt/sidepieces/bottomLeft.png"); m_pTopLeftTexture = pTextureManager->GetTexture("tiles/dirt/sidepieces/topRight.png"); m_pTopRightTexture = pTextureManager->GetTexture("tiles/dirt/sidepieces/topLeft.png"); } WorldTile::~WorldTile() { delete m_pTexture; } void WorldTile::Draw() { if (*m_GroundTileType != Tiles::AIR) { m_pTexture->Draw(m_Position); if (m_Hightlight) { utils::SetColor(Colors::GREEN); utils::FillRect(m_Position, 50, 50); } } if(m_Hightlight) { for (int i = 0; i < 8; i++) { WorldTile* tile = m_SurroundingTiles.GetTile(static_cast(i)); if(tile != nullptr) { //Tile exists //TODO: Wow Big mess GroundTileTypes type = tile->GetTileType()->getType(); if(type == Tiles::AIR->getType()) { utils::SetColor(Colors::BLACK); utils::FillRect(Rectf{tile->GetPosition(), Point2f{50,50}}); continue; } if(type != Tiles::AIR->getType()) { utils::SetColor(Colors::YELLOW); utils::FillRect(Rectf{tile->GetPosition(), Point2f{50,50}}); } } } } //Tile is air, So check 8 tiles around // Check the 4 tiles diagonally // m_SurroundingTiles = m_pGridManager->GetSurroundingTiles(this); // // //check if all tiles are air // bool allAir = true; // for (int i = 0; i < 8; i++) { // WorldTile* tile = m_SurroundingTiles.GetTile(static_cast(i)); // if(tile != nullptr) { //Tile exists // if(tile->GetTileType() != Tiles::AIR) { // allAir = false; // break; // } // } // } // if (allAir) { // return; // } // // WorldTile* topLeft = m_SurroundingTiles.GetTile(TileDirection::TopLeft); //TODO: ask if draw needs to be const // GroundTileType* topLeftType = topLeft != nullptr ? topLeft->GetTileType() : Tiles::AIR; // if(topLeftType != Tiles::AIR) { // m_pTopLeftTexture->Draw(m_Position); // utils::SetColor(Colors::YELLOW); // utils::FillRect(Rectf{topLeft->GetPosition(), Point2f{50,50}}); // } // // WorldTile* topRight = m_SurroundingTiles.GetTile(TileDirection::TopRight); // GroundTileType* topRightType = topRight != nullptr ? topRight->GetTileType() : Tiles::AIR; // if(topRightType != Tiles::AIR) { // m_pTopRightTexture->Draw(m_Position); // } // } void WorldTile::Update(Camera* camera) { Point2f CurrentIndex = m_pGridManager->GetIndexFromPosition(m_Position); m_SurroundingTiles = m_pGridManager->GetSurroundingTiles(this); Point2f mousePos = camera->TransformMouse(Point2f{utils::GetMousePos().x, 500 - utils::GetMousePos().y}); m_Hightlight = utils::IsPointInRect(mousePos, Rectf{GetCollisionRect().pos, GetCollisionRect().size}); if(CurrentIndex.x == 1 && CurrentIndex.y == 1) { std::cout << "Hey" << std::endl; } } Collision::TileCollisionRect WorldTile::GetCollisionRect() { return Collision::TileCollisionRect { m_Position, GetSize(), ( this ) }; }