Luanti 5.11.0-dev
 
Loading...
Searching...
No Matches
content_mapblock.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5#pragma once
6
7#include "nodedef.h"
8
9struct MeshMakeData;
10struct MeshCollector;
11
12struct LightPair {
15
16 LightPair() = default;
17 explicit LightPair(u16 value) : lightDay(value & 0xff), lightNight(value >> 8) {}
18 LightPair(u8 valueA, u8 valueB) : lightDay(valueA), lightNight(valueB) {}
19 LightPair(float valueA, float valueB) :
20 lightDay(core::clamp(core::round32(valueA), 0, 255)),
21 lightNight(core::clamp(core::round32(valueB), 0, 255)) {}
22 operator u16() const { return lightDay | lightNight << 8; }
23};
24
25struct LightInfo {
26 float light_day;
29
30 LightPair getPair(float sunlight_boost = 0.0) const
31 {
32 return LightPair(
33 (1 - sunlight_boost) * light_day
34 + sunlight_boost * light_boosted,
36 }
37};
38
39struct LightFrame {
40 f32 lightsDay[8];
42 bool sunlight[8];
43};
44
46{
47public:
49 void generate();
50
51private:
54
55 const NodeDefManager *const nodedef;
56
58
59// current node
60 struct {
61 v3s16 p; // relative to blockpos_nodes
62 v3f origin; // p in BS space
65 LightFrame lframe; // smooth lighting
66 video::SColor lcolor; // unsmooth lighting
68
69// lighting
71 LightInfo blendLight(const v3f &vertex_pos);
72 video::SColor blendLightColor(const v3f &vertex_pos);
73 video::SColor blendLightColor(const v3f &vertex_pos, const v3f &vertex_normal);
74
75 void useTile(TileSpec *tile_ret, int index = 0, u8 set_flags = MATERIAL_FLAG_CRACK_OVERLAY,
76 u8 reset_flags = 0, bool special = false);
77 void getTile(int index, TileSpec *tile_ret);
78 void getTile(v3s16 direction, TileSpec *tile_ret);
79 void getSpecialTile(int index, TileSpec *tile_ret, bool apply_crack = false);
80
81// face drawing
82 void drawQuad(const TileSpec &tile, v3f *vertices, const v3s16 &normal = v3s16(0, 0, 0),
83 float vertical_tiling = 1.0);
84
85// cuboid drawing!
86 template <typename Fn>
87 void drawCuboid(const aabb3f &box, const TileSpec *tiles, int tilecount,
88 const f32 *txc, u8 mask, Fn &&face_lighter);
89 void generateCuboidTextureCoords(aabb3f const &box, f32 *coords);
90 void drawAutoLightedCuboid(aabb3f box, const TileSpec &tile, f32 const *txc = nullptr, u8 mask = 0);
91 void drawAutoLightedCuboid(aabb3f box, const TileSpec *tiles, int tile_count, f32 const *txc = nullptr, u8 mask = 0);
92 u8 getNodeBoxMask(aabb3f box, u8 solid_neighbors, u8 sametype_neighbors) const;
93
94// liquid-specific
114
118 f32 getCornerLevel(int i, int k) const;
119 void drawLiquidSides();
120 void drawLiquidTop();
121 void drawLiquidBottom();
122
123// raillike-specific
124 // name of the group that enables connecting to raillike nodes of different kind
125 static const std::string raillike_groupname;
128 };
130 bool isSameRail(v3s16 dir);
131
132// plantlike-specific
143
144 void drawPlantlikeQuad(const TileSpec &tile, float rotation, float quad_offset = 0,
145 bool offset_top_only = false);
146 void drawPlantlike(const TileSpec &tile, bool is_rooted = false);
147
148// firelike-specific
149 void drawFirelikeQuad(const TileSpec &tile, float rotation, float opening_angle,
150 float offset_h, float offset_v = 0.0);
151
152// drawtypes
153 void drawSolidNode();
154 void drawLiquidNode();
155 void drawGlasslikeNode();
157 void drawAllfacesNode();
158 void drawTorchlikeNode();
159 void drawSignlikeNode();
160 void drawPlantlikeNode();
162 void drawFirelikeNode();
163 void drawFencelikeNode();
164 void drawRaillikeNode();
165 void drawNodeboxNode();
166 void drawMeshNode();
167
168// common
170 void drawNode();
171};
static v2f dir(const v2f &pos_dist)
Definition camera.cpp:207
Definition content_mapblock.h:46
void drawRaillikeNode()
Definition content_mapblock.cpp:1469
void getTile(int index, TileSpec *tile_ret)
Definition content_mapblock.cpp:85
void drawTorchlikeNode()
Definition content_mapblock.cpp:1010
RaillikeData cur_rail
Definition content_mapblock.h:129
void drawPlantlike(const TileSpec &tile, bool is_rooted=false)
Definition content_mapblock.cpp:1166
void errorUnknownDrawtype()
Definition content_mapblock.cpp:1729
void drawSignlikeNode()
Definition content_mapblock.cpp:1072
void generateCuboidTextureCoords(aabb3f const &box, f32 *coords)
Definition content_mapblock.cpp:300
const NodeDefManager *const nodedef
Definition content_mapblock.h:55
PlantlikeData cur_plant
Definition content_mapblock.h:142
void calculateCornerLevels()
Definition content_mapblock.cpp:600
void useTile(TileSpec *tile_ret, int index=0, u8 set_flags=MATERIAL_FLAG_CRACK_OVERLAY, u8 reset_flags=0, bool special=false)
Definition content_mapblock.cpp:70
void drawLiquidSides()
Definition content_mapblock.cpp:662
void drawCuboid(const aabb3f &box, const TileSpec *tiles, int tilecount, const f32 *txc, u8 mask, Fn &&face_lighter)
Definition content_mapblock.cpp:220
video::SColor blendLightColor(const v3f &vertex_pos)
Definition content_mapblock.cpp:283
u8 getNodeBoxMask(aabb3f box, u8 solid_neighbors, u8 sametype_neighbors) const
Definition content_mapblock.cpp:485
void drawLiquidBottom()
Definition content_mapblock.cpp:797
void drawFirelikeQuad(const TileSpec &tile, float rotation, float opening_angle, float offset_h, float offset_v=0.0)
Definition content_mapblock.cpp:1277
void drawNodeboxNode()
Definition content_mapblock.cpp:1546
void drawQuad(const TileSpec &tile, v3f *vertices, const v3s16 &normal=v3s16(0, 0, 0), float vertical_tiling=1.0)
Definition content_mapblock.cpp:115
MapNode n
Definition content_mapblock.h:63
const v3s16 blockpos_nodes
Definition content_mapblock.h:57
void drawLiquidNode()
Definition content_mapblock.cpp:815
v3s16 p
Definition content_mapblock.h:61
void drawPlantlikeQuad(const TileSpec &tile, float rotation, float quad_offset=0, bool offset_top_only=false)
Definition content_mapblock.cpp:1110
video::SColor lcolor
Definition content_mapblock.h:66
void getSpecialTile(int index, TileSpec *tile_ret, bool apply_crack=false)
Definition content_mapblock.cpp:97
void getLiquidNeighborhood()
Definition content_mapblock.cpp:560
LightFrame lframe
Definition content_mapblock.h:65
LightInfo blendLight(const v3f &vertex_pos)
Definition content_mapblock.cpp:257
void generate()
Definition content_mapblock.cpp:1772
f32 getCornerLevel(int i, int k) const
Definition content_mapblock.cpp:607
bool isSameRail(v3s16 dir)
Definition content_mapblock.cpp:1418
void drawFencelikeNode()
Definition content_mapblock.cpp:1344
MeshMakeData *const data
Definition content_mapblock.h:52
void drawMeshNode()
Definition content_mapblock.cpp:1654
static const std::string raillike_groupname
Definition content_mapblock.h:125
MapblockMeshGenerator(MeshMakeData *input, MeshCollector *output)
Definition content_mapblock.cpp:62
void drawAutoLightedCuboid(aabb3f box, const TileSpec &tile, f32 const *txc=nullptr, u8 mask=0)
Definition content_mapblock.cpp:325
LiquidData cur_liquid
Definition content_mapblock.h:113
void getSmoothLightFrame()
Definition content_mapblock.cpp:238
void drawFirelikeNode()
Definition content_mapblock.cpp:1297
void drawSolidNode()
Definition content_mapblock.cpp:393
v3f origin
Definition content_mapblock.h:62
void drawLiquidTop()
Definition content_mapblock.cpp:717
struct MapblockMeshGenerator::@15 cur_node
void drawGlasslikeFramedNode()
Definition content_mapblock.cpp:868
void prepareLiquidNodeDrawing()
Definition content_mapblock.cpp:522
MeshCollector *const collector
Definition content_mapblock.h:53
void drawPlantlikeNode()
Definition content_mapblock.cpp:1252
void drawNode()
Definition content_mapblock.cpp:1735
void drawGlasslikeNode()
Definition content_mapblock.cpp:827
void drawAllfacesNode()
Definition content_mapblock.cpp:1535
void drawPlantlikeRootedNode()
Definition content_mapblock.cpp:1259
const ContentFeatures * f
Definition content_mapblock.h:64
This class is for getting the actual properties of nodes from their content ID.
Definition nodedef.h:530
core::aabbox3d< f32 > aabb3f
Definition irr_aabb3d.h:11
core::vector3d< s16 > v3s16
Definition irr_v3d.h:13
core::vector3df v3f
Definition irr_v3d.h:11
u16 content_t
Definition mapnode.h:22
PlantlikeStyle
Definition nodedef.h:239
Definition nodedef.h:299
Definition content_mapblock.h:39
f32 lightsDay[8]
Definition content_mapblock.h:40
bool sunlight[8]
Definition content_mapblock.h:42
f32 lightsNight[8]
Definition content_mapblock.h:41
Definition content_mapblock.h:25
LightPair getPair(float sunlight_boost=0.0) const
Definition content_mapblock.h:30
float light_day
Definition content_mapblock.h:26
float light_boosted
Definition content_mapblock.h:28
float light_night
Definition content_mapblock.h:27
Definition content_mapblock.h:12
LightPair(u8 valueA, u8 valueB)
Definition content_mapblock.h:18
LightPair()=default
LightPair(float valueA, float valueB)
Definition content_mapblock.h:19
LightPair(u16 value)
Definition content_mapblock.h:17
u8 lightDay
Definition content_mapblock.h:13
u8 lightNight
Definition content_mapblock.h:14
Definition mapnode.h:124
Definition content_mapblock.h:96
f32 level
Definition content_mapblock.h:97
bool top_is_same_liquid
Definition content_mapblock.h:100
bool is_same_liquid
Definition content_mapblock.h:99
content_t content
Definition content_mapblock.h:98
Definition content_mapblock.h:95
video::SColor color_top
Definition content_mapblock.h:109
TileSpec tile_top
Definition content_mapblock.h:106
content_t c_flowing
Definition content_mapblock.h:107
TileSpec tile
Definition content_mapblock.h:105
NeighborData neighbors[3][3]
Definition content_mapblock.h:110
f32 corner_levels[2][2]
Definition content_mapblock.h:111
bool draw_bottom
Definition content_mapblock.h:104
bool top_is_same_liquid
Definition content_mapblock.h:103
content_t c_source
Definition content_mapblock.h:108
Definition content_mapblock.h:133
PlantlikeStyle draw_style
Definition content_mapblock.h:134
float rotate_degree
Definition content_mapblock.h:137
int face_num
Definition content_mapblock.h:139
bool random_offset_Y
Definition content_mapblock.h:138
float plant_height
Definition content_mapblock.h:140
v3f offset
Definition content_mapblock.h:135
float scale
Definition content_mapblock.h:136
Definition content_mapblock.h:126
int raillike_group
Definition content_mapblock.h:127
Definition collector.h:24
Definition mapblock_mesh.h:37
Definition tile.h:148
#define MATERIAL_FLAG_CRACK_OVERLAY
Definition tile.h:35