Files
prog2/Game/GridSystem/WorldTile.cpp
Bram Verhulst 9def986c83 Fix precompiled headers
Added edge detection (if it works :/)
2024-04-06 01:23:24 +02:00

102 lines
3.6 KiB
C++

#include "pch.h"
#include "WorldTile.h"
#include <iostream>
#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<TileDirection>(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<TileDirection>(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 ) };
}