Luanti 5.15.0-dev
 
Loading...
Searching...
No Matches
itemdef.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// Copyright (C) 2013 Kahrl <kahrl@gmx.net>
5
6#pragma once
7
9#include <string>
10#include <iostream>
11#include <optional>
12#include <set>
13#include "itemgroup.h"
14#include "sound_spec.h"
15#include "texture_override.h" // TextureOverride
16#include "tool.h"
17#include "util/pointabilities.h"
18#include "util/pointedthing.h"
19#include "tileanimation.h"
20
21struct ToolCapabilities;
22struct ItemDefinition;
23
24/*
25 Base item definition
26*/
27
28enum ItemType : u8
29{
34 ItemType_END // Dummy for validity check
35};
36
38{
41 TouchInteractionMode_USER, // Meaning depends on client-side settings
42 TouchInteractionMode_END, // Dummy for validity check
43};
44
46{
50
52 // Returns the right mode for the pointed thing and resolves any occurrence
53 // of TouchInteractionMode_USER into an actual mode.
55 PointedThingType pointed_type) const;
56 void serialize(std::ostream &os) const;
57 void deSerialize(std::istream &is);
58};
59
61{
62 // May be extended to support meshes in the future
63 std::string name;
65
66 ItemImageDef &operator=(const std::string &other_name)
67 {
68 this->name = other_name;
69 return *this;
70 }
71
72 void reset()
73 {
75 name.clear();
76 }
77
78 void serialize(std::ostream &os, u16 protocol_version) const;
79 void deSerialize(std::istream &is, u16 protocol_version);
80};
81
83{
84 /*
85 Basic item properties
86 */
88 std::string name; // "" = hand
89 std::string description; // Shown in tooltip.
90 std::string short_description;
91
92 /*
93 Visual properties
94 */
95 ItemImageDef inventory_image; // Optional for nodes, mandatory for tools/craftitems
96 ItemImageDef inventory_overlay; // Overlay of inventory_image.
97 ItemImageDef wield_image; // If empty, inventory_image or mesh (only nodes) is used
98 ItemImageDef wield_overlay; // Overlay of wield_image.
99 std::string palette_image; // If specified, the item will be colorized based on this
100 video::SColor color; // The fallback color of the node.
102
103 /*
104 Item stack and interaction properties
105 */
107 bool usable;
109 std::optional<Pointabilities> pointabilities;
110
111 // They may be NULL. If non-NULL, deleted by destructor
113
114 std::optional<WearBarParams> wear_bar_params;
115
120 f32 range;
121
122 // Client shall immediately place this node when player places the item.
123 // Server will update the precise end result a moment later.
124 // "" = no prediction
126 std::optional<u8> place_param2;
128
130
131 /*
132 Some helpful methods
133 */
135 ItemDefinition(const ItemDefinition &def);
138 void reset();
139 void serialize(std::ostream &os, u16 protocol_version) const;
140 void deSerialize(std::istream &is, u16 protocol_version);
141private:
142 void resetInitial();
143};
144
146{
147public:
148 IItemDefManager() = default;
149
150 virtual ~IItemDefManager() = default;
151
152 // Get item definition
153 virtual const ItemDefinition& get(const std::string &name) const=0;
154 // Get alias definition
155 virtual const std::string &getAlias(const std::string &name) const=0;
156 // Get set of all defined item names and aliases
157 virtual void getAll(std::set<std::string> &result) const=0;
158 // Check if item is known
159 virtual bool isKnown(const std::string &name) const=0;
160
161 virtual void serialize(std::ostream &os, u16 protocol_version)=0;
162};
163
165{
166public:
168
169 virtual ~IWritableItemDefManager() = default;
170
171 // Replace the textures of registered nodes with the ones specified in
172 // the texture pack's override.txt files
173 virtual void applyTextureOverrides(const std::vector<TextureOverride> &overrides)=0;
174
175 // Remove all registered item and node definitions and aliases
176 // Then re-add the builtin item definitions
177 virtual void clear()=0;
178 // Register item definition
179 virtual void registerItem(const ItemDefinition &def)=0;
180 virtual void unregisterItem(const std::string &name)=0;
181 // Set an alias so that items named <name> will load as <convert_to>.
182 // Alias is not set if <name> has already been defined.
183 // Alias will be removed if <name> is defined at a later point of time.
184 virtual void registerAlias(const std::string &name,
185 const std::string &convert_to)=0;
186
187 virtual void deSerialize(std::istream &is, u16 protocol_version)=0;
188};
189
Definition itemdef.h:146
virtual void getAll(std::set< std::string > &result) const =0
IItemDefManager()=default
virtual void serialize(std::ostream &os, u16 protocol_version)=0
virtual const std::string & getAlias(const std::string &name) const =0
virtual const ItemDefinition & get(const std::string &name) const =0
virtual bool isKnown(const std::string &name) const =0
virtual ~IItemDefManager()=default
Definition itemdef.h:165
virtual void applyTextureOverrides(const std::vector< TextureOverride > &overrides)=0
virtual ~IWritableItemDefManager()=default
IWritableItemDefManager()=default
virtual void clear()=0
virtual void registerItem(const ItemDefinition &def)=0
virtual void deSerialize(std::istream &is, u16 protocol_version)=0
virtual void registerAlias(const std::string &name, const std::string &convert_to)=0
virtual void unregisterItem(const std::string &name)=0
core::vector3df v3f
Definition irr_v3d.h:11
IWritableItemDefManager * createItemDefManager()
Definition itemdef.cpp:580
ItemType
Definition itemdef.h:29
@ ITEM_TOOL
Definition itemdef.h:33
@ ITEM_NODE
Definition itemdef.h:31
@ ITEM_CRAFT
Definition itemdef.h:32
@ ItemType_END
Definition itemdef.h:34
@ ITEM_NONE
Definition itemdef.h:30
TouchInteractionMode
Definition itemdef.h:38
@ LONG_DIG_SHORT_PLACE
Definition itemdef.h:39
@ TouchInteractionMode_USER
Definition itemdef.h:41
@ SHORT_DIG_LONG_PLACE
Definition itemdef.h:40
@ TouchInteractionMode_END
Definition itemdef.h:42
std::unordered_map< std::string, int > ItemGroupList
Definition itemgroup.h:10
PointedThingType
Definition pointedthing.h:14
Definition itemdef.h:83
u16 stack_max
Definition itemdef.h:106
bool wallmounted_rotate_vertical
Definition itemdef.h:127
SoundSpec sound_use_air
Definition itemdef.h:119
TouchInteraction touch_interaction
Definition itemdef.h:129
ItemGroupList groups
Definition itemdef.h:116
ItemDefinition()
Definition itemdef.cpp:107
ItemType type
Definition itemdef.h:87
f32 range
Definition itemdef.h:120
SoundSpec sound_place_failed
Definition itemdef.h:118
std::optional< Pointabilities > pointabilities
Definition itemdef.h:109
std::string palette_image
Definition itemdef.h:99
std::string node_placement_prediction
Definition itemdef.h:125
ToolCapabilities * tool_capabilities
Definition itemdef.h:112
std::optional< u8 > place_param2
Definition itemdef.h:126
std::optional< WearBarParams > wear_bar_params
Definition itemdef.h:114
void reset()
Definition itemdef.cpp:169
std::string short_description
Definition itemdef.h:90
SoundSpec sound_place
Definition itemdef.h:117
std::string name
Definition itemdef.h:88
~ItemDefinition()
Definition itemdef.cpp:156
bool usable
Definition itemdef.h:107
ItemDefinition & operator=(const ItemDefinition &def)
Definition itemdef.cpp:118
ItemImageDef wield_image
Definition itemdef.h:97
v3f wield_scale
Definition itemdef.h:101
void deSerialize(std::istream &is, u16 protocol_version)
Definition itemdef.cpp:278
ItemImageDef inventory_image
Definition itemdef.h:95
video::SColor color
Definition itemdef.h:100
void serialize(std::ostream &os, u16 protocol_version) const
Definition itemdef.cpp:201
ItemImageDef inventory_overlay
Definition itemdef.h:96
std::string description
Definition itemdef.h:89
ItemImageDef wield_overlay
Definition itemdef.h:98
SoundSpec sound_use
Definition itemdef.h:119
void resetInitial()
Definition itemdef.cpp:161
bool liquids_pointable
Definition itemdef.h:108
Definition itemdef.h:61
void serialize(std::ostream &os, u16 protocol_version) const
Definition itemdef.cpp:83
void deSerialize(std::istream &is, u16 protocol_version)
Definition itemdef.cpp:96
std::string name
Definition itemdef.h:63
ItemImageDef & operator=(const std::string &other_name)
Definition itemdef.h:66
void reset()
Definition itemdef.h:72
TileAnimationParams animation
Definition itemdef.h:64
Describes the sound information for playback.
Definition sound_spec.h:18
Definition tileanimation.h:18
enum TileAnimationType type
Definition tileanimation.h:19
Definition tool.h:53
Definition itemdef.h:46
TouchInteractionMode getMode(const ItemDefinition &selected_def, PointedThingType pointed_type) const
Definition itemdef.cpp:24
void serialize(std::ostream &os) const
Definition itemdef.cpp:55
TouchInteractionMode pointed_object
Definition itemdef.h:49
TouchInteraction()
Definition itemdef.cpp:17
void deSerialize(std::istream &is)
Definition itemdef.cpp:62
TouchInteractionMode pointed_node
Definition itemdef.h:48
TouchInteractionMode pointed_nothing
Definition itemdef.h:47
@ TAT_NONE
Definition tileanimation.h:12