1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
#pragma once
#include "../Common/Sizes.hpp"
#include <vector>
namespace MC::World {
class BlockType {
public:
enum Value : U8 {
Air,
Dirt,
Grass,
Stone,
Sand,
Snow,
Wood,
Leaves,
Water,
};
static constexpr U8 Size = Water + 1;
BlockType() : m_block(Air) {}
BlockType(Value block) : m_block(block) {}
operator Value() const { return m_block; }
Bool is_translucent() const { return opacity() != 1.0; }
Real opacity() const {
switch (m_block) {
case Air:
return 0.0;
case Water:
return 0.05;
case Leaves:
return 0.3;
default:
return 1.0;
}
}
static std::vector<BlockType> all() {
return {
Air,
Dirt,
Grass,
Stone,
Sand,
Snow,
Wood,
Leaves,
Water,
};
}
private:
Value m_block;
};
}
|