Luanti 5.11.0-dev
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Loading...
Searching...
No Matches
objdef.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2010-2015 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
4
5#pragma once
6
7#include "util/basic_macros.h" // DISABLE_CLASS_COPY
8#include "irrlichttypes.h"
9#include <string>
10#include <vector>
11
12class IGameDef;
13class NodeDefManager;
14
15#define OBJDEF_INVALID_INDEX ((u32)(-1))
16#define OBJDEF_INVALID_HANDLE 0
17#define OBJDEF_HANDLE_SALT 0x00585e6fu
18#define OBJDEF_MAX_ITEMS (1 << 18)
19#define OBJDEF_UID_MASK ((1 << 7) - 1)
20
21typedef u32 ObjDefHandle;
22
30
31class ObjDef {
32public:
33 virtual ~ObjDef() = default;
34
35 // Only implemented by child classes (leafs in class hierarchy)
36 // Should create new object of its own type, call cloneTo() of parent class
37 // and copy its own instance variables over
38 virtual ObjDef *clone() const = 0;
39
40 u32 index;
41 u32 uid;
43 std::string name;
44
45protected:
46 // Only implemented by classes that have children themselves
47 // by copying the defintion and changing that argument type (!!!)
48 // Should defer to parent class cloneTo() if applicable and then copy
49 // over its own properties
50 void cloneTo(ObjDef *def) const;
51};
52
53// WARNING: Ownership of ObjDefs is transferred to the ObjDefManager it is
54// added/set to. Note that ObjDefs managed by ObjDefManager are NOT refcounted,
55// so the same ObjDef instance must not be referenced multiple
56// TODO: const correctness for getter methods
58public:
59 ObjDefManager(IGameDef *gamedef, ObjDefType type);
60 virtual ~ObjDefManager();
62
63 // T *clone() const; // implemented in child class with correct type
64
65 virtual const char *getObjectTitle() const { return "ObjDef"; }
66
67 virtual void clear();
68 virtual ObjDef *getByName(const std::string &name) const;
69
71 virtual ObjDefHandle add(ObjDef *obj);
72 virtual ObjDef *get(ObjDefHandle handle) const;
73 virtual ObjDef *set(ObjDefHandle handle, ObjDef *obj);
74
76 virtual u32 addRaw(ObjDef *obj);
77
78 // It is generally assumed that getRaw() will always return a valid object
79 // This won't be true if people do odd things such as call setRaw() with NULL
80 virtual ObjDef *getRaw(u32 index) const;
81 virtual ObjDef *setRaw(u32 index, ObjDef *obj);
82
83 size_t getNumObjects() const { return m_objects.size(); }
84 ObjDefType getType() const { return m_objtype; }
85 const NodeDefManager *getNodeDef() const { return m_ndef; }
86
87 u32 validateHandle(ObjDefHandle handle) const;
88 static ObjDefHandle createHandle(u32 index, ObjDefType type, u32 uid);
89 static bool decodeHandle(ObjDefHandle handle, u32 *index,
90 ObjDefType *type, u32 *uid);
91
92protected:
94 // Helper for child classes to implement clone()
95 void cloneTo(ObjDefManager *mgr) const;
96
98 std::vector<ObjDef *> m_objects;
100};
Definition gamedef.h:36
This class is for getting the actual properties of nodes from their content ID.
Definition nodedef.h:530
Definition objdef.h:57
void cloneTo(ObjDefManager *mgr) const
Definition objdef.cpp:184
const NodeDefManager * getNodeDef() const
Definition objdef.h:85
virtual ObjDefHandle add(ObjDef *obj)
Definition objdef.cpp:27
virtual ~ObjDefManager()
Definition objdef.cpp:20
static bool decodeHandle(ObjDefHandle handle, u32 *index, ObjDefType *type, u32 *uid)
Definition objdef.cpp:158
ObjDefManager()
Definition objdef.h:93
u32 validateHandle(ObjDefHandle handle) const
Definition objdef.cpp:127
virtual const char * getObjectTitle() const
Definition objdef.h:65
size_t getNumObjects() const
Definition objdef.h:83
static ObjDefHandle createHandle(u32 index, ObjDefType type, u32 uid)
Definition objdef.cpp:144
virtual ObjDef * getRaw(u32 index) const
Definition objdef.cpp:92
virtual void clear()
Definition objdef.cpp:118
virtual ObjDef * get(ObjDefHandle handle) const
Definition objdef.cpp:43
const NodeDefManager * m_ndef
Definition objdef.h:97
DISABLE_CLASS_COPY(ObjDefManager)
ObjDefType m_objtype
Definition objdef.h:99
virtual ObjDef * set(ObjDefHandle handle, ObjDef *obj)
Definition objdef.cpp:50
std::vector< ObjDef * > m_objects
Definition objdef.h:98
ObjDefType getType() const
Definition objdef.h:84
virtual u32 addRaw(ObjDef *obj)
Definition objdef.cpp:66
virtual ObjDef * setRaw(u32 index, ObjDef *obj)
Definition objdef.cpp:98
virtual ObjDef * getByName(const std::string &name) const
Definition objdef.cpp:106
Definition objdef.h:31
u32 uid
Definition objdef.h:41
void cloneTo(ObjDef *def) const
Definition objdef.cpp:176
virtual ~ObjDef()=default
virtual ObjDef * clone() const =0
u32 index
Definition objdef.h:40
ObjDefHandle handle
Definition objdef.h:42
std::string name
Definition objdef.h:43
u32 ObjDefHandle
Definition objdef.h:21
ObjDefType
Definition objdef.h:23
@ OBJDEF_SCHEMATIC
Definition objdef.h:28
@ OBJDEF_BIOME
Definition objdef.h:25
@ OBJDEF_DECORATION
Definition objdef.h:27
@ OBJDEF_GENERIC
Definition objdef.h:24
@ OBJDEF_ORE
Definition objdef.h:26