Minetest 5.9.0-dev
 
Loading...
Searching...
No Matches
content_mapblock.h
Go to the documentation of this file.
1/*
2Minetest
3Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5This program is free software; you can redistribute it and/or modify
6it under the terms of the GNU Lesser General Public License as published by
7the Free Software Foundation; either version 2.1 of the License, or
8(at your option) any later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU Lesser General Public License for more details.
14
15You should have received a copy of the GNU Lesser General Public License along
16with this program; if not, write to the Free Software Foundation, Inc.,
1751 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18*/
19
20#pragma once
21
22#include "nodedef.h"
23#include <IMeshManipulator.h>
24
25struct MeshMakeData;
26struct MeshCollector;
27
28struct LightPair {
31
32 LightPair() = default;
33 explicit LightPair(u16 value) : lightDay(value & 0xff), lightNight(value >> 8) {}
34 LightPair(u8 valueA, u8 valueB) : lightDay(valueA), lightNight(valueB) {}
35 LightPair(float valueA, float valueB) :
36 lightDay(core::clamp(core::round32(valueA), 0, 255)),
37 lightNight(core::clamp(core::round32(valueB), 0, 255)) {}
38 operator u16() const { return lightDay | lightNight << 8; }
39};
40
41struct LightInfo {
42 float light_day;
45
46 LightPair getPair(float sunlight_boost = 0.0) const
47 {
48 return LightPair(
49 (1 - sunlight_boost) * light_day
50 + sunlight_boost * light_boosted,
52 }
53};
54
55struct LightFrame {
56 f32 lightsDay[8];
58 bool sunlight[8];
59};
60
62{
63public:
65 scene::IMeshManipulator *mm);
66 void generate();
67 void renderSingle(content_t node, u8 param2 = 0x00);
68
69private:
72
73 const NodeDefManager *const nodedef;
74 scene::IMeshManipulator *const meshmanip;
75
77
78// options
80
81// current node
82 struct {
89 video::SColor color;
91 f32 scale;
93
94// lighting
96 LightInfo blendLight(const v3f &vertex_pos);
97 video::SColor blendLightColor(const v3f &vertex_pos);
98 video::SColor blendLightColor(const v3f &vertex_pos, const v3f &vertex_normal);
99
100 void useTile(int index = 0, u8 set_flags = MATERIAL_FLAG_CRACK_OVERLAY,
101 u8 reset_flags = 0, bool special = false);
102 void getTile(int index, TileSpec *tile);
103 void getTile(v3s16 direction, TileSpec *tile);
104 void getSpecialTile(int index, TileSpec *tile, bool apply_crack = false);
105
106// face drawing
107 void drawQuad(v3f *vertices, const v3s16 &normal = v3s16(0, 0, 0),
108 float vertical_tiling = 1.0);
109
110// cuboid drawing!
111 template <typename Fn>
112 void drawCuboid(const aabb3f &box, TileSpec *tiles, int tilecount, const f32 *txc, u8 mask, Fn &&face_lighter);
113 void generateCuboidTextureCoords(aabb3f const &box, f32 *coords);
114 void drawAutoLightedCuboid(aabb3f box, f32 const *txc = nullptr, TileSpec *tiles = nullptr, int tile_count = 0, u8 mask = 0);
115 u8 getNodeBoxMask(aabb3f box, u8 solid_neighbors, u8 sametype_neighbors) const;
116
117// liquid-specific
118 struct LiquidData {
120 f32 level;
124 };
125
132 video::SColor color_top;
134 f32 corner_levels[2][2];
135 };
137
141 f32 getCornerLevel(int i, int k) const;
142 void drawLiquidSides();
143 void drawLiquidTop();
144 void drawLiquidBottom();
145
146// raillike-specific
147 // name of the group that enables connecting to raillike nodes of different kind
148 static const std::string raillike_groupname;
151 };
153 bool isSameRail(v3s16 dir);
154
155// plantlike-specific
163 };
165
166 void drawPlantlikeQuad(float rotation, float quad_offset = 0,
167 bool offset_top_only = false);
168 void drawPlantlike(bool is_rooted = false);
169
170// firelike-specific
171 void drawFirelikeQuad(float rotation, float opening_angle,
172 float offset_h, float offset_v = 0.0);
173
174// drawtypes
175 void drawSolidNode();
176 void drawLiquidNode();
177 void drawGlasslikeNode();
179 void drawAllfacesNode();
180 void drawTorchlikeNode();
181 void drawSignlikeNode();
182 void drawPlantlikeNode();
184 void drawFirelikeNode();
185 void drawFencelikeNode();
186 void drawRaillikeNode();
187 void drawNodeboxNode();
188 void drawMeshNode();
189
190// common
192 void drawNode();
193};
static v2f dir(const v2f &pos_dist)
Definition: camera.cpp:204
Definition: content_mapblock.h:62
void drawRaillikeNode()
Definition: content_mapblock.cpp:1461
scene::IMeshManipulator *const meshmanip
Definition: content_mapblock.h:74
void drawTorchlikeNode()
Definition: content_mapblock.cpp:1004
void useTile(int index=0, u8 set_flags=MATERIAL_FLAG_CRACK_OVERLAY, u8 reset_flags=0, bool special=false)
Definition: content_mapblock.cpp:88
void drawPlantlike(bool is_rooted=false)
Definition: content_mapblock.cpp:1158
RaillikeData cur_rail
Definition: content_mapblock.h:152
void errorUnknownDrawtype()
Definition: content_mapblock.cpp:1705
void drawSignlikeNode()
Definition: content_mapblock.cpp:1065
void getTile(int index, TileSpec *tile)
Definition: content_mapblock.cpp:104
void generateCuboidTextureCoords(aabb3f const &box, f32 *coords)
Definition: content_mapblock.cpp:318
const NodeDefManager *const nodedef
Definition: content_mapblock.h:73
PlantlikeData cur_plant
Definition: content_mapblock.h:164
void calculateCornerLevels()
Definition: content_mapblock.cpp:613
LightPair light
Definition: content_mapblock.h:87
void drawLiquidSides()
Definition: content_mapblock.cpp:675
video::SColor blendLightColor(const v3f &vertex_pos)
Definition: content_mapblock.cpp:301
u8 getNodeBoxMask(aabb3f box, u8 solid_neighbors, u8 sametype_neighbors) const
Definition: content_mapblock.cpp:499
const bool enable_mesh_cache
Definition: content_mapblock.h:79
void drawLiquidBottom()
Definition: content_mapblock.cpp:785
f32 scale
Definition: content_mapblock.h:91
void drawNodeboxNode()
Definition: content_mapblock.cpp:1526
MapNode n
Definition: content_mapblock.h:85
const v3s16 blockpos_nodes
Definition: content_mapblock.h:76
void drawLiquidNode()
Definition: content_mapblock.cpp:803
void drawAutoLightedCuboid(aabb3f box, f32 const *txc=nullptr, TileSpec *tiles=nullptr, int tile_count=0, u8 mask=0)
Definition: content_mapblock.cpp:343
v3s16 p
Definition: content_mapblock.h:83
struct MapblockMeshGenerator::@16 cur_node
void getLiquidNeighborhood()
Definition: content_mapblock.cpp:573
video::SColor color
Definition: content_mapblock.h:89
LightInfo blendLight(const v3f &vertex_pos)
Definition: content_mapblock.cpp:274
void generate()
Definition: content_mapblock.cpp:1746
f32 getCornerLevel(int i, int k) const
Definition: content_mapblock.cpp:620
bool isSameRail(v3s16 dir)
Definition: content_mapblock.cpp:1410
TileSpec tile
Definition: content_mapblock.h:90
void drawFencelikeNode()
Definition: content_mapblock.cpp:1333
void drawPlantlikeQuad(float rotation, float quad_offset=0, bool offset_top_only=false)
Definition: content_mapblock.cpp:1102
void drawQuad(v3f *vertices, const v3s16 &normal=v3s16(0, 0, 0), float vertical_tiling=1.0)
Definition: content_mapblock.cpp:134
MeshMakeData *const data
Definition: content_mapblock.h:70
void drawMeshNode()
Definition: content_mapblock.cpp:1634
static const std::string raillike_groupname
Definition: content_mapblock.h:148
void getSpecialTile(int index, TileSpec *tile, bool apply_crack=false)
Definition: content_mapblock.cpp:116
LightFrame frame
Definition: content_mapblock.h:88
void drawCuboid(const aabb3f &box, TileSpec *tiles, int tilecount, const f32 *txc, u8 mask, Fn &&face_lighter)
Definition: content_mapblock.cpp:237
LiquidData cur_liquid
Definition: content_mapblock.h:136
void getSmoothLightFrame()
Definition: content_mapblock.cpp:255
void drawFirelikeQuad(float rotation, float opening_angle, float offset_h, float offset_v=0.0)
Definition: content_mapblock.cpp:1266
void drawFirelikeNode()
Definition: content_mapblock.cpp:1286
void renderSingle(content_t node, u8 param2=0x00)
Definition: content_mapblock.cpp:1757
void drawSolidNode()
Definition: content_mapblock.cpp:409
v3f origin
Definition: content_mapblock.h:84
void drawLiquidTop()
Definition: content_mapblock.cpp:722
void drawGlasslikeFramedNode()
Definition: content_mapblock.cpp:855
void prepareLiquidNodeDrawing()
Definition: content_mapblock.cpp:536
MeshCollector *const collector
Definition: content_mapblock.h:71
void drawPlantlikeNode()
Definition: content_mapblock.cpp:1244
void drawNode()
Definition: content_mapblock.cpp:1711
void drawGlasslikeNode()
Definition: content_mapblock.cpp:815
void drawAllfacesNode()
Definition: content_mapblock.cpp:997
void drawPlantlikeRootedNode()
Definition: content_mapblock.cpp:1250
const ContentFeatures * f
Definition: content_mapblock.h:86
This class is for getting the actual properties of nodes from their content ID.
Definition: nodedef.h:556
core::aabbox3d< f32 > aabb3f
Definition: irr_aabb3d.h:26
core::vector3d< s16 > v3s16
Definition: irr_v3d.h:28
core::vector3df v3f
Definition: irr_v3d.h:26
u16 content_t
Definition: mapnode.h:37
PlantlikeStyle
Definition: nodedef.h:250
Definition: nodedef.h:310
Definition: content_mapblock.h:55
f32 lightsDay[8]
Definition: content_mapblock.h:56
bool sunlight[8]
Definition: content_mapblock.h:58
f32 lightsNight[8]
Definition: content_mapblock.h:57
Definition: content_mapblock.h:41
LightPair getPair(float sunlight_boost=0.0) const
Definition: content_mapblock.h:46
float light_day
Definition: content_mapblock.h:42
float light_boosted
Definition: content_mapblock.h:44
float light_night
Definition: content_mapblock.h:43
Definition: content_mapblock.h:28
LightPair(u8 valueA, u8 valueB)
Definition: content_mapblock.h:34
LightPair()=default
LightPair(float valueA, float valueB)
Definition: content_mapblock.h:35
LightPair(u16 value)
Definition: content_mapblock.h:33
u8 lightDay
Definition: content_mapblock.h:29
u8 lightNight
Definition: content_mapblock.h:30
Definition: mapnode.h:139
Definition: content_mapblock.h:119
f32 level
Definition: content_mapblock.h:120
bool top_is_same_liquid
Definition: content_mapblock.h:123
bool is_same_liquid
Definition: content_mapblock.h:122
content_t content
Definition: content_mapblock.h:121
Definition: content_mapblock.h:118
video::SColor color_top
Definition: content_mapblock.h:132
TileSpec tile_top
Definition: content_mapblock.h:129
content_t c_flowing
Definition: content_mapblock.h:130
TileSpec tile
Definition: content_mapblock.h:128
NeighborData neighbors[3][3]
Definition: content_mapblock.h:133
f32 corner_levels[2][2]
Definition: content_mapblock.h:134
bool draw_bottom
Definition: content_mapblock.h:127
bool top_is_same_liquid
Definition: content_mapblock.h:126
content_t c_source
Definition: content_mapblock.h:131
Definition: content_mapblock.h:156
PlantlikeStyle draw_style
Definition: content_mapblock.h:157
float rotate_degree
Definition: content_mapblock.h:159
int face_num
Definition: content_mapblock.h:161
bool random_offset_Y
Definition: content_mapblock.h:160
float plant_height
Definition: content_mapblock.h:162
v3f offset
Definition: content_mapblock.h:158
Definition: content_mapblock.h:149
int raillike_group
Definition: content_mapblock.h:150
Definition: collector.h:39
Definition: mapblock_mesh.h:44
Definition: tile.h:159
#define MATERIAL_FLAG_CRACK_OVERLAY
Definition: tile.h:49