Added block obj
This commit is contained in:
parent
87cb04f0f8
commit
1521d9f0b3
|
@ -0,0 +1,71 @@
|
||||||
|
#pragma once
|
||||||
|
#include <glm/vec2.hpp>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
enum BLOCKS
|
||||||
|
{
|
||||||
|
air = 0,
|
||||||
|
grass,
|
||||||
|
dirt,
|
||||||
|
stone,
|
||||||
|
ice,
|
||||||
|
BLOCKS_COUNT
|
||||||
|
};
|
||||||
|
|
||||||
|
class Block
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Block() {};
|
||||||
|
Block(int type):type(type){};
|
||||||
|
|
||||||
|
Block(Block &other) { this->type = other.type; }
|
||||||
|
|
||||||
|
uint8_t &getType() { return type; }
|
||||||
|
uint8_t getType() const { return type; }
|
||||||
|
|
||||||
|
bool isTransparent() const
|
||||||
|
{
|
||||||
|
return !isOpaque();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isTranslucent() const
|
||||||
|
{
|
||||||
|
if(type == ice)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isOpaque() const
|
||||||
|
{
|
||||||
|
if(type == air || type == ice)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isAir() const
|
||||||
|
{
|
||||||
|
return type == air;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *getBlockName() const;
|
||||||
|
|
||||||
|
glm::ivec2 getPositionInAtlas(int face);
|
||||||
|
|
||||||
|
friend std::ostream &operator<<(std::ostream &os, const Block &block);
|
||||||
|
|
||||||
|
Block & operator=(const Block &other)
|
||||||
|
{
|
||||||
|
this->type = other.type;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
unsigned char type = 0;
|
||||||
|
};
|
||||||
|
|
|
@ -0,0 +1,94 @@
|
||||||
|
#include "block.h"
|
||||||
|
|
||||||
|
glm::ivec2 frontFaces[BLOCKS_COUNT] =
|
||||||
|
{
|
||||||
|
{0,0},
|
||||||
|
{3, 15}, //grass
|
||||||
|
{2, 15}, // dirt
|
||||||
|
{1, 15}, //stone
|
||||||
|
{3, 11}, //ice
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
glm::ivec2 backFaces[BLOCKS_COUNT] =
|
||||||
|
{
|
||||||
|
{0,0},
|
||||||
|
{3, 15}, //grass
|
||||||
|
{2, 15}, // dirt
|
||||||
|
{1, 15}, //stone
|
||||||
|
{3, 11}, //ice
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
glm::ivec2 topFaces[BLOCKS_COUNT] =
|
||||||
|
{
|
||||||
|
{0,0},
|
||||||
|
{0, 15}, //grass
|
||||||
|
{2, 15}, // dirt
|
||||||
|
{1, 15}, //stone
|
||||||
|
{3, 11}, //ice
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
glm::ivec2 bottomFaces[BLOCKS_COUNT] =
|
||||||
|
{
|
||||||
|
{0,0},
|
||||||
|
{2, 15}, //grass
|
||||||
|
{2, 15}, // dirt
|
||||||
|
{1, 15}, //stone
|
||||||
|
{3, 11}, //ice
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
glm::ivec2 leftFaces[BLOCKS_COUNT] =
|
||||||
|
{
|
||||||
|
{0,0},
|
||||||
|
{3, 15}, //grass
|
||||||
|
{2, 15}, // dirt
|
||||||
|
{1, 15}, //stone
|
||||||
|
{3, 11}, //ice
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
glm::ivec2 rightFaces[BLOCKS_COUNT] =
|
||||||
|
{
|
||||||
|
{0,0},
|
||||||
|
{3, 15}, //grass
|
||||||
|
{2, 15}, // dirt
|
||||||
|
{1, 15}, //stone
|
||||||
|
{3, 11}, //ice
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
static glm::ivec2 *faces[6] =
|
||||||
|
{
|
||||||
|
frontFaces, backFaces, topFaces, bottomFaces, leftFaces, rightFaces
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
glm::ivec2 Block::getPositionInAtlas(int face)
|
||||||
|
{
|
||||||
|
return faces[face][type];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static const char *blockNames[BLOCKS_COUNT + 1]
|
||||||
|
{
|
||||||
|
"air",
|
||||||
|
"grass block",
|
||||||
|
"dirt block",
|
||||||
|
"stone block",
|
||||||
|
"ice"
|
||||||
|
""
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *Block::getBlockName() const
|
||||||
|
{
|
||||||
|
return blockNames[type];
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ostream &operator<<(std::ostream &os, const Block &block)
|
||||||
|
{
|
||||||
|
os << block.getBlockName();
|
||||||
|
return os;
|
||||||
|
}
|
Loading…
Reference in New Issue