Luanti 5.18.0-dev
Loading...
Searching...
No Matches
node_visuals.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2025 cx384
4
5#pragma once
6
7#include <array>
8#include <unordered_set>
9#include "nodedef.h"
10#include "tile.h"
11
12class Client;
14namespace scene
15{
16 class IMeshManipulator;
17 struct SMesh;
18}
19
20// Used when choosing which face is drawn
21constexpr std::array<u8, NodeDrawType_END> NDT_solidness = [] {
22 std::array<u8, NodeDrawType_END> solidness{};
23 solidness[NDT_NORMAL] = 2;
24 solidness[NDT_LIQUID] = 1;
25 solidness[NDT_PLANTLIKE_ROOTED] = 2;
26 return solidness;
27}();
28
29// When solidness=0, this tells how it looks like
30constexpr std::array<u8, NodeDrawType_END> NDT_visual_solidness = [] {
31 std::array<u8, NodeDrawType_END> visual_solidness{};
32 visual_solidness[NDT_GLASSLIKE] = 1;
33 visual_solidness[NDT_ALLFACES] = 1;
34 visual_solidness[NDT_ALLFACES_OPTIONAL] = 1;
35 visual_solidness[NDT_GLASSLIKE_FRAMED] = 1;
36 visual_solidness[NDT_GLASSLIKE_FRAMED_OPTIONAL] = 1;
37 return visual_solidness;
38}();
39
40
41// Stores client only data needed to draw nodes, like textures and meshes
42// Contained in ContentFeatures
43
45{
46 // 0 1 2 3 4 5
47 // up down right left back front
49 // Special tiles
51 scene::SMesh *mesh_ptr = nullptr; // mesh in case of mesh node
52 video::SColor minimap_color;
53 std::vector<video::SColor> *palette = nullptr;
54
55 // alpha stays in ContentFeatures due to compatibility code that is necessary,
56 // because it was part of the node definition table in the past.
57
58 NodeVisuals() = default;
60
61 // Get color from palette or content features
62 video::SColor getColor(const ContentFeatures &f, u8 param2) const;
63
73 static void fillNodeVisuals(NodeDefManager *ndef, Client *client,
74 void *progress_callback_args);
75
77
78private:
79
80 // Functions needed for initialisation
82 std::unordered_set<std::string> &pool, const TextureSettings &tsettings);
83
84 // May override the alpha and drawtype of the content features
86 IShaderSource *shdsrc, Client *client, PreLoadedTextures *texture_pool,
87 const TextureSettings &tsettings);
88
89 void updateMesh(const std::string &mesh, float visual_scale, Client *client,
90 const TextureSettings &tsettings);
91 void collectMaterials(std::vector<u32> &leaves_materials);
92};
93
98{
99 switch (mode) {
100 case ALPHAMODE_BLEND:
101 return TILE_MATERIAL_ALPHA;
102 case ALPHAMODE_OPAQUE:
104 case ALPHAMODE_CLIP:
105 default:
106 return TILE_MATERIAL_BASIC;
107 }
108}
Definition client.h:107
Definition shader.h:254
Definition texturesource.h:45
This class is for getting the actual properties of nodes from their content ID.
Definition nodedef.h:514
Definition nodedef.h:166
Definition activeobjectmgr.cpp:11
Definition camera.h:24
constexpr std::array< u8, NodeDrawType_END > NDT_visual_solidness
Definition node_visuals.h:30
constexpr std::array< u8, NodeDrawType_END > NDT_solidness
Definition node_visuals.h:21
static MaterialType alpha_mode_to_material_type(AlphaMode mode)
get fitting material type for an alpha mode
Definition node_visuals.h:97
#define CF_SPECIAL_COUNT
Definition nodedef.h:291
AlphaMode
Definition nodedef.h:250
@ ALPHAMODE_CLIP
Definition nodedef.h:252
@ ALPHAMODE_OPAQUE
Definition nodedef.h:253
@ ALPHAMODE_BLEND
Definition nodedef.h:251
@ NDT_NORMAL
Definition nodedef.h:184
@ NDT_ALLFACES
Definition nodedef.h:194
@ NDT_PLANTLIKE_ROOTED
Definition nodedef.h:224
@ NDT_GLASSLIKE
Definition nodedef.h:192
@ NDT_LIQUID
Definition nodedef.h:188
@ NDT_GLASSLIKE_FRAMED_OPTIONAL
Definition nodedef.h:220
@ NDT_GLASSLIKE_FRAMED
Definition nodedef.h:216
@ NDT_ALLFACES_OPTIONAL
Definition nodedef.h:196
Definition nodedef.h:294
video::SColor getColor(const ContentFeatures &f, u8 param2) const
Definition node_visuals.cpp:511
TileSpec special_tiles[CF_SPECIAL_COUNT]
Definition node_visuals.h:50
NodeVisuals()=default
static void fillNodeVisuals(NodeDefManager *ndef, Client *client, void *progress_callback_args)
Definition node_visuals.cpp:519
scene::SMesh * mesh_ptr
Definition node_visuals.h:51
video::SColor minimap_color
Definition node_visuals.h:52
void updateTextures(ContentFeatures &f, ITextureSource *tsrc, IShaderSource *shdsrc, Client *client, PreLoadedTextures *texture_pool, const TextureSettings &tsettings)
Definition node_visuals.cpp:261
void preUpdateTextures(const ContentFeatures &f, ITextureSource *tsrc, std::unordered_set< std::string > &pool, const TextureSettings &tsettings)
Definition node_visuals.cpp:220
DISABLE_CLASS_COPY(NodeVisuals)
void updateMesh(const std::string &mesh, float visual_scale, Client *client, const TextureSettings &tsettings)
Definition node_visuals.cpp:449
void collectMaterials(std::vector< u32 > &leaves_materials)
Definition node_visuals.cpp:500
~NodeVisuals()
Definition node_visuals.cpp:206
std::vector< video::SColor > * palette
Definition node_visuals.h:53
TileSpec tiles[6]
Definition node_visuals.h:48
Definition node_visuals.cpp:38
Definition tile.h:233
MaterialType
Definition tile.h:12
@ TILE_MATERIAL_OPAQUE
Definition tile.h:19
@ TILE_MATERIAL_BASIC
Definition tile.h:13
@ TILE_MATERIAL_ALPHA
Definition tile.h:14