implemented TileMap, still need Shader for it with billboarding and all that jizz XD
This commit is contained in:
56
TSE_Core/src/BehaviourScripts/TileMap.hpp
Normal file
56
TSE_Core/src/BehaviourScripts/TileMap.hpp
Normal file
@@ -0,0 +1,56 @@
|
||||
#pragma once
|
||||
|
||||
#define TILE_MAP typeid(TSE::TileMap).name()
|
||||
|
||||
#include <unordered_map>
|
||||
#include "elements/BehaviourScript.hpp"
|
||||
#include "Vector2.hpp"
|
||||
#include "elements/Sprite.hpp"
|
||||
#include "elements/TileSet.hpp"
|
||||
|
||||
namespace TSE
|
||||
{
|
||||
enum SortingOrder
|
||||
{
|
||||
TopRight,
|
||||
TopLeft,
|
||||
BottomRight,
|
||||
BottomLeft,
|
||||
};
|
||||
|
||||
struct TileMapChunk
|
||||
{
|
||||
private:
|
||||
SortingOrder order;
|
||||
int chunksize;
|
||||
std::unordered_map<Vector2, Sprite> sprites;
|
||||
public:
|
||||
Vector2 pos;
|
||||
TileMapChunk(int _chunksize, const Vector2& _pos, SortingOrder _order);
|
||||
|
||||
void SetTile(const Vector2& p, const Vector2& Spriteindex, TileSet* set);
|
||||
void RemoveTile(Vector2 p);
|
||||
void SetOrdering(SortingOrder _order);
|
||||
|
||||
};
|
||||
|
||||
class TileMap : public BehaviourScript
|
||||
{
|
||||
public:
|
||||
int chunkSize = 16;
|
||||
SortingOrder order = TopRight;
|
||||
TileSet* set;
|
||||
std::unordered_map<Vector2, TileMapChunk> chunks;
|
||||
|
||||
void RemoveTile(Vector2 p);
|
||||
void SetTile(Vector2 p, Vector2 Spriteindex);
|
||||
|
||||
inline const char* GetName() override
|
||||
{
|
||||
return "Tile Map";
|
||||
}
|
||||
private:
|
||||
Vector2 LocalToChunkPos(const Vector2& v);
|
||||
Vector2 ChunkToLocalPos(const Vector2& v, const TileMapChunk& chunk);
|
||||
};
|
||||
} // namespace TSE
|
||||
Reference in New Issue
Block a user