Luanti 5.11.0-dev
 
Loading...
Searching...
No Matches
tile.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 "irrlichttypes.h"
8#include <ITexture.h>
9#include <vector>
10#include <SMaterial.h>
11
27
28// Material flags
29// Should backface culling be enabled?
30#define MATERIAL_FLAG_BACKFACE_CULLING 0x01
31// Should a crack be drawn?
32#define MATERIAL_FLAG_CRACK 0x02
33// Should the crack be drawn on transparent pixels (unset) or not (set)?
34// Ignored if MATERIAL_FLAG_CRACK is not set.
35#define MATERIAL_FLAG_CRACK_OVERLAY 0x04
36#define MATERIAL_FLAG_ANIMATION 0x08
37//#define MATERIAL_FLAG_HIGHLIGHTED 0x10
38#define MATERIAL_FLAG_TILEABLE_HORIZONTAL 0x20
39#define MATERIAL_FLAG_TILEABLE_VERTICAL 0x40
40
41/*
42 This fully defines the looks of a tile.
43 The SMaterial of a tile is constructed according to this.
44*/
46{
47 FrameSpec() = default;
48
49 u32 texture_id = 0;
50 video::ITexture *texture = nullptr;
51};
52
53#define MAX_TILE_LAYERS 2
54
57{
58 TileLayer() = default;
59
63 bool operator==(const TileLayer &other) const
64 {
65 return
66 texture_id == other.texture_id &&
69 has_color == other.has_color &&
70 color == other.color &&
71 scale == other.scale;
72 }
73
77 bool operator!=(const TileLayer &other) const
78 {
79 return !(*this == other);
80 }
81
82 void applyMaterialOptions(video::SMaterial &material) const;
83
84 void applyMaterialOptionsWithShaders(video::SMaterial &material) const;
85
87 bool isTransparent() const
88 {
89 // see also: the mapping in ShaderSource::generateShader()
90 switch (material_type) {
95 return true;
96 }
97 return false;
98 }
99
100 // Ordered for size, please do not reorder
101
102 video::ITexture *texture = nullptr;
103
104 u32 shader_id = 0;
105
106 u32 texture_id = 0;
107
110
113 //0 // <- DEBUG, Use the one below
117
119 bool has_color = false;
120
121 std::vector<FrameSpec> *frames = nullptr;
122
127 video::SColor color = video::SColor(0, 0, 0, 0);
128
129 u8 scale = 1;
130};
131
132enum class TileRotation: u8 {
133 None,
134 R90,
135 R180,
136 R270,
137};
138
Definition tile.h:46
video::ITexture * texture
Definition tile.h:50
u32 texture_id
Definition tile.h:49
FrameSpec()=default
Defines a layer of a tile.
Definition tile.h:57
video::SColor color
Definition tile.h:127
bool operator==(const TileLayer &other) const
Definition tile.h:63
std::vector< FrameSpec > * frames
Definition tile.h:121
bool has_color
If true, the tile has its own color.
Definition tile.h:119
void applyMaterialOptionsWithShaders(video::SMaterial &material) const
Definition tile.cpp:40
u8 scale
Definition tile.h:129
void applyMaterialOptions(video::SMaterial &material) const
Definition tile.cpp:8
TileLayer()=default
u16 animation_frame_count
Definition tile.h:109
u8 material_flags
Definition tile.h:112
video::ITexture * texture
Definition tile.h:102
u32 shader_id
Definition tile.h:104
u16 animation_frame_length_ms
Definition tile.h:108
bool isTransparent() const
Definition tile.h:87
u8 material_type
Definition tile.h:111
u32 texture_id
Definition tile.h:106
bool operator!=(const TileLayer &other) const
Definition tile.h:77
Definition tile.h:143
TileSpec()=default
TileRotation rotation
Tile rotation.
Definition tile.h:149
bool world_aligned
If true, the tile rotation is ignored.
Definition tile.h:147
u8 emissive_light
This much light does the tile emit.
Definition tile.h:151
TileLayer layers[MAX_TILE_LAYERS]
The first is base texture, the second is overlay.
Definition tile.h:153
#define MATERIAL_FLAG_BACKFACE_CULLING
Definition tile.h:30
#define MATERIAL_FLAG_TILEABLE_VERTICAL
Definition tile.h:39
TileRotation
Definition tile.h:132
MaterialType
Definition tile.h:12
@ TILE_MATERIAL_PLAIN_ALPHA
Definition tile.h:25
@ TILE_MATERIAL_OPAQUE
Definition tile.h:19
@ TILE_MATERIAL_LIQUID_TRANSPARENT
Definition tile.h:15
@ TILE_MATERIAL_WAVING_PLANTS
Definition tile.h:18
@ TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT
Definition tile.h:21
@ TILE_MATERIAL_BASIC
Definition tile.h:13
@ TILE_MATERIAL_LIQUID_OPAQUE
Definition tile.h:16
@ TILE_MATERIAL_WAVING_LIQUID_OPAQUE
Definition tile.h:22
@ TILE_MATERIAL_WAVING_LIQUID_BASIC
Definition tile.h:20
@ TILE_MATERIAL_WAVING_LEAVES
Definition tile.h:17
@ TILE_MATERIAL_ALPHA
Definition tile.h:14
@ TILE_MATERIAL_PLAIN
Definition tile.h:24
#define MATERIAL_FLAG_TILEABLE_HORIZONTAL
Definition tile.h:38
#define MAX_TILE_LAYERS
Definition tile.h:53