VoxelEngine
 
Loading...
Searching...
No Matches
MultiBlock.h
1#pragma once
2
3#include "../Globals.h"
4// #include "Placeable.h"
5#include "BlockState.h"
6
7
8#include <initializer_list>
9#include <optional>
10#include <vector>
11
12
13namespace engine {
19 class MultiBlock {
20 public:
22 MultiBlock() = default;
23 ~MultiBlock() = default;
24
25 struct SubBlock {
26 BlockID blockID;
27 std::optional<BlockState> state;
28 };
29
33 static MultiBlock fromBlock(BlockID, BlockState* state);
34
38 SubBlock toBlock() const;
39
40
41 bool hasBlock(BlockID blockID) const;
42 bool addBlock(SubBlock block);
43 void removeBlock(uint8_t index);
44
45 const std::vector<SubBlock>& blocks() const;
46 std::vector<BlockID> blockIDs() const;
47 uint8_t blockCount() const { return m_blocks.size(); }
48
49
50 protected:
51 MultiBlock(std::initializer_list<SubBlock> blocks);
52
53 private:
54 std::vector<SubBlock> m_blocks;
55 };
56} // namespace engine
Definition BlockState.h:17
A MultiBlock represents multiple blocks at the same position.
Definition MultiBlock.h:19
static MultiBlock fromBlock(BlockID, BlockState *state)
Converts a block and its state to a multi-block.
Definition MultiBlock.cpp:9
MultiBlock()=default
SubBlock toBlock() const
Converts a MultiBlock to a block and its state.
Definition MultiBlock.cpp:13
Definition MultiBlock.h:25