mirror of
https://github.com/HowestDAE/dae16-VerhulstBram.git
synced 2025-12-16 04:41:47 +01:00
104 lines
2.4 KiB
C++
104 lines
2.4 KiB
C++
#pragma once
|
|
#include "Collision.h"
|
|
#include "Texture.h"
|
|
#include "TextureManager.h"
|
|
|
|
|
|
|
|
enum class GroundTileTypes
|
|
{
|
|
Air,
|
|
Dirt,
|
|
Stone,
|
|
Iron
|
|
};
|
|
|
|
class GroundTileType {
|
|
public:
|
|
GroundTileType(const std::string& filePath, GroundTileTypes type): m_filePath(filePath), m_type(type) {}
|
|
virtual ~GroundTileType() = default;
|
|
bool operator== ( const GroundTileType& rhs ) const {
|
|
return m_type == rhs.m_type;
|
|
}
|
|
bool operator!= ( const GroundTileType& rhs) const {
|
|
return m_type != rhs.m_type;
|
|
}
|
|
|
|
bool operator== (const GroundTileType* rhs) const {
|
|
return rhs->m_type == m_type;
|
|
}
|
|
bool operator!= (const GroundTileType* rhs) const {
|
|
return rhs->m_type != m_type;
|
|
}
|
|
|
|
virtual std::string getPath() {
|
|
return m_filePath;
|
|
}
|
|
protected:
|
|
std::string m_filePath;
|
|
private:
|
|
GroundTileTypes m_type;
|
|
};
|
|
|
|
class RandomGroundTile: public GroundTileType {
|
|
public:
|
|
RandomGroundTile(const std::string& filePath, GroundTileTypes type, int maxRandom): GroundTileType(filePath, type), m_variant(utils::randRange(1, maxRandom)) {
|
|
}
|
|
|
|
~RandomGroundTile() override = default;
|
|
|
|
std::string getPath() override {
|
|
std::string toReplace{ "[0]" };
|
|
std::string replacement = std::to_string(m_variant);
|
|
|
|
size_t found = m_filePath.find(toReplace);
|
|
std::string newFilePath{ m_filePath };
|
|
if(found != std::string::npos) {
|
|
newFilePath.replace(found, 3, replacement);
|
|
}
|
|
return newFilePath;
|
|
}
|
|
private:
|
|
int m_variant;
|
|
};
|
|
|
|
namespace Tiles
|
|
{
|
|
static GroundTileType AIR = GroundTileType("", GroundTileTypes::Air);
|
|
static GroundTileType DIRT = RandomGroundTile("tiles/dirt/dirt[0].png", GroundTileTypes::Dirt, 6);
|
|
static GroundTileType IRON = GroundTileType("tiles/ores/Ore_Ironium.png", GroundTileTypes::Iron);
|
|
}
|
|
|
|
class WorldTile {
|
|
public:
|
|
WorldTile() = default;
|
|
WorldTile(const Point2f& position, GroundTileType groundTileType, TextureManager* pTextureManager);
|
|
~WorldTile();
|
|
|
|
void Draw() const;
|
|
|
|
Point2f GetPosition() const { return m_Position; }
|
|
void SetPosition(const Point2f& position) { m_Position = position; }
|
|
|
|
Point2f GetSize() const { return Point2f{ 50, 50 }; }
|
|
|
|
GroundTileType GetTileType() const { return m_GroundTileType; }
|
|
void SetTileType(GroundTileType type) { m_GroundTileType = type; }
|
|
|
|
Collision::TileCollisionRect GetCollisionRect();
|
|
|
|
bool m_Hightlight{ false };
|
|
|
|
|
|
private:
|
|
Point2f m_Position;
|
|
GroundTileType m_GroundTileType;
|
|
|
|
Texture* m_pTexture;
|
|
|
|
Collision::CollisionRect m_CollisionRect;
|
|
|
|
|
|
|
|
};
|