#include "pch.h" #include "GroundTile.h" #include "Item.h" #include "Texture.h" int GroundTile::m_Count{ 0 }; const int GroundTile::m_VariationsX{ 4 }; const int GroundTile::m_VariationsY{ 2 }; Texture* GroundTile::m_pTexture{ nullptr }; GroundTile::GroundTile(int x, int y, int itemType) : Tile(x, y, itemType) , m_Variation { m_Count } { if (m_pTexture == nullptr) { m_pTexture = new Texture{ "Resources/Sprites/ground_tiles.png" }; } m_Count++; } GroundTile::~GroundTile() { m_Count--; if (m_Count == 0) { delete m_pTexture; m_pTexture = nullptr; } } void GroundTile::Init(Tile* pTiles[], int xTiles, int yTiles) { UpdateBorder(pTiles, xTiles, yTiles); } void GroundTile::UpdateBorder(Tile* pTiles[], int xTiles, int yTiles) { //top if (m_Y < (yTiles - 1)) { if ((pTiles[utils::GetIdx(m_X, m_Y + 1, xTiles)] != nullptr) && (dynamic_cast(pTiles[utils::GetIdx(m_X, m_Y + 1, xTiles)]) != nullptr)) { SetBorder(Direction::UP, false); } else { SetBorder(Direction::UP, true); } } //bottom if (m_Y > 0) { if ((pTiles[utils::GetIdx(m_X, m_Y - 1, xTiles)] != nullptr) && (dynamic_cast(pTiles[utils::GetIdx(m_X, m_Y - 1, xTiles)]) != nullptr)) { SetBorder(Direction::DOWN, false); } else { SetBorder(Direction::DOWN, true); } } //left if (m_X > 0) { if ((pTiles[utils::GetIdx(m_X - 1, m_Y, xTiles)] != nullptr) && (dynamic_cast(pTiles[utils::GetIdx(m_X - 1, m_Y, xTiles)]) != nullptr)) { SetBorder(Direction::LEFT, false); } else { SetBorder(Direction::LEFT, true); } } //right if (m_X < (xTiles - 1)) { if ((pTiles[utils::GetIdx(m_X + 1, m_Y, xTiles)] != nullptr) && (dynamic_cast(pTiles[utils::GetIdx(m_X + 1, m_Y, xTiles)]) != nullptr)) { SetBorder(Direction::RIGHT, false); } else { SetBorder(Direction::RIGHT, true); } } } void GroundTile::Draw() const { Rectf srcRect{ m_Position.x, m_Position.y, m_Size, m_Size }; //Draw tile m_pTexture->Draw(m_Position, Rectf{ m_Size * (m_Variation % 4), m_Size * (m_Variation % 2), m_Size, m_Size }); } void GroundTile::DrawBorder() const { if (m_DrawBorder[int(Direction::UP)]) m_pTexture->Draw(Point2f{ m_Position.x, m_Position.y + 28 }, Rectf{ m_Size * 5 + (m_Size * (m_Variation % 3)), m_Size, m_Size, m_Size }); if (m_DrawBorder[int(Direction::DOWN)]) m_pTexture->Draw(Point2f{ m_Position.x, m_Position.y - 32 }, Rectf{ m_Size * 5 + (m_Size * (m_Variation % 2)), 0, m_Size, m_Size }); if (m_DrawBorder[int(Direction::LEFT)]) m_pTexture->Draw(Point2f{ m_Position.x - 32, m_Position.y }, Rectf{ m_Size * 4, m_Size, m_Size, m_Size }); if (m_DrawBorder[int(Direction::RIGHT)]) m_pTexture->Draw(Point2f{ m_Position.x + 32, m_Position.y }, Rectf{ m_Size * 4, 0, m_Size, m_Size }); } void GroundTile::DrawItem() const { Tile::DrawItem(); }