aboutsummaryrefslogtreecommitdiff
path: root/src/objdef.h
blob: b06d4a85e421fe101b6f990042667be96c39ead2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/*
Minetest
Copyright (C) 2010-2015 kwolekr, Ryan Kwolek <kwolekr@minetest.net>

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/

#pragma once

#include "util/basic_macros.h"
#include "porting.h"

class IGameDef;
class INodeDefManager;

#define OBJDEF_INVALID_INDEX ((u32)(-1))
#define OBJDEF_INVALID_HANDLE 0
#define OBJDEF_HANDLE_SALT 0x00585e6fu
#define OBJDEF_MAX_ITEMS (1 << 18)
#define OBJDEF_UID_MASK ((1 << 7) - 1)

typedef u32 ObjDefHandle;

enum ObjDefType {
	OBJDEF_GENERIC,
	OBJDEF_BIOME,
	OBJDEF_ORE,
	OBJDEF_DECORATION,
	OBJDEF_SCHEMATIC,
};

class ObjDef {
public:
	virtual ~ObjDef() = default;

	u32 index;
	u32 uid;
	ObjDefHandle handle;
	std::string name;
};

// WARNING: Ownership of ObjDefs is transferred to the ObjDefManager it is
// added/set to.  Note that ObjDefs managed by ObjDefManager are NOT refcounted,
// so the same ObjDef instance must not be referenced multiple
class ObjDefManager {
public:
	ObjDefManager(IGameDef *gamedef, ObjDefType type);
	virtual ~ObjDefManager();
	DISABLE_CLASS_COPY(ObjDefManager);

	virtual const char *getObjectTitle() const { return "ObjDef"; }

	virtual void clear();
	virtual ObjDef *getByName(const std::string &name) const;

	//// Add new/get/set object definitions by handle
	virtual ObjDefHandle add(ObjDef *obj);
	virtual ObjDef *get(ObjDefHandle handle) const;
	virtual ObjDef *set(ObjDefHandle handle, ObjDef *obj);

	//// Raw variants that work on indexes
	virtual u32 addRaw(ObjDef *obj);

	// It is generally assumed that getRaw() will always return a valid object
	// This won't be true if people do odd things such as call setRaw() with NULL
	virtual ObjDef *getRaw(u32 index) const;
	virtual ObjDef *setRaw(u32 index, ObjDef *obj);

	size_t getNumObjects() const { return m_objects.size(); }
	ObjDefType getType() const { return m_objtype; }
	INodeDefManager *getNodeDef() const { return m_ndef; }

	u32 validateHandle(ObjDefHandle handle) const;
	static ObjDefHandle createHandle(u32 index, ObjDefType type, u32 uid);
	static bool decodeHandle(ObjDefHandle handle, u32 *index,
		ObjDefType *type, u32 *uid);

protected:
	INodeDefManager *m_ndef;
	std::vector<ObjDef *> m_objects;
	ObjDefType m_objtype;
};
"hl opt">/gettext-$gettext_version.zip [ -e $packagedir/freetype2-$freetype_version.zip ] || wget http://minetest.kitsunemimi.pw/freetype2-$freetype_version-win64.zip \ -c -O $packagedir/freetype2-$freetype_version.zip [ -e $packagedir/sqlite3-$sqlite3_version.zip ] || wget http://minetest.kitsunemimi.pw/sqlite3-$sqlite3_version-win64.zip \ -c -O $packagedir/sqlite3-$sqlite3_version.zip [ -e $packagedir/luajit-$luajit_version.zip ] || wget http://minetest.kitsunemimi.pw/luajit-$luajit_version-win64.zip \ -c -O $packagedir/luajit-$luajit_version.zip [ -e $packagedir/libleveldb-$leveldb_version.zip ] || wget http://minetest.kitsunemimi.pw/libleveldb-$leveldb_version-win64.zip \ -c -O $packagedir/libleveldb-$leveldb_version.zip [ -e $packagedir/openal_stripped.zip ] || wget http://minetest.kitsunemimi.pw/openal_stripped64.zip \ -c -O $packagedir/openal_stripped.zip # Extract stuff cd $libdir [ -d irrlicht ] || unzip -o $packagedir/irrlicht-$irrlicht_version.zip -d irrlicht [ -d zlib ] || unzip -o $packagedir/zlib-$zlib_version.zip -d zlib [ -d libogg ] || unzip -o $packagedir/libogg-$ogg_version.zip -d libogg [ -d libvorbis ] || unzip -o $packagedir/libvorbis-$vorbis_version.zip -d libvorbis [ -d libcurl ] || unzip -o $packagedir/curl-$curl_version.zip -d libcurl [ -d gettext ] || unzip -o $packagedir/gettext-$gettext_version.zip -d gettext [ -d freetype ] || unzip -o $packagedir/freetype2-$freetype_version.zip -d freetype [ -d sqlite3 ] || unzip -o $packagedir/sqlite3-$sqlite3_version.zip -d sqlite3 [ -d openal_stripped ] || unzip -o $packagedir/openal_stripped.zip [ -d luajit ] || unzip -o $packagedir/luajit-$luajit_version.zip -d luajit [ -d leveldb ] || unzip -o $packagedir/libleveldb-$leveldb_version.zip -d leveldb # Get minetest cd $builddir if [ ! "x$EXISTING_MINETEST_DIR" = "x" ]; then ln -s $EXISTING_MINETEST_DIR minetest else [ -d minetest ] && (cd minetest && git pull) || (git clone https://github.com/minetest/minetest) fi cd minetest git_hash=$(git rev-parse --short HEAD) # Get minetest_game cd games if [ "x$NO_MINETEST_GAME" = "x" ]; then [ -d minetest_game ] && (cd minetest_game && git pull) || (git clone https://github.com/minetest/minetest_game) fi cd ../.. # Build the thing cd minetest [ -d _build ] && rm -Rf _build/ mkdir _build cd _build cmake .. \ -DCMAKE_TOOLCHAIN_FILE=$toolchain_file \ -DCMAKE_INSTALL_PREFIX=/tmp \ -DVERSION_EXTRA=$git_hash \ -DBUILD_CLIENT=1 -DBUILD_SERVER=0 \ \ -DENABLE_SOUND=1 \ -DENABLE_CURL=1 \ -DENABLE_GETTEXT=1 \ -DENABLE_FREETYPE=1 \ -DENABLE_LEVELDB=1 \ \ -DIRRLICHT_INCLUDE_DIR=$libdir/irrlicht/include \ -DIRRLICHT_LIBRARY=$libdir/irrlicht/lib/Win64-gcc/libIrrlicht.dll.a \ -DIRRLICHT_DLL=$libdir/irrlicht/bin/Win64-gcc/Irrlicht.dll \ \ -DZLIB_INCLUDE_DIR=$libdir/zlib/include \ -DZLIB_LIBRARIES=$libdir/zlib/lib/libz.dll.a \ -DZLIB_DLL=$libdir/zlib/bin/zlib1.dll \ \ -DLUA_INCLUDE_DIR=$libdir/luajit/include \ -DLUA_LIBRARY=$libdir/luajit/libluajit.a \ \ -DOGG_INCLUDE_DIR=$libdir/libogg/include \ -DOGG_LIBRARY=$libdir/libogg/lib/libogg.dll.a \ -DOGG_DLL=$libdir/libogg/bin/libogg-0.dll \ \ -DVORBIS_INCLUDE_DIR=$libdir/libvorbis/include \ -DVORBIS_LIBRARY=$libdir/libvorbis/lib/libvorbis.dll.a \ -DVORBIS_DLL=$libdir/libvorbis/bin/libvorbis-0.dll \ -DVORBISFILE_LIBRARY=$libdir/libvorbis/lib/libvorbisfile.dll.a \ -DVORBISFILE_DLL=$libdir/libvorbis/bin/libvorbisfile-3.dll \ \ -DOPENAL_INCLUDE_DIR=$libdir/openal_stripped/include/AL \ -DOPENAL_LIBRARY=$libdir/openal_stripped/lib/libOpenAL32.dll.a \ -DOPENAL_DLL=$libdir/openal_stripped/bin/OpenAL32.dll \ \ -DCURL_DLL=$libdir/libcurl/bin/libcurl-4.dll \ -DCURL_INCLUDE_DIR=$libdir/libcurl/include \ -DCURL_LIBRARY=$libdir/libcurl/lib/libcurl.dll.a \ \ -DGETTEXT_MSGFMT=`which msgfmt` \ -DGETTEXT_DLL=$libdir/gettext/bin/libintl-8.dll \ -DGETTEXT_ICONV_DLL=$libdir/gettext/bin/libiconv-2.dll \ -DGETTEXT_INCLUDE_DIR=$libdir/gettext/include \ -DGETTEXT_LIBRARY=$libdir/gettext/lib/libintl.dll.a \ \ -DFREETYPE_INCLUDE_DIR_freetype2=$libdir/freetype/include/freetype2 \ -DFREETYPE_INCLUDE_DIR_ft2build=$libdir/freetype/include/freetype2 \ -DFREETYPE_LIBRARY=$libdir/freetype/lib/libfreetype.dll.a \ -DFREETYPE_DLL=$libdir/freetype/bin/libfreetype-6.dll \ \ -DSQLITE3_INCLUDE_DIR=$libdir/sqlite3/include \ -DSQLITE3_LIBRARY=$libdir/sqlite3/lib/libsqlite3.dll.a \ -DSQLITE3_DLL=$libdir/sqlite3/bin/libsqlite3-0.dll \ \ -DLEVELDB_INCLUDE_DIR=$libdir/leveldb/include \ -DLEVELDB_LIBRARY=$libdir/leveldb/lib/libleveldb.dll.a \ -DLEVELDB_DLL=$libdir/leveldb/bin/libleveldb.dll make -j2 [ "x$NO_PACKAGE" = "x" ] && make package exit 0 # EOF