123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- #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<int> 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;
- };
|