#pragma once #include "Log.hpp" #define CW 20 #define CH 12 class Collider: public IEntity { public: enum { AIR, SAND, FALLINGSAND, SOLID, SPIKE, LEVER }; bool isSafe(int x, int y) { int tile = m_tile[getTile(x, y)]; return tile == -1 ? true : tile != FALLINGSAND && tile != SPIKE; } bool isSolid(int x, int y) { int tile = m_tile[getTile(x, y)]; return tile == -1 ? true : tile != AIR && tile != LEVER; } int getBlock(int x, int y) { return m_tile[getTile(x, y)]; } void setBlock(int x, int y, int type) { m_tile[getTile(x, y)] = type; } void populate(std::vector data) { std::copy(data.begin(), data.end(), m_tile); std::copy(data.begin(), data.end(), m_base); } float getLocalX() { return m_localX; } void setLocalX(float localX) { m_localX = localX; } void update(float delta) { std::copy(m_base, m_base + CW * CH, m_tile); } private: int getTile(int x, int y) { if(x < 0 || y < 0 || x >= CW || y >= CH) { return -1; } return x + CW * y; } int m_tile[CW * CH]; int m_base[CW * CH]; float m_localX; };