aboutsummaryrefslogtreecommitdiff
path: root/src/client/game.h
Commit message (Expand)AuthorAge
* Move client-specific files to 'src/client' (#7902)Quentin Bazin2018-11-28
ref='#n14'>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 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
/*
Minetest
Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>

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.
*/


/******************************************************************************/
/******************************************************************************/
/* WARNING!!!! do NOT add this header in any include file or any code file    */
/*             not being a script/modapi file!!!!!!!!                         */
/******************************************************************************/
/******************************************************************************/

#pragma once

extern "C" {
#include <lua.h>
}

#include <iostream>
#include <vector>

#include "irrlichttypes_bloated.h"
#include "util/string.h"
#include "itemgroup.h"
#include "itemdef.h"
#include "c_types.h"
// We do a explicit path include because by default c_content.h include src/client/hud.h
// prior to the src/hud.h, which is not good on server only build
#include "../../hud.h"
#include "content/mods.h"

namespace Json { class Value; }

struct MapNode;
class NodeDefManager;
struct PointedThing;
struct ItemStack;
struct ItemDefinition;
struct ToolCapabilities;
struct ObjectProperties;
struct SimpleSoundSpec;
struct ServerPlayingSound;
class Inventory;
class InventoryList;
struct NodeBox;
struct ContentFeatures;
struct TileDef;
class IGameDef;
struct DigParams;
struct HitParams;
struct EnumString;
struct NoiseParams;
class Schematic;
class ServerActiveObject;
struct collisionMoveResult;

extern struct EnumString es_TileAnimationType[];

void               read_content_features     (lua_State *L, ContentFeatures &f,
                                              int index);
void               push_content_features     (lua_State *L,
                                              const ContentFeatures &c);

void               push_nodebox              (lua_State *L,
                                              const NodeBox &box);
void               push_box                  (lua_State *L,
                                              const std::vector<aabb3f> &box);

void               push_palette              (lua_State *L,
                                              const std::vector<video::SColor> *palette);

TileDef            read_tiledef              (lua_State *L, int index,
                                              u8 drawtype);

void               read_soundspec            (lua_State *L, int index,
                                              SimpleSoundSpec &spec);
NodeBox            read_nodebox              (lua_State *L, int index);

void               read_server_sound_params  (lua_State *L, int index,
                                              ServerPlayingSound &params);

void               push_dig_params           (lua_State *L,
                                              const DigParams &params);
void               push_hit_params           (lua_State *L,
                                              const HitParams &params);

ItemStack          read_item                 (lua_State *L, int index, IItemDefManager *idef);

struct TileAnimationParams read_animation_definition(lua_State *L, int index);

ToolCapabilities   read_tool_capabilities    (lua_State *L, int table);
void               push_tool_capabilities    (lua_State *L,
                                              const ToolCapabilities &prop);

void read_item_definition (lua_State *L, int index, const ItemDefinition &default_def,
		ItemDefinition &def);
void               push_item_definition      (lua_State *L,
                                              const ItemDefinition &i);
void               push_item_definition_full (lua_State *L,
                                              const ItemDefinition &i);

void               read_object_properties    (lua_State *L, int index,
                                              ServerActiveObject *sao,
                                              ObjectProperties *prop,
                                              IItemDefManager *idef);
void               push_object_properties    (lua_State *L,
                                              ObjectProperties *prop);

void               push_inventory_list       (lua_State *L,
                                              const InventoryList &invlist);
void               push_inventory_lists      (lua_State *L,
                                              const Inventory &inv);
void               read_inventory_list       (lua_State *L, int tableindex,
                                              Inventory *inv, const char *name,
                                              IGameDef *gdef, int forcesize=-1);

MapNode            readnode                  (lua_State *L, int index,
                                              const NodeDefManager *ndef);
void               pushnode                  (lua_State *L, const MapNode &n,
                                              const NodeDefManager *ndef);


void               read_groups               (lua_State *L, int index,
                                              ItemGroupList &result);

void               push_groups               (lua_State *L,
                                              const ItemGroupList &groups);

//TODO rename to "read_enum_field"
int                getenumfield              (lua_State *L, int table,
                                              const char *fieldname,
                                              const EnumString *spec,
                                              int default_);

bool               getflagsfield             (lua_State *L, int table,
                                              const char *fieldname,
                                              FlagDesc *flagdesc,
                                              u32 *flags, u32 *flagmask);

bool               read_flags                (lua_State *L, int index,
                                              FlagDesc *flagdesc,
                                              u32 *flags, u32 *flagmask);

void               push_flags_string         (lua_State *L, FlagDesc *flagdesc,
                                              u32 flags, u32 flagmask);

u32                read_flags_table          (lua_State *L, int table,
                                              FlagDesc *flagdesc, u32 *flagmask);

void               push_items                (lua_State *L,
                                              const std::vector<ItemStack> &items);

std::vector<ItemStack> read_items            (lua_State *L,
                                              int index,
                                              IGameDef* gdef);

void               push_soundspec            (lua_State *L,
                                              const SimpleSoundSpec &spec);

bool               string_to_enum            (const EnumString *spec,
                                              int &result,
                                              const std::string &str);

bool               read_noiseparams          (lua_State *L, int index,
                                              NoiseParams *np);
void               push_noiseparams          (lua_State *L, NoiseParams *np);

void               luaentity_get             (lua_State *L,u16 id);

bool               push_json_value           (lua_State *L,
                                              const Json::Value &value,
                                              int nullindex);
void               read_json_value           (lua_State *L, Json::Value &root,
                                              int index, u8 recursion = 0);

/*!
 * Pushes a Lua `pointed_thing` to the given Lua stack.
 * \param csm If true, a client side pointed thing is pushed
 * \param hitpoint If true, the exact pointing location is also pushed
 */
void push_pointed_thing(lua_State *L, const PointedThing &pointed, bool csm =
	false, bool hitpoint = false);

void push_objectRef            (lua_State *L, const u16 id);

void read_hud_element          (lua_State *L, HudElement *elem);

void push_hud_element          (lua_State *L, HudElement *elem);

bool read_hud_change           (lua_State *L, HudElementStat &stat, HudElement *elem, void **value);

void push_collision_move_result(lua_State *L, const collisionMoveResult &res);

void push_mod_spec(lua_State *L, const ModSpec &spec, bool include_unsatisfied);