Luanti 5.10.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
26
27// Material flags
28// Should backface culling be enabled?
29#define MATERIAL_FLAG_BACKFACE_CULLING 0x01
30// Should a crack be drawn?
31#define MATERIAL_FLAG_CRACK 0x02
32// Should the crack be drawn on transparent pixels (unset) or not (set)?
33// Ignored if MATERIAL_FLAG_CRACK is not set.
34#define MATERIAL_FLAG_CRACK_OVERLAY 0x04
35#define MATERIAL_FLAG_ANIMATION 0x08
36//#define MATERIAL_FLAG_HIGHLIGHTED 0x10
37#define MATERIAL_FLAG_TILEABLE_HORIZONTAL 0x20
38#define MATERIAL_FLAG_TILEABLE_VERTICAL 0x40
39
40/*
41 This fully defines the looks of a tile.
42 The SMaterial of a tile is constructed according to this.
43*/
45{
46 FrameSpec() = default;
47
48 u32 texture_id = 0;
49 video::ITexture *texture = nullptr;
50};
51
52#define MAX_TILE_LAYERS 2
53
56{
57 TileLayer() = default;
58
62 bool operator==(const TileLayer &other) const
63 {
64 return
65 texture_id == other.texture_id &&
68 has_color == other.has_color &&
69 color == other.color &&
70 scale == other.scale;
71 }
72
76 bool operator!=(const TileLayer &other) const
77 {
78 return !(*this == other);
79 }
80
81 // Sets everything else except the texture in the material
82 void applyMaterialOptions(video::SMaterial &material) const;
83
84 void applyMaterialOptionsWithShaders(video::SMaterial &material) const;
85
86 bool isTransparent() const
87 {
88 switch (material_type) {
92 return true;
93 }
94 return false;
95 }
96
97 // Ordered for size, please do not reorder
98
99 video::ITexture *texture = nullptr;
100
101 u32 shader_id = 0;
102
103 u32 texture_id = 0;
104
107
110 //0 // <- DEBUG, Use the one below
114
116 bool has_color = false;
117
118 std::vector<FrameSpec> *frames = nullptr;
119
124 video::SColor color = video::SColor(0, 0, 0, 0);
125
126 u8 scale = 1;
127};
128
129enum class TileRotation: u8 {
130 None,
131 R90,
132 R180,
133 R270,
134};
135
Definition tile.h:45
video::ITexture * texture
Definition tile.h:49
u32 texture_id
Definition tile.h:48
FrameSpec()=default
Defines a layer of a tile.
Definition tile.h:56
video::SColor color
Definition tile.h:124
bool operator==(const TileLayer &other) const
Definition tile.h:62
std::vector< FrameSpec > * frames
Definition tile.h:118
bool has_color
If true, the tile has its own color.
Definition tile.h:116
void applyMaterialOptionsWithShaders(video::SMaterial &material) const
Definition tile.cpp:40
u8 scale
Definition tile.h:126
void applyMaterialOptions(video::SMaterial &material) const
Definition tile.cpp:8
TileLayer()=default
u16 animation_frame_count
Definition tile.h:106
u8 material_flags
Definition tile.h:109
video::ITexture * texture
Definition tile.h:99
u32 shader_id
Definition tile.h:101
u16 animation_frame_length_ms
Definition tile.h:105
bool isTransparent() const
Definition tile.h:86
u8 material_type
Definition tile.h:108
u32 texture_id
Definition tile.h:103
bool operator!=(const TileLayer &other) const
Definition tile.h:76
Definition tile.h:140
TileSpec()=default
TileRotation rotation
Tile rotation.
Definition tile.h:146
bool world_aligned
If true, the tile rotation is ignored.
Definition tile.h:144
u8 emissive_light
This much light does the tile emit.
Definition tile.h:148
TileLayer layers[MAX_TILE_LAYERS]
The first is base texture, the second is overlay.
Definition tile.h:150
#define MATERIAL_FLAG_BACKFACE_CULLING
Definition tile.h:29
#define MATERIAL_FLAG_TILEABLE_VERTICAL
Definition tile.h:38
TileRotation
Definition tile.h:129
MaterialType
Definition tile.h:12
@ TILE_MATERIAL_PLAIN_ALPHA
Definition tile.h:24
@ 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:23
#define MATERIAL_FLAG_TILEABLE_HORIZONTAL
Definition tile.h:37
#define MAX_TILE_LAYERS
Definition tile.h:52