forked from Mirrorlandia_minetest/minetest
Environment & IGameDef code refactoring (#4985)
* Environment code refactoring * Cleanup includes & class declarations in client & server environment to improve build speed * ServerEnvironment::m_gamedef is now a pointer to Server instead of IGameDef, permitting to cleanup many casts. * Cleanup IGameDef * Move ITextureSource* IGameDef::getTextureSource() to Client only. * Also move ITextureSource *IGameDef::tsrc() helper * drop getShaderSource, getSceneManager, getSoundManager & getCamera abstract call * drop unused emerge() call * cleanup server unused functions (mentionned before) * Drop one unused parameter from ContentFeatures::updateTextures * move checkLocalPrivilege to Client * Remove some unnecessary casts * create_formspec_menu: remove IWritableTextureSource pointer, as client already knows it * Fix some comments * Change required IGameDef to Server/Client pointers * Previous change that game.cpp sometimes calls functions with Client + InventoryManager + IGameDef in same functions but it's the same objects * Remove duplicate Client pointer in GUIFormSpecMenu::GUIFormSpecMenu * drop ClientMap::sectorWasDrawn which is unused
This commit is contained in:
parent
11df7e886a
commit
8e7449e092
@ -117,6 +117,7 @@ LOCAL_SRC_FILES := \
|
||||
jni/src/cavegen.cpp \
|
||||
jni/src/chat.cpp \
|
||||
jni/src/client.cpp \
|
||||
jni/src/clientenvironment.cpp \
|
||||
jni/src/clientiface.cpp \
|
||||
jni/src/clientmap.cpp \
|
||||
jni/src/clientmedia.cpp \
|
||||
@ -210,6 +211,7 @@ LOCAL_SRC_FILES := \
|
||||
jni/src/rollback_interface.cpp \
|
||||
jni/src/serialization.cpp \
|
||||
jni/src/server.cpp \
|
||||
jni/src/serverenvironment.cpp \
|
||||
jni/src/serverlist.cpp \
|
||||
jni/src/serverobject.cpp \
|
||||
jni/src/shader.cpp \
|
||||
|
@ -27,7 +27,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "settings.h"
|
||||
#include "wieldmesh.h"
|
||||
#include "noise.h" // easeCurve
|
||||
#include "gamedef.h"
|
||||
#include "sound.h"
|
||||
#include "event.h"
|
||||
#include "profiler.h"
|
||||
@ -41,7 +40,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "nodedef.h"
|
||||
|
||||
Camera::Camera(scene::ISceneManager* smgr, MapDrawControl& draw_control,
|
||||
IGameDef *gamedef):
|
||||
Client *client):
|
||||
m_playernode(NULL),
|
||||
m_headnode(NULL),
|
||||
m_cameranode(NULL),
|
||||
@ -50,7 +49,7 @@ Camera::Camera(scene::ISceneManager* smgr, MapDrawControl& draw_control,
|
||||
m_wieldnode(NULL),
|
||||
|
||||
m_draw_control(draw_control),
|
||||
m_gamedef(gamedef),
|
||||
m_client(client),
|
||||
|
||||
m_camera_position(0,0,0),
|
||||
m_camera_direction(0,0,0),
|
||||
@ -88,7 +87,7 @@ Camera::Camera(scene::ISceneManager* smgr, MapDrawControl& draw_control,
|
||||
m_wieldmgr = smgr->createNewSceneManager();
|
||||
m_wieldmgr->addCameraSceneNode();
|
||||
m_wieldnode = new WieldMeshSceneNode(m_wieldmgr->getRootSceneNode(), m_wieldmgr, -1, false);
|
||||
m_wieldnode->setItem(ItemStack(), m_gamedef);
|
||||
m_wieldnode->setItem(ItemStack(), m_client);
|
||||
m_wieldnode->drop(); // m_wieldmgr grabbed it
|
||||
|
||||
/* TODO: Add a callback function so these can be updated when a setting
|
||||
@ -151,7 +150,7 @@ void Camera::step(f32 dtime)
|
||||
m_wield_change_timer = MYMIN(m_wield_change_timer + dtime, 0.125);
|
||||
|
||||
if (m_wield_change_timer >= 0 && was_under_zero)
|
||||
m_wieldnode->setItem(m_wield_item_next, m_gamedef);
|
||||
m_wieldnode->setItem(m_wield_item_next, m_client);
|
||||
|
||||
if (m_view_bobbing_state != 0)
|
||||
{
|
||||
@ -189,7 +188,7 @@ void Camera::step(f32 dtime)
|
||||
(was > 0.5f && m_view_bobbing_anim <= 0.5f));
|
||||
if(step) {
|
||||
MtEvent *e = new SimpleTriggerEvent("ViewBobbingStep");
|
||||
m_gamedef->event()->put(e);
|
||||
m_client->event()->put(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -210,10 +209,10 @@ void Camera::step(f32 dtime)
|
||||
if(m_digging_button == 0)
|
||||
{
|
||||
MtEvent *e = new SimpleTriggerEvent("CameraPunchLeft");
|
||||
m_gamedef->event()->put(e);
|
||||
m_client->event()->put(e);
|
||||
} else if(m_digging_button == 1) {
|
||||
MtEvent *e = new SimpleTriggerEvent("CameraPunchRight");
|
||||
m_gamedef->event()->put(e);
|
||||
m_client->event()->put(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -352,7 +351,7 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime,
|
||||
my_cp.Y = m_camera_position.Y + (m_camera_direction.Y*-i);
|
||||
|
||||
// Prevent camera positioned inside nodes
|
||||
INodeDefManager *nodemgr = m_gamedef->ndef();
|
||||
INodeDefManager *nodemgr = m_client->ndef();
|
||||
MapNode n = c_env.getClientMap().getNodeNoEx(floatToInt(my_cp, BS));
|
||||
const ContentFeatures& features = nodemgr->get(n);
|
||||
if(features.walkable)
|
||||
@ -390,7 +389,7 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime,
|
||||
|
||||
// Get FOV
|
||||
f32 fov_degrees;
|
||||
if (player->getPlayerControl().zoom && m_gamedef->checkLocalPrivilege("zoom")) {
|
||||
if (player->getPlayerControl().zoom && m_client->checkLocalPrivilege("zoom")) {
|
||||
fov_degrees = m_cache_zoom_fov;
|
||||
} else {
|
||||
fov_degrees = m_cache_fov;
|
||||
@ -468,7 +467,7 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime,
|
||||
const bool climbing = movement_Y && player->is_climbing;
|
||||
if ((walking || swimming || climbing) &&
|
||||
m_cache_view_bobbing &&
|
||||
(!g_settings->getBool("free_move") || !m_gamedef->checkLocalPrivilege("fly")))
|
||||
(!g_settings->getBool("free_move") || !m_client->checkLocalPrivilege("fly")))
|
||||
{
|
||||
// Start animation
|
||||
m_view_bobbing_state = 1;
|
||||
|
@ -33,7 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
|
||||
class LocalPlayer;
|
||||
struct MapDrawControl;
|
||||
class IGameDef;
|
||||
class Client;
|
||||
class WieldMeshSceneNode;
|
||||
|
||||
struct Nametag {
|
||||
@ -61,7 +61,7 @@ class Camera
|
||||
{
|
||||
public:
|
||||
Camera(scene::ISceneManager* smgr, MapDrawControl& draw_control,
|
||||
IGameDef *gamedef);
|
||||
Client *client);
|
||||
~Camera();
|
||||
|
||||
// Get player scene node.
|
||||
@ -189,7 +189,7 @@ private:
|
||||
// draw control
|
||||
MapDrawControl& m_draw_control;
|
||||
|
||||
IGameDef *m_gamedef;
|
||||
Client *m_client;
|
||||
video::IVideoDriver *m_driver;
|
||||
|
||||
// Absolute camera position
|
||||
|
@ -221,7 +221,7 @@ Client::Client(
|
||||
m_event(event),
|
||||
m_mesh_update_thread(),
|
||||
m_env(
|
||||
new ClientMap(this, this, control,
|
||||
new ClientMap(this, control,
|
||||
device->getSceneManager()->getRootSceneNode(),
|
||||
device->getSceneManager(), 666),
|
||||
device->getSceneManager(),
|
||||
|
17
src/client.h
17
src/client.h
@ -34,7 +34,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "localplayer.h"
|
||||
#include "hud.h"
|
||||
#include "particles.h"
|
||||
#include "network/networkpacket.h"
|
||||
|
||||
struct MeshMakeData;
|
||||
class MapBlockMesh;
|
||||
@ -51,6 +50,7 @@ class Database;
|
||||
class Mapper;
|
||||
struct MinimapMapblock;
|
||||
class Camera;
|
||||
class NetworkPacket;
|
||||
|
||||
struct QueuedMeshUpdate
|
||||
{
|
||||
@ -402,9 +402,6 @@ public:
|
||||
|
||||
void ProcessData(NetworkPacket *pkt);
|
||||
|
||||
// Returns true if something was received
|
||||
bool AsyncProcessPacket();
|
||||
bool AsyncProcessData();
|
||||
void Send(NetworkPacket* pkt);
|
||||
|
||||
void interact(u8 action, const PointedThing& pointed);
|
||||
@ -422,8 +419,9 @@ public:
|
||||
void sendRespawn();
|
||||
void sendReady();
|
||||
|
||||
ClientEnvironment& getEnv()
|
||||
{ return m_env; }
|
||||
ClientEnvironment& getEnv() { return m_env; }
|
||||
ITextureSource *tsrc() { return getTextureSource(); }
|
||||
ISoundManager *sound() { return getSoundManager(); }
|
||||
|
||||
// Causes urgent mesh updates (unlike Map::add/removeNodeWithEvent)
|
||||
void removeNode(v3s16 p);
|
||||
@ -521,14 +519,15 @@ public:
|
||||
virtual IItemDefManager* getItemDefManager();
|
||||
virtual INodeDefManager* getNodeDefManager();
|
||||
virtual ICraftDefManager* getCraftDefManager();
|
||||
virtual ITextureSource* getTextureSource();
|
||||
ITextureSource* getTextureSource();
|
||||
virtual IShaderSource* getShaderSource();
|
||||
virtual scene::ISceneManager* getSceneManager();
|
||||
IShaderSource *shsrc() { return getShaderSource(); }
|
||||
scene::ISceneManager* getSceneManager();
|
||||
virtual u16 allocateUnknownNodeId(const std::string &name);
|
||||
virtual ISoundManager* getSoundManager();
|
||||
virtual MtEventManager* getEventManager();
|
||||
virtual ParticleManager* getParticleManager();
|
||||
virtual bool checkLocalPrivilege(const std::string &priv)
|
||||
bool checkLocalPrivilege(const std::string &priv)
|
||||
{ return checkPrivilege(priv); }
|
||||
virtual scene::IAnimatedMesh* getMesh(const std::string &filename);
|
||||
|
||||
|
@ -34,13 +34,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
*/
|
||||
|
||||
ClientEnvironment::ClientEnvironment(ClientMap *map, scene::ISceneManager *smgr,
|
||||
ITextureSource *texturesource, IGameDef *gamedef,
|
||||
ITextureSource *texturesource, Client *client,
|
||||
IrrlichtDevice *irr):
|
||||
m_map(map),
|
||||
m_local_player(NULL),
|
||||
m_smgr(smgr),
|
||||
m_texturesource(texturesource),
|
||||
m_gamedef(gamedef),
|
||||
m_client(client),
|
||||
m_irr(irr)
|
||||
{
|
||||
char zero = 0;
|
||||
@ -94,7 +94,7 @@ void ClientEnvironment::step(float dtime)
|
||||
stepTimeOfDay(dtime);
|
||||
|
||||
// Get some settings
|
||||
bool fly_allowed = m_gamedef->checkLocalPrivilege("fly");
|
||||
bool fly_allowed = m_client->checkLocalPrivilege("fly");
|
||||
bool free_move = fly_allowed && g_settings->getBool("free_move");
|
||||
|
||||
// Get local player
|
||||
@ -223,7 +223,7 @@ void ClientEnvironment::step(float dtime)
|
||||
f32 post_factor = 1; // 1 hp per node/s
|
||||
if(info.type == COLLISION_NODE)
|
||||
{
|
||||
const ContentFeatures &f = m_gamedef->ndef()->
|
||||
const ContentFeatures &f = m_client->ndef()->
|
||||
get(m_map->getNodeNoEx(info.node_p));
|
||||
// Determine fall damage multiplier
|
||||
int addp = itemgroup_get(f.groups, "fall_damage_add_percent");
|
||||
@ -237,7 +237,7 @@ void ClientEnvironment::step(float dtime)
|
||||
if(damage != 0){
|
||||
damageLocalPlayer(damage, true);
|
||||
MtEvent *e = new SimpleTriggerEvent("PlayerFallingDamage");
|
||||
m_gamedef->event()->put(e);
|
||||
m_client->event()->put(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -259,11 +259,11 @@ void ClientEnvironment::step(float dtime)
|
||||
|
||||
u32 damage_per_second = 0;
|
||||
damage_per_second = MYMAX(damage_per_second,
|
||||
m_gamedef->ndef()->get(n1).damage_per_second);
|
||||
m_client->ndef()->get(n1).damage_per_second);
|
||||
damage_per_second = MYMAX(damage_per_second,
|
||||
m_gamedef->ndef()->get(n2).damage_per_second);
|
||||
m_client->ndef()->get(n2).damage_per_second);
|
||||
damage_per_second = MYMAX(damage_per_second,
|
||||
m_gamedef->ndef()->get(n3).damage_per_second);
|
||||
m_client->ndef()->get(n3).damage_per_second);
|
||||
|
||||
if(damage_per_second != 0)
|
||||
{
|
||||
@ -272,7 +272,7 @@ void ClientEnvironment::step(float dtime)
|
||||
}
|
||||
|
||||
// Protocol v29 make this behaviour obsolete
|
||||
if (((Client*) getGameDef())->getProtoVersion() < 29) {
|
||||
if (getGameDef()->getProtoVersion() < 29) {
|
||||
/*
|
||||
Drowning
|
||||
*/
|
||||
@ -282,7 +282,7 @@ void ClientEnvironment::step(float dtime)
|
||||
// head
|
||||
v3s16 p = floatToInt(pf + v3f(0, BS * 1.6, 0), BS);
|
||||
MapNode n = m_map->getNodeNoEx(p);
|
||||
ContentFeatures c = m_gamedef->ndef()->get(n);
|
||||
ContentFeatures c = m_client->ndef()->get(n);
|
||||
u8 drowning_damage = c.drowning;
|
||||
if (drowning_damage > 0 && lplayer->hp > 0) {
|
||||
u16 breath = lplayer->getBreath();
|
||||
@ -306,7 +306,7 @@ void ClientEnvironment::step(float dtime)
|
||||
// head
|
||||
v3s16 p = floatToInt(pf + v3f(0, BS * 1.6, 0), BS);
|
||||
MapNode n = m_map->getNodeNoEx(p);
|
||||
ContentFeatures c = m_gamedef->ndef()->get(n);
|
||||
ContentFeatures c = m_client->ndef()->get(n);
|
||||
if (!lplayer->hp) {
|
||||
lplayer->setBreath(11);
|
||||
} else if (c.drowning == 0) {
|
||||
@ -332,7 +332,7 @@ void ClientEnvironment::step(float dtime)
|
||||
v3s16 p = lplayer->getLightPosition();
|
||||
node_at_lplayer = m_map->getNodeNoEx(p);
|
||||
|
||||
u16 light = getInteriorLight(node_at_lplayer, 0, m_gamedef->ndef());
|
||||
u16 light = getInteriorLight(node_at_lplayer, 0, m_client->ndef());
|
||||
u8 day = light & 0xff;
|
||||
u8 night = (light >> 8) & 0xff;
|
||||
finalColorBlend(lplayer->light_color, day, night, day_night_ratio);
|
||||
@ -360,7 +360,7 @@ void ClientEnvironment::step(float dtime)
|
||||
v3s16 p = obj->getLightPosition();
|
||||
MapNode n = m_map->getNodeNoEx(p, &pos_ok);
|
||||
if (pos_ok)
|
||||
light = n.getLightBlend(day_night_ratio, m_gamedef->ndef());
|
||||
light = n.getLightBlend(day_night_ratio, m_client->ndef());
|
||||
else
|
||||
light = blend_light(day_night_ratio, LIGHT_SUN, 0);
|
||||
|
||||
@ -467,7 +467,7 @@ u16 ClientEnvironment::addActiveObject(ClientActiveObject *object)
|
||||
v3s16 p = object->getLightPosition();
|
||||
MapNode n = m_map->getNodeNoEx(p, &pos_ok);
|
||||
if (pos_ok)
|
||||
light = n.getLightBlend(getDayNightRatio(), m_gamedef->ndef());
|
||||
light = n.getLightBlend(getDayNightRatio(), m_client->ndef());
|
||||
else
|
||||
light = blend_light(getDayNightRatio(), LIGHT_SUN, 0);
|
||||
|
||||
@ -480,7 +480,7 @@ void ClientEnvironment::addActiveObject(u16 id, u8 type,
|
||||
const std::string &init_data)
|
||||
{
|
||||
ClientActiveObject* obj =
|
||||
ClientActiveObject::create((ActiveObjectType) type, m_gamedef, this);
|
||||
ClientActiveObject::create((ActiveObjectType) type, m_client, this);
|
||||
if(obj == NULL)
|
||||
{
|
||||
infostream<<"ClientEnvironment::addActiveObject(): "
|
||||
|
@ -30,6 +30,7 @@ class ClientMap;
|
||||
class ClientActiveObject;
|
||||
class GenericCAO;
|
||||
class LocalPlayer;
|
||||
struct PointedThing;
|
||||
|
||||
/*
|
||||
The client-side environment.
|
||||
@ -66,15 +67,14 @@ class ClientEnvironment : public Environment
|
||||
{
|
||||
public:
|
||||
ClientEnvironment(ClientMap *map, scene::ISceneManager *smgr,
|
||||
ITextureSource *texturesource, IGameDef *gamedef,
|
||||
ITextureSource *texturesource, Client *client,
|
||||
IrrlichtDevice *device);
|
||||
~ClientEnvironment();
|
||||
|
||||
Map & getMap();
|
||||
ClientMap & getClientMap();
|
||||
|
||||
IGameDef *getGameDef()
|
||||
{ return m_gamedef; }
|
||||
Client *getGameDef() { return m_client; }
|
||||
|
||||
void step(f32 dtime);
|
||||
|
||||
@ -175,7 +175,7 @@ private:
|
||||
LocalPlayer *m_local_player;
|
||||
scene::ISceneManager *m_smgr;
|
||||
ITextureSource *m_texturesource;
|
||||
IGameDef *m_gamedef;
|
||||
Client *m_client;
|
||||
IrrlichtDevice *m_irr;
|
||||
UNORDERED_MAP<u16, ClientActiveObject*> m_active_objects;
|
||||
std::vector<ClientSimpleObject*> m_simple_objects;
|
||||
|
@ -35,13 +35,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
|
||||
ClientMap::ClientMap(
|
||||
Client *client,
|
||||
IGameDef *gamedef,
|
||||
MapDrawControl &control,
|
||||
scene::ISceneNode* parent,
|
||||
scene::ISceneManager* mgr,
|
||||
s32 id
|
||||
):
|
||||
Map(dout_client, gamedef),
|
||||
Map(dout_client, client),
|
||||
scene::ISceneNode(parent, mgr, id),
|
||||
m_client(client),
|
||||
m_control(control),
|
||||
@ -766,7 +765,7 @@ void ClientMap::renderPostFx(CameraMode cam_mode)
|
||||
const ContentFeatures& features = m_nodedef->get(n);
|
||||
video::SColor post_effect_color = features.post_effect_color;
|
||||
if(features.solidness == 2 && !(g_settings->getBool("noclip") &&
|
||||
m_gamedef->checkLocalPrivilege("noclip")) &&
|
||||
m_client->checkLocalPrivilege("noclip")) &&
|
||||
cam_mode == CAMERA_MODE_FIRST)
|
||||
{
|
||||
post_effect_color = video::SColor(255, 0, 0, 0);
|
||||
|
@ -68,7 +68,6 @@ class ClientMap : public Map, public scene::ISceneNode
|
||||
public:
|
||||
ClientMap(
|
||||
Client *client,
|
||||
IGameDef *gamedef,
|
||||
MapDrawControl &control,
|
||||
scene::ISceneNode* parent,
|
||||
scene::ISceneManager* mgr,
|
||||
@ -133,12 +132,6 @@ public:
|
||||
// For debug printing
|
||||
virtual void PrintInfo(std::ostream &out);
|
||||
|
||||
// Check if sector was drawn on last render()
|
||||
bool sectorWasDrawn(v2s16 p)
|
||||
{
|
||||
return (m_last_drawn_sectors.find(p) != m_last_drawn_sectors.end());
|
||||
}
|
||||
|
||||
const MapDrawControl & getControl() const { return m_control; }
|
||||
f32 getCameraFov() const { return m_camera_fov; }
|
||||
private:
|
||||
|
@ -20,16 +20,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "clientobject.h"
|
||||
#include "debug.h"
|
||||
#include "porting.h"
|
||||
#include "constants.h"
|
||||
|
||||
/*
|
||||
ClientActiveObject
|
||||
*/
|
||||
|
||||
ClientActiveObject::ClientActiveObject(u16 id, IGameDef *gamedef,
|
||||
ClientActiveObject::ClientActiveObject(u16 id, Client *client,
|
||||
ClientEnvironment *env):
|
||||
ActiveObject(id),
|
||||
m_gamedef(gamedef),
|
||||
m_client(client),
|
||||
m_env(env)
|
||||
{
|
||||
}
|
||||
@ -40,7 +39,7 @@ ClientActiveObject::~ClientActiveObject()
|
||||
}
|
||||
|
||||
ClientActiveObject* ClientActiveObject::create(ActiveObjectType type,
|
||||
IGameDef *gamedef, ClientEnvironment *env)
|
||||
Client *client, ClientEnvironment *env)
|
||||
{
|
||||
// Find factory function
|
||||
UNORDERED_MAP<u16, Factory>::iterator n = m_types.find(type);
|
||||
@ -52,7 +51,7 @@ ClientActiveObject* ClientActiveObject::create(ActiveObjectType type,
|
||||
}
|
||||
|
||||
Factory f = n->second;
|
||||
ClientActiveObject *object = (*f)(gamedef, env);
|
||||
ClientActiveObject *object = (*f)(client, env);
|
||||
return object;
|
||||
}
|
||||
|
||||
|
@ -25,20 +25,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include <map>
|
||||
#include "util/cpp11_container.h"
|
||||
|
||||
/*
|
||||
|
||||
Some planning
|
||||
-------------
|
||||
|
||||
* Client receives a network packet with information of added objects
|
||||
in it
|
||||
* Client supplies the information to its ClientEnvironment
|
||||
* The environment adds the specified objects to itself
|
||||
|
||||
*/
|
||||
|
||||
class ClientEnvironment;
|
||||
class ITextureSource;
|
||||
class Client;
|
||||
class IGameDef;
|
||||
class LocalPlayer;
|
||||
struct ItemStack;
|
||||
@ -47,7 +36,7 @@ class WieldMeshSceneNode;
|
||||
class ClientActiveObject : public ActiveObject
|
||||
{
|
||||
public:
|
||||
ClientActiveObject(u16 id, IGameDef *gamedef, ClientEnvironment *env);
|
||||
ClientActiveObject(u16 id, Client *client, ClientEnvironment *env);
|
||||
virtual ~ClientActiveObject();
|
||||
|
||||
virtual void addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc,
|
||||
@ -89,7 +78,7 @@ public:
|
||||
virtual void initialize(const std::string &data){}
|
||||
|
||||
// Create a certain type of ClientActiveObject
|
||||
static ClientActiveObject* create(ActiveObjectType type, IGameDef *gamedef,
|
||||
static ClientActiveObject* create(ActiveObjectType type, Client *client,
|
||||
ClientEnvironment *env);
|
||||
|
||||
// If returns true, punch will not be sent to the server
|
||||
@ -99,9 +88,9 @@ public:
|
||||
|
||||
protected:
|
||||
// Used for creating objects based on type
|
||||
typedef ClientActiveObject* (*Factory)(IGameDef *gamedef, ClientEnvironment *env);
|
||||
typedef ClientActiveObject* (*Factory)(Client *client, ClientEnvironment *env);
|
||||
static void registerType(u16 type, Factory f);
|
||||
IGameDef *m_gamedef;
|
||||
Client *m_client;
|
||||
ClientEnvironment *m_env;
|
||||
private:
|
||||
// Used for creating objects based on type
|
||||
|
@ -22,9 +22,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "map.h"
|
||||
#include "nodedef.h"
|
||||
#include "gamedef.h"
|
||||
#ifndef SERVER
|
||||
#include "clientenvironment.h"
|
||||
#endif
|
||||
#include "serverenvironment.h"
|
||||
#include "serverobject.h"
|
||||
#include "util/timetaker.h"
|
||||
#include "profiler.h"
|
||||
|
||||
// float error is 10 - 9.96875 = 0.03125
|
||||
|
@ -33,7 +33,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "collision.h"
|
||||
#include "settings.h"
|
||||
#include "serialization.h" // For decompressZlib
|
||||
#include "gamedef.h"
|
||||
#include "clientobject.h"
|
||||
#include "mesh.h"
|
||||
#include "itemdef.h"
|
||||
@ -139,7 +138,7 @@ static void setBillboardTextureMatrix(scene::IBillboardSceneNode *bill,
|
||||
class TestCAO : public ClientActiveObject
|
||||
{
|
||||
public:
|
||||
TestCAO(IGameDef *gamedef, ClientEnvironment *env);
|
||||
TestCAO(Client *client, ClientEnvironment *env);
|
||||
virtual ~TestCAO();
|
||||
|
||||
ActiveObjectType getType() const
|
||||
@ -147,7 +146,7 @@ public:
|
||||
return ACTIVEOBJECT_TYPE_TEST;
|
||||
}
|
||||
|
||||
static ClientActiveObject* create(IGameDef *gamedef, ClientEnvironment *env);
|
||||
static ClientActiveObject* create(Client *client, ClientEnvironment *env);
|
||||
|
||||
void addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc,
|
||||
IrrlichtDevice *irr);
|
||||
@ -169,8 +168,8 @@ private:
|
||||
// Prototype
|
||||
TestCAO proto_TestCAO(NULL, NULL);
|
||||
|
||||
TestCAO::TestCAO(IGameDef *gamedef, ClientEnvironment *env):
|
||||
ClientActiveObject(0, gamedef, env),
|
||||
TestCAO::TestCAO(Client *client, ClientEnvironment *env):
|
||||
ClientActiveObject(0, client, env),
|
||||
m_node(NULL),
|
||||
m_position(v3f(0,10*BS,0))
|
||||
{
|
||||
@ -181,9 +180,9 @@ TestCAO::~TestCAO()
|
||||
{
|
||||
}
|
||||
|
||||
ClientActiveObject* TestCAO::create(IGameDef *gamedef, ClientEnvironment *env)
|
||||
ClientActiveObject* TestCAO::create(Client *client, ClientEnvironment *env)
|
||||
{
|
||||
return new TestCAO(gamedef, env);
|
||||
return new TestCAO(client, env);
|
||||
}
|
||||
|
||||
void TestCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc,
|
||||
@ -283,7 +282,7 @@ void TestCAO::processMessage(const std::string &data)
|
||||
class ItemCAO : public ClientActiveObject
|
||||
{
|
||||
public:
|
||||
ItemCAO(IGameDef *gamedef, ClientEnvironment *env);
|
||||
ItemCAO(Client *client, ClientEnvironment *env);
|
||||
virtual ~ItemCAO();
|
||||
|
||||
ActiveObjectType getType() const
|
||||
@ -291,7 +290,7 @@ public:
|
||||
return ACTIVEOBJECT_TYPE_ITEM;
|
||||
}
|
||||
|
||||
static ClientActiveObject* create(IGameDef *gamedef, ClientEnvironment *env);
|
||||
static ClientActiveObject* create(Client *client, ClientEnvironment *env);
|
||||
|
||||
void addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc,
|
||||
IrrlichtDevice *irr);
|
||||
@ -331,13 +330,13 @@ private:
|
||||
// Prototype
|
||||
ItemCAO proto_ItemCAO(NULL, NULL);
|
||||
|
||||
ItemCAO::ItemCAO(IGameDef *gamedef, ClientEnvironment *env):
|
||||
ClientActiveObject(0, gamedef, env),
|
||||
ItemCAO::ItemCAO(Client *client, ClientEnvironment *env):
|
||||
ClientActiveObject(0, client, env),
|
||||
m_selection_box(-BS/3.,0.0,-BS/3., BS/3.,BS*2./3.,BS/3.),
|
||||
m_node(NULL),
|
||||
m_position(v3f(0,10*BS,0))
|
||||
{
|
||||
if(!gamedef && !env)
|
||||
if(!client && !env)
|
||||
{
|
||||
ClientActiveObject::registerType(getType(), create);
|
||||
}
|
||||
@ -347,9 +346,9 @@ ItemCAO::~ItemCAO()
|
||||
{
|
||||
}
|
||||
|
||||
ClientActiveObject* ItemCAO::create(IGameDef *gamedef, ClientEnvironment *env)
|
||||
ClientActiveObject* ItemCAO::create(Client *client, ClientEnvironment *env)
|
||||
{
|
||||
return new ItemCAO(gamedef, env);
|
||||
return new ItemCAO(client, env);
|
||||
}
|
||||
|
||||
void ItemCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc,
|
||||
@ -433,7 +432,7 @@ void ItemCAO::updateNodePos()
|
||||
void ItemCAO::updateInfoText()
|
||||
{
|
||||
try{
|
||||
IItemDefManager *idef = m_gamedef->idef();
|
||||
IItemDefManager *idef = m_client->idef();
|
||||
ItemStack item;
|
||||
item.deSerialize(m_itemstring, idef);
|
||||
if(item.isKnown(idef))
|
||||
@ -458,10 +457,10 @@ void ItemCAO::updateTexture()
|
||||
std::istringstream is(m_itemstring, std::ios_base::binary);
|
||||
video::ITexture *texture = NULL;
|
||||
try{
|
||||
IItemDefManager *idef = m_gamedef->idef();
|
||||
IItemDefManager *idef = m_client->idef();
|
||||
ItemStack item;
|
||||
item.deSerialize(is, idef);
|
||||
texture = idef->getInventoryTexture(item.getDefinition(idef).name, m_gamedef);
|
||||
texture = idef->getInventoryTexture(item.getDefinition(idef).name, m_client);
|
||||
}
|
||||
catch(SerializationError &e)
|
||||
{
|
||||
@ -538,15 +537,15 @@ void ItemCAO::initialize(const std::string &data)
|
||||
|
||||
#include "genericobject.h"
|
||||
|
||||
GenericCAO::GenericCAO(IGameDef *gamedef, ClientEnvironment *env):
|
||||
ClientActiveObject(0, gamedef, env),
|
||||
GenericCAO::GenericCAO(Client *client, ClientEnvironment *env):
|
||||
ClientActiveObject(0, client, env),
|
||||
//
|
||||
m_is_player(false),
|
||||
m_is_local_player(false),
|
||||
//
|
||||
m_smgr(NULL),
|
||||
m_irr(NULL),
|
||||
m_gamedef(NULL),
|
||||
m_client(NULL),
|
||||
m_selection_box(-BS/3.,-BS/3.,-BS/3., BS/3.,BS/3.,BS/3.),
|
||||
m_meshnode(NULL),
|
||||
m_animated_meshnode(NULL),
|
||||
@ -581,10 +580,10 @@ GenericCAO::GenericCAO(IGameDef *gamedef, ClientEnvironment *env):
|
||||
m_last_light(255),
|
||||
m_is_visible(false)
|
||||
{
|
||||
if (gamedef == NULL) {
|
||||
if (client == NULL) {
|
||||
ClientActiveObject::registerType(getType(), create);
|
||||
} else {
|
||||
m_gamedef = gamedef;
|
||||
m_client = client;
|
||||
}
|
||||
}
|
||||
|
||||
@ -793,7 +792,7 @@ void GenericCAO::removeFromScene(bool permanent)
|
||||
}
|
||||
|
||||
if (m_nametag) {
|
||||
m_gamedef->getCamera()->removeNametag(m_nametag);
|
||||
m_client->getCamera()->removeNametag(m_nametag);
|
||||
m_nametag = NULL;
|
||||
}
|
||||
}
|
||||
@ -906,7 +905,7 @@ void GenericCAO::addToScene(scene::ISceneManager *smgr,
|
||||
}
|
||||
else if(m_prop.visual == "mesh") {
|
||||
infostream<<"GenericCAO::addToScene(): mesh"<<std::endl;
|
||||
scene::IAnimatedMesh *mesh = m_gamedef->getMesh(m_prop.mesh);
|
||||
scene::IAnimatedMesh *mesh = m_client->getMesh(m_prop.mesh);
|
||||
if(mesh)
|
||||
{
|
||||
m_animated_meshnode = smgr->addAnimatedMeshSceneNode(mesh, NULL);
|
||||
@ -937,12 +936,12 @@ void GenericCAO::addToScene(scene::ISceneManager *smgr,
|
||||
infostream<<"textures: "<<m_prop.textures.size()<<std::endl;
|
||||
if(m_prop.textures.size() >= 1){
|
||||
infostream<<"textures[0]: "<<m_prop.textures[0]<<std::endl;
|
||||
IItemDefManager *idef = m_gamedef->idef();
|
||||
IItemDefManager *idef = m_client->idef();
|
||||
ItemStack item(m_prop.textures[0], 1, 0, "", idef);
|
||||
|
||||
m_wield_meshnode = new WieldMeshSceneNode(
|
||||
smgr->getRootSceneNode(), smgr, -1);
|
||||
m_wield_meshnode->setItem(item, m_gamedef);
|
||||
m_wield_meshnode->setItem(item, m_client);
|
||||
|
||||
m_wield_meshnode->setScale(v3f(m_prop.visual_size.X/2,
|
||||
m_prop.visual_size.Y/2,
|
||||
@ -959,7 +958,7 @@ void GenericCAO::addToScene(scene::ISceneManager *smgr,
|
||||
scene::ISceneNode *node = getSceneNode();
|
||||
if (node && m_prop.nametag != "" && !m_is_local_player) {
|
||||
// Add nametag
|
||||
m_nametag = m_gamedef->getCamera()->addNametag(node,
|
||||
m_nametag = m_client->getCamera()->addNametag(node,
|
||||
m_prop.nametag, m_prop.nametag_color);
|
||||
}
|
||||
|
||||
@ -1058,11 +1057,11 @@ void GenericCAO::step(float dtime, ClientEnvironment *env)
|
||||
|
||||
// increase speed if using fast or flying fast
|
||||
if((g_settings->getBool("fast_move") &&
|
||||
m_gamedef->checkLocalPrivilege("fast")) &&
|
||||
m_client->checkLocalPrivilege("fast")) &&
|
||||
(controls.aux1 ||
|
||||
(!player->touching_ground &&
|
||||
g_settings->getBool("free_move") &&
|
||||
m_gamedef->checkLocalPrivilege("fly"))))
|
||||
m_client->checkLocalPrivilege("fly"))))
|
||||
new_speed *= 1.5;
|
||||
// slowdown speed if sneeking
|
||||
if(controls.sneak && walking)
|
||||
@ -1129,7 +1128,7 @@ void GenericCAO::step(float dtime, ClientEnvironment *env)
|
||||
}
|
||||
|
||||
removeFromScene(false);
|
||||
addToScene(m_smgr, m_gamedef->tsrc(), m_irr);
|
||||
addToScene(m_smgr, m_client->tsrc(), m_irr);
|
||||
|
||||
// Attachments, part 2: Now that the parent has been refreshed, put its attachments back
|
||||
for (std::vector<u16>::size_type i = 0; i < m_children.size(); i++) {
|
||||
@ -1199,12 +1198,12 @@ void GenericCAO::step(float dtime, ClientEnvironment *env)
|
||||
m_step_distance_counter = 0;
|
||||
if(!m_is_local_player && m_prop.makes_footstep_sound)
|
||||
{
|
||||
INodeDefManager *ndef = m_gamedef->ndef();
|
||||
INodeDefManager *ndef = m_client->ndef();
|
||||
v3s16 p = floatToInt(getPosition() + v3f(0,
|
||||
(m_prop.collisionbox.MinEdge.Y-0.5)*BS, 0), BS);
|
||||
MapNode n = m_env->getMap().getNodeNoEx(p);
|
||||
SimpleSoundSpec spec = ndef->get(n).sound_footstep;
|
||||
m_gamedef->sound()->playSoundAt(spec, false, getPosition());
|
||||
m_client->sound()->playSoundAt(spec, false, getPosition());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1305,7 +1304,7 @@ void GenericCAO::updateTexturePos()
|
||||
|
||||
void GenericCAO::updateTextures(const std::string &mod)
|
||||
{
|
||||
ITextureSource *tsrc = m_gamedef->tsrc();
|
||||
ITextureSource *tsrc = m_client->tsrc();
|
||||
|
||||
bool use_trilinear_filter = g_settings->getBool("trilinear_filter");
|
||||
bool use_bilinear_filter = g_settings->getBool("bilinear_filter");
|
||||
@ -1778,7 +1777,7 @@ bool GenericCAO::directReportPunch(v3f dir, const ItemStack *punchitem,
|
||||
{
|
||||
assert(punchitem); // pre-condition
|
||||
const ToolCapabilities *toolcap =
|
||||
&punchitem->getToolCapabilities(m_gamedef->idef());
|
||||
&punchitem->getToolCapabilities(m_client->idef());
|
||||
PunchDamageResult result = getPunchDamage(
|
||||
m_armor_groups,
|
||||
toolcap,
|
||||
|
@ -27,6 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "itemgroup.h"
|
||||
|
||||
class Camera;
|
||||
class Client;
|
||||
struct Nametag;
|
||||
|
||||
/*
|
||||
@ -68,7 +69,7 @@ private:
|
||||
//
|
||||
scene::ISceneManager *m_smgr;
|
||||
IrrlichtDevice *m_irr;
|
||||
IGameDef *m_gamedef;
|
||||
Client *m_client;
|
||||
aabb3f m_selection_box;
|
||||
scene::IMeshSceneNode *m_meshnode;
|
||||
scene::IAnimatedMeshSceneNode *m_animated_meshnode;
|
||||
@ -109,13 +110,13 @@ private:
|
||||
std::vector<u16> m_children;
|
||||
|
||||
public:
|
||||
GenericCAO(IGameDef *gamedef, ClientEnvironment *env);
|
||||
GenericCAO(Client *client, ClientEnvironment *env);
|
||||
|
||||
~GenericCAO();
|
||||
|
||||
static ClientActiveObject* create(IGameDef *gamedef, ClientEnvironment *env)
|
||||
static ClientActiveObject* create(Client *client, ClientEnvironment *env)
|
||||
{
|
||||
return new GenericCAO(gamedef, env);
|
||||
return new GenericCAO(client, env);
|
||||
}
|
||||
|
||||
inline ActiveObjectType getType() const
|
||||
|
@ -21,20 +21,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include <IBillboardSceneNode.h>
|
||||
#include "client/tile.h"
|
||||
#include "clientenvironment.h"
|
||||
#include "gamedef.h"
|
||||
#include "client.h"
|
||||
#include "map.h"
|
||||
|
||||
/*
|
||||
static void setBillboardTextureMatrix(scene::IBillboardSceneNode *bill,
|
||||
float txs, float tys, int col, int row)
|
||||
{
|
||||
video::SMaterial& material = bill->getMaterial(0);
|
||||
core::matrix4& matrix = material.getTextureMatrix(0);
|
||||
matrix.setTextureTranslate(txs*col, tys*row);
|
||||
matrix.setTextureScale(txs, tys);
|
||||
}
|
||||
*/
|
||||
|
||||
class SmokePuffCSO: public ClientSimpleObject
|
||||
{
|
||||
float m_age;
|
||||
|
@ -26,7 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "client/tile.h"
|
||||
#include "mesh.h"
|
||||
#include <IMeshManipulator.h>
|
||||
#include "gamedef.h"
|
||||
#include "client.h"
|
||||
#include "log.h"
|
||||
#include "noise.h"
|
||||
|
||||
@ -188,8 +188,8 @@ static inline int NeighborToIndex(const v3s16 &pos)
|
||||
void mapblock_mesh_generate_special(MeshMakeData *data,
|
||||
MeshCollector &collector)
|
||||
{
|
||||
INodeDefManager *nodedef = data->m_gamedef->ndef();
|
||||
scene::ISceneManager* smgr = data->m_gamedef->getSceneManager();
|
||||
INodeDefManager *nodedef = data->m_client->ndef();
|
||||
scene::ISceneManager* smgr = data->m_client->getSceneManager();
|
||||
scene::IMeshManipulator* meshmanip = smgr->getMeshManipulator();
|
||||
|
||||
// 0ms
|
||||
|
@ -273,7 +273,7 @@ void LuaEntitySAO::step(float dtime, bool send_recommended)
|
||||
v3f p_pos = m_base_position;
|
||||
v3f p_velocity = m_velocity;
|
||||
v3f p_acceleration = m_acceleration;
|
||||
moveresult = collisionMoveSimple(m_env,m_env->getGameDef(),
|
||||
moveresult = collisionMoveSimple(m_env, m_env->getGameDef(),
|
||||
pos_max_d, box, m_prop.stepheight, dtime,
|
||||
&p_pos, &p_velocity, p_acceleration,
|
||||
this, m_prop.collideWithObjects);
|
||||
@ -945,7 +945,7 @@ void PlayerSAO::step(float dtime, bool send_recommended)
|
||||
// get head position
|
||||
v3s16 p = floatToInt(m_base_position + v3f(0, BS * 1.6, 0), BS);
|
||||
MapNode n = m_env->getMap().getNodeNoEx(p);
|
||||
const ContentFeatures &c = ((Server*) m_env->getGameDef())->ndef()->get(n);
|
||||
const ContentFeatures &c = m_env->getGameDef()->ndef()->get(n);
|
||||
// If node generates drown
|
||||
if (c.drowning > 0) {
|
||||
if (m_hp > 0 && m_breath > 0)
|
||||
@ -954,7 +954,7 @@ void PlayerSAO::step(float dtime, bool send_recommended)
|
||||
// No more breath, damage player
|
||||
if (m_breath == 0) {
|
||||
setHP(m_hp - c.drowning);
|
||||
((Server*) m_env->getGameDef())->SendPlayerHPOrDie(this);
|
||||
m_env->getGameDef()->SendPlayerHPOrDie(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -963,7 +963,7 @@ void PlayerSAO::step(float dtime, bool send_recommended)
|
||||
// get head position
|
||||
v3s16 p = floatToInt(m_base_position + v3f(0, BS * 1.6, 0), BS);
|
||||
MapNode n = m_env->getMap().getNodeNoEx(p);
|
||||
const ContentFeatures &c = ((Server*) m_env->getGameDef())->ndef()->get(n);
|
||||
const ContentFeatures &c = m_env->getGameDef()->ndef()->get(n);
|
||||
// If player is alive & no drowning, breath
|
||||
if (m_hp > 0 && c.drowning == 0)
|
||||
setBreath(m_breath + 1);
|
||||
@ -985,7 +985,7 @@ void PlayerSAO::step(float dtime, bool send_recommended)
|
||||
m_attachment_position = v3f(0,0,0);
|
||||
m_attachment_rotation = v3f(0,0,0);
|
||||
setBasePosition(m_last_good_position);
|
||||
((Server*)m_env->getGameDef())->SendMovePlayer(m_peer_id);
|
||||
m_env->getGameDef()->SendMovePlayer(m_peer_id);
|
||||
}
|
||||
|
||||
//dstream<<"PlayerSAO::step: dtime: "<<dtime<<std::endl;
|
||||
@ -1107,7 +1107,7 @@ void PlayerSAO::setPos(const v3f &pos)
|
||||
setBasePosition(pos);
|
||||
// Movement caused by this command is always valid
|
||||
m_last_good_position = pos;
|
||||
((Server*)m_env->getGameDef())->SendMovePlayer(m_peer_id);
|
||||
m_env->getGameDef()->SendMovePlayer(m_peer_id);
|
||||
}
|
||||
|
||||
void PlayerSAO::moveTo(v3f pos, bool continuous)
|
||||
@ -1118,7 +1118,7 @@ void PlayerSAO::moveTo(v3f pos, bool continuous)
|
||||
setBasePosition(pos);
|
||||
// Movement caused by this command is always valid
|
||||
m_last_good_position = pos;
|
||||
((Server*)m_env->getGameDef())->SendMovePlayer(m_peer_id);
|
||||
m_env->getGameDef()->SendMovePlayer(m_peer_id);
|
||||
}
|
||||
|
||||
void PlayerSAO::setYaw(const float yaw)
|
||||
@ -1148,7 +1148,7 @@ void PlayerSAO::setWantedRange(const s16 range)
|
||||
void PlayerSAO::setYawAndSend(const float yaw)
|
||||
{
|
||||
setYaw(yaw);
|
||||
((Server*)m_env->getGameDef())->SendMovePlayer(m_peer_id);
|
||||
m_env->getGameDef()->SendMovePlayer(m_peer_id);
|
||||
}
|
||||
|
||||
void PlayerSAO::setPitch(const float pitch)
|
||||
@ -1162,7 +1162,7 @@ void PlayerSAO::setPitch(const float pitch)
|
||||
void PlayerSAO::setPitchAndSend(const float pitch)
|
||||
{
|
||||
setPitch(pitch);
|
||||
((Server*)m_env->getGameDef())->SendMovePlayer(m_peer_id);
|
||||
m_env->getGameDef()->SendMovePlayer(m_peer_id);
|
||||
}
|
||||
|
||||
int PlayerSAO::punch(v3f dir,
|
||||
@ -1273,7 +1273,7 @@ void PlayerSAO::setBreath(const u16 breath, bool send)
|
||||
m_breath = MYMIN(breath, PLAYER_MAX_BREATH);
|
||||
|
||||
if (send)
|
||||
((Server *) m_env->getGameDef())->SendPlayerBreath(this);
|
||||
m_env->getGameDef()->SendPlayerBreath(this);
|
||||
}
|
||||
|
||||
void PlayerSAO::setArmorGroups(const ItemGroupList &armor_groups)
|
||||
|
@ -89,13 +89,13 @@ private:
|
||||
//// EmergeManager
|
||||
////
|
||||
|
||||
EmergeManager::EmergeManager(IGameDef *gamedef)
|
||||
EmergeManager::EmergeManager(Server *server)
|
||||
{
|
||||
this->ndef = gamedef->getNodeDefManager();
|
||||
this->biomemgr = new BiomeManager(gamedef);
|
||||
this->oremgr = new OreManager(gamedef);
|
||||
this->decomgr = new DecorationManager(gamedef);
|
||||
this->schemmgr = new SchematicManager(gamedef);
|
||||
this->ndef = server->getNodeDefManager();
|
||||
this->biomemgr = new BiomeManager(server);
|
||||
this->oremgr = new OreManager(server);
|
||||
this->decomgr = new DecorationManager(server);
|
||||
this->schemmgr = new SchematicManager(server);
|
||||
this->gen_notify_on = 0;
|
||||
|
||||
// Note that accesses to this variable are not synchronized.
|
||||
@ -128,7 +128,7 @@ EmergeManager::EmergeManager(IGameDef *gamedef)
|
||||
m_qlimit_generate = 1;
|
||||
|
||||
for (s16 i = 0; i < nthreads; i++)
|
||||
m_threads.push_back(new EmergeThread((Server *)gamedef, i));
|
||||
m_threads.push_back(new EmergeThread(server, i));
|
||||
|
||||
infostream << "EmergeManager: using " << nthreads << " threads" << std::endl;
|
||||
}
|
||||
|
@ -42,6 +42,7 @@ class BiomeManager;
|
||||
class OreManager;
|
||||
class DecorationManager;
|
||||
class SchematicManager;
|
||||
class Server;
|
||||
|
||||
// Structure containing inputs/outputs for chunk generation
|
||||
struct BlockMakeData {
|
||||
@ -115,7 +116,7 @@ public:
|
||||
SchematicManager *schemmgr;
|
||||
|
||||
// Methods
|
||||
EmergeManager(IGameDef *gamedef);
|
||||
EmergeManager(Server *server);
|
||||
~EmergeManager();
|
||||
|
||||
bool initMapgens(MapgenParams *mgparams);
|
||||
|
@ -42,13 +42,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "threading/atomic.h"
|
||||
#include "network/networkprotocol.h" // for AccessDeniedCode
|
||||
|
||||
class ITextureSource;
|
||||
class IGameDef;
|
||||
class Map;
|
||||
class GameScripting;
|
||||
class Player;
|
||||
class PointedThing;
|
||||
|
||||
class Environment
|
||||
{
|
||||
public:
|
||||
|
59
src/game.cpp
59
src/game.cpp
@ -916,16 +916,14 @@ bool nodePlacementPrediction(Client &client,
|
||||
}
|
||||
|
||||
static inline void create_formspec_menu(GUIFormSpecMenu **cur_formspec,
|
||||
InventoryManager *invmgr, IGameDef *gamedef,
|
||||
IWritableTextureSource *tsrc, IrrlichtDevice *device,
|
||||
JoystickController *joystick,
|
||||
IFormSource *fs_src, TextDest *txt_dest, Client *client)
|
||||
Client *client, IrrlichtDevice *device, JoystickController *joystick,
|
||||
IFormSource *fs_src, TextDest *txt_dest)
|
||||
{
|
||||
|
||||
if (*cur_formspec == 0) {
|
||||
*cur_formspec = new GUIFormSpecMenu(device, joystick,
|
||||
guiroot, -1, &g_menumgr, invmgr, gamedef, tsrc,
|
||||
fs_src, txt_dest, client);
|
||||
guiroot, -1, &g_menumgr, client, client->getTextureSource(),
|
||||
fs_src, txt_dest);
|
||||
(*cur_formspec)->doPause = false;
|
||||
|
||||
/*
|
||||
@ -950,9 +948,9 @@ static inline void create_formspec_menu(GUIFormSpecMenu **cur_formspec,
|
||||
#endif
|
||||
|
||||
static void show_deathscreen(GUIFormSpecMenu **cur_formspec,
|
||||
InventoryManager *invmgr, IGameDef *gamedef,
|
||||
Client *client,
|
||||
IWritableTextureSource *tsrc, IrrlichtDevice *device,
|
||||
JoystickController *joystick, Client *client)
|
||||
JoystickController *joystick)
|
||||
{
|
||||
std::string formspec =
|
||||
std::string(FORMSPEC_VERSION_STRING) +
|
||||
@ -968,13 +966,12 @@ static void show_deathscreen(GUIFormSpecMenu **cur_formspec,
|
||||
FormspecFormSource *fs_src = new FormspecFormSource(formspec);
|
||||
LocalFormspecHandler *txt_dst = new LocalFormspecHandler("MT_DEATH_SCREEN", client);
|
||||
|
||||
create_formspec_menu(cur_formspec, invmgr, gamedef, tsrc, device,
|
||||
joystick, fs_src, txt_dst, NULL);
|
||||
create_formspec_menu(cur_formspec, client, device, joystick, fs_src, txt_dst);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
static void show_pause_menu(GUIFormSpecMenu **cur_formspec,
|
||||
InventoryManager *invmgr, IGameDef *gamedef,
|
||||
Client *client,
|
||||
IWritableTextureSource *tsrc, IrrlichtDevice *device,
|
||||
JoystickController *joystick, bool singleplayermode)
|
||||
{
|
||||
@ -1041,8 +1038,7 @@ static void show_pause_menu(GUIFormSpecMenu **cur_formspec,
|
||||
FormspecFormSource *fs_src = new FormspecFormSource(os.str());
|
||||
LocalFormspecHandler *txt_dst = new LocalFormspecHandler("MT_PAUSE_MENU");
|
||||
|
||||
create_formspec_menu(cur_formspec, invmgr, gamedef, tsrc, device,
|
||||
joystick, fs_src, txt_dst, NULL);
|
||||
create_formspec_menu(cur_formspec, client, device, joystick, fs_src, txt_dst);
|
||||
std::string con("btn_continue");
|
||||
(*cur_formspec)->setFocus(con);
|
||||
(*cur_formspec)->doPause = true;
|
||||
@ -1534,7 +1530,6 @@ private:
|
||||
bool *kill;
|
||||
std::string *error_message;
|
||||
bool *reconnect_requested;
|
||||
IGameDef *gamedef; // Convenience (same as *client)
|
||||
scene::ISceneNode *skybox;
|
||||
|
||||
bool random_input;
|
||||
@ -2011,7 +2006,7 @@ bool Game::createClient(const std::string &playername,
|
||||
|
||||
/* Camera
|
||||
*/
|
||||
camera = new Camera(smgr, *draw_control, gamedef);
|
||||
camera = new Camera(smgr, *draw_control, client);
|
||||
if (!camera || !camera->successfullyCreated(*error_message))
|
||||
return false;
|
||||
client->setCamera(camera);
|
||||
@ -2068,7 +2063,7 @@ bool Game::createClient(const std::string &playername,
|
||||
player->hurt_tilt_timer = 0;
|
||||
player->hurt_tilt_strength = 0;
|
||||
|
||||
hud = new Hud(driver, smgr, guienv, gamedef, player, local_inventory);
|
||||
hud = new Hud(driver, smgr, guienv, client, player, local_inventory);
|
||||
|
||||
if (!hud) {
|
||||
*error_message = "Memory error: could not create HUD";
|
||||
@ -2198,8 +2193,6 @@ bool Game::connectToServer(const std::string &playername,
|
||||
if (!client)
|
||||
return false;
|
||||
|
||||
gamedef = client; // Client acts as our GameDef
|
||||
|
||||
infostream << "Connecting to server at ";
|
||||
connect_address.print(&infostream);
|
||||
infostream << std::endl;
|
||||
@ -2445,7 +2438,7 @@ inline bool Game::handleCallbacks()
|
||||
void Game::processQueues()
|
||||
{
|
||||
texture_src->processQueue();
|
||||
itemdef_manager->processQueue(gamedef);
|
||||
itemdef_manager->processQueue(client);
|
||||
shader_src->processQueue();
|
||||
}
|
||||
|
||||
@ -2617,7 +2610,7 @@ void Game::processKeyInput(VolatileRunFlags *flags,
|
||||
openInventory();
|
||||
} else if (wasKeyDown(KeyType::ESC) || input->wasKeyDown(CancelKey)) {
|
||||
if (!gui_chat_console->isOpenInhibited()) {
|
||||
show_pause_menu(¤t_formspec, client, gamedef,
|
||||
show_pause_menu(¤t_formspec, client,
|
||||
texture_src, device, &input->joystick,
|
||||
simple_singleplayer_mode);
|
||||
}
|
||||
@ -2769,8 +2762,7 @@ void Game::openInventory()
|
||||
PlayerInventoryFormSource *fs_src = new PlayerInventoryFormSource(client);
|
||||
TextDest *txt_dst = new TextDestPlayerInventory(client);
|
||||
|
||||
create_formspec_menu(¤t_formspec, client, gamedef, texture_src,
|
||||
device, &input->joystick, fs_src, txt_dst, client);
|
||||
create_formspec_menu(¤t_formspec, client, device, &input->joystick, fs_src, txt_dst);
|
||||
cur_formname = "";
|
||||
|
||||
InventoryLocation inventoryloc;
|
||||
@ -3245,13 +3237,13 @@ void Game::processClientEvents(CameraOrientation *cam, float *damage_flash)
|
||||
rangelim(event.player_damage.amount / 4, 1.0, 4.0);
|
||||
|
||||
MtEvent *e = new SimpleTriggerEvent("PlayerDamage");
|
||||
gamedef->event()->put(e);
|
||||
client->event()->put(e);
|
||||
} else if (event.type == CE_PLAYER_FORCE_MOVE) {
|
||||
cam->camera_yaw = event.player_force_move.yaw;
|
||||
cam->camera_pitch = event.player_force_move.pitch;
|
||||
} else if (event.type == CE_DEATHSCREEN) {
|
||||
show_deathscreen(¤t_formspec, client, gamedef, texture_src,
|
||||
device, &input->joystick, client);
|
||||
show_deathscreen(¤t_formspec, client, texture_src,
|
||||
device, &input->joystick);
|
||||
|
||||
chat_backend->addMessage(L"", L"You died.");
|
||||
|
||||
@ -3271,9 +3263,8 @@ void Game::processClientEvents(CameraOrientation *cam, float *damage_flash)
|
||||
TextDestPlayerInventory *txt_dst =
|
||||
new TextDestPlayerInventory(client, *(event.show_formspec.formname));
|
||||
|
||||
create_formspec_menu(¤t_formspec, client, gamedef,
|
||||
texture_src, device, &input->joystick,
|
||||
fs_src, txt_dst, client);
|
||||
create_formspec_menu(¤t_formspec, client, device, &input->joystick,
|
||||
fs_src, txt_dst);
|
||||
cur_formname = *(event.show_formspec.formname);
|
||||
}
|
||||
|
||||
@ -3282,7 +3273,7 @@ void Game::processClientEvents(CameraOrientation *cam, float *damage_flash)
|
||||
} else if ((event.type == CE_SPAWN_PARTICLE) ||
|
||||
(event.type == CE_ADD_PARTICLESPAWNER) ||
|
||||
(event.type == CE_DELETE_PARTICLESPAWNER)) {
|
||||
client->getParticleManager()->handleParticleEvent(&event, gamedef,
|
||||
client->getParticleManager()->handleParticleEvent(&event, client,
|
||||
smgr, player);
|
||||
} else if (event.type == CE_HUDADD) {
|
||||
u32 id = event.hudadd.id;
|
||||
@ -3840,8 +3831,8 @@ void Game::handlePointingAtNode(GameRunData *runData,
|
||||
&client->getEnv().getClientMap(), nodepos);
|
||||
TextDest *txt_dst = new TextDestNodeMetadata(nodepos, client);
|
||||
|
||||
create_formspec_menu(¤t_formspec, client, gamedef,
|
||||
texture_src, device, &input->joystick, fs_src, txt_dst, client);
|
||||
create_formspec_menu(¤t_formspec, client,
|
||||
device, &input->joystick, fs_src, txt_dst);
|
||||
cur_formname = "";
|
||||
|
||||
current_formspec->setFormSpec(meta->getString("formspec"), inventoryloc);
|
||||
@ -3972,7 +3963,7 @@ void Game::handleDigging(GameRunData *runData,
|
||||
if (m_cache_enable_particles) {
|
||||
const ContentFeatures &features =
|
||||
client->getNodeDefManager()->get(n);
|
||||
client->getParticleManager()->addPunchingParticles(gamedef, smgr,
|
||||
client->getParticleManager()->addPunchingParticles(client, smgr,
|
||||
player, nodepos, features.tiles);
|
||||
}
|
||||
}
|
||||
@ -4019,7 +4010,7 @@ void Game::handleDigging(GameRunData *runData,
|
||||
if (m_cache_enable_particles) {
|
||||
const ContentFeatures &features =
|
||||
client->getNodeDefManager()->get(wasnode);
|
||||
client->getParticleManager()->addDiggingParticles(gamedef, smgr,
|
||||
client->getParticleManager()->addDiggingParticles(client, smgr,
|
||||
player, nodepos, features.tiles);
|
||||
}
|
||||
|
||||
@ -4043,7 +4034,7 @@ void Game::handleDigging(GameRunData *runData,
|
||||
|
||||
// Send event to trigger sound
|
||||
MtEvent *e = new NodeDugEvent(nodepos, wasnode);
|
||||
gamedef->event()->put(e);
|
||||
client->event()->put(e);
|
||||
}
|
||||
|
||||
if (runData->dig_time_complete < 100000.0) {
|
||||
|
@ -53,47 +53,22 @@ public:
|
||||
virtual INodeDefManager* getNodeDefManager()=0;
|
||||
virtual ICraftDefManager* getCraftDefManager()=0;
|
||||
|
||||
// This is always thread-safe, but referencing the irrlicht texture
|
||||
// pointers in other threads than main thread will make things explode.
|
||||
virtual ITextureSource* getTextureSource()=0;
|
||||
|
||||
virtual IShaderSource* getShaderSource()=0;
|
||||
|
||||
// Used for keeping track of names/ids of unknown nodes
|
||||
virtual u16 allocateUnknownNodeId(const std::string &name)=0;
|
||||
|
||||
// Only usable on the client
|
||||
virtual ISoundManager* getSoundManager()=0;
|
||||
virtual MtEventManager* getEventManager()=0;
|
||||
virtual scene::IAnimatedMesh* getMesh(const std::string &filename)
|
||||
{ return NULL; }
|
||||
virtual scene::ISceneManager* getSceneManager()=0;
|
||||
|
||||
virtual Camera* getCamera()
|
||||
{ return NULL; }
|
||||
virtual void setCamera(Camera *camera) {}
|
||||
|
||||
// Only usable on the server, and NOT thread-safe. It is usable from the
|
||||
// environment thread.
|
||||
virtual IRollbackManager* getRollbackManager(){return NULL;}
|
||||
|
||||
// Only usable on the server. Thread safe if not written while running threads.
|
||||
virtual EmergeManager *getEmergeManager() { return NULL; }
|
||||
|
||||
// Used on the client
|
||||
virtual bool checkLocalPrivilege(const std::string &priv)
|
||||
{ return false; }
|
||||
virtual IRollbackManager* getRollbackManager() { return NULL; }
|
||||
|
||||
// Shorthands
|
||||
IItemDefManager *idef() { return getItemDefManager(); }
|
||||
INodeDefManager *ndef() { return getNodeDefManager(); }
|
||||
ICraftDefManager *cdef() { return getCraftDefManager(); }
|
||||
ITextureSource *tsrc() { return getTextureSource(); }
|
||||
ISoundManager *sound() { return getSoundManager(); }
|
||||
IShaderSource *shsrc() { return getShaderSource(); }
|
||||
|
||||
MtEventManager *event() { return getEventManager(); }
|
||||
IRollbackManager *rollback() { return getRollbackManager();}
|
||||
EmergeManager *emerge() { return getEmergeManager(); }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -194,11 +194,9 @@ GUIEngine::GUIEngine( irr::IrrlichtDevice* dev,
|
||||
-1,
|
||||
m_menumanager,
|
||||
NULL /* &client */,
|
||||
NULL /* gamedef */,
|
||||
m_texture_source,
|
||||
m_formspecgui,
|
||||
m_buttonhandler,
|
||||
NULL,
|
||||
false);
|
||||
|
||||
m_menu->allowClose(false);
|
||||
|
@ -81,13 +81,12 @@ static unsigned int font_line_height(gui::IGUIFont *font)
|
||||
GUIFormSpecMenu::GUIFormSpecMenu(irr::IrrlichtDevice* dev,
|
||||
JoystickController *joystick,
|
||||
gui::IGUIElement* parent, s32 id, IMenuManager *menumgr,
|
||||
InventoryManager *invmgr, IGameDef *gamedef,
|
||||
Client *client,
|
||||
ISimpleTextureSource *tsrc, IFormSource* fsrc, TextDest* tdst,
|
||||
Client* client, bool remap_dbl_click) :
|
||||
bool remap_dbl_click) :
|
||||
GUIModalMenu(dev->getGUIEnvironment(), parent, id, menumgr),
|
||||
m_device(dev),
|
||||
m_invmgr(invmgr),
|
||||
m_gamedef(gamedef),
|
||||
m_invmgr(client),
|
||||
m_tsrc(tsrc),
|
||||
m_client(client),
|
||||
m_selected_item(NULL),
|
||||
@ -307,8 +306,8 @@ void GUIFormSpecMenu::parseContainerEnd(parserData* data)
|
||||
|
||||
void GUIFormSpecMenu::parseList(parserData* data,std::string element)
|
||||
{
|
||||
if (m_gamedef == 0) {
|
||||
warningstream<<"invalid use of 'list' with m_gamedef==0"<<std::endl;
|
||||
if (m_client == 0) {
|
||||
warningstream<<"invalid use of 'list' with m_client==0"<<std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -362,8 +361,8 @@ void GUIFormSpecMenu::parseList(parserData* data,std::string element)
|
||||
|
||||
void GUIFormSpecMenu::parseListRing(parserData* data, std::string element)
|
||||
{
|
||||
if (m_gamedef == 0) {
|
||||
errorstream << "WARNING: invalid use of 'listring' with m_gamedef==0" << std::endl;
|
||||
if (m_client == 0) {
|
||||
errorstream << "WARNING: invalid use of 'listring' with m_client==0" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1486,8 +1485,8 @@ void GUIFormSpecMenu::parseTabHeader(parserData* data,std::string element)
|
||||
void GUIFormSpecMenu::parseItemImageButton(parserData* data,std::string element)
|
||||
{
|
||||
|
||||
if (m_gamedef == 0) {
|
||||
warningstream << "invalid use of item_image_button with m_gamedef==0"
|
||||
if (m_client == 0) {
|
||||
warningstream << "invalid use of item_image_button with m_client==0"
|
||||
<< std::endl;
|
||||
return;
|
||||
}
|
||||
@ -1521,7 +1520,7 @@ void GUIFormSpecMenu::parseItemImageButton(parserData* data,std::string element)
|
||||
if(!data->explicit_size)
|
||||
warningstream<<"invalid use of item_image_button without a size[] element"<<std::endl;
|
||||
|
||||
IItemDefManager *idef = m_gamedef->idef();
|
||||
IItemDefManager *idef = m_client->idef();
|
||||
ItemStack item;
|
||||
item.deSerialize(item_name, idef);
|
||||
|
||||
@ -2297,14 +2296,14 @@ void GUIFormSpecMenu::drawList(const ListDrawSpec &s, int phase,
|
||||
if(!item.empty())
|
||||
{
|
||||
drawItemStack(driver, m_font, item,
|
||||
rect, &AbsoluteClippingRect, m_gamedef,
|
||||
rect, &AbsoluteClippingRect, m_client,
|
||||
rotation_kind);
|
||||
}
|
||||
|
||||
// Draw tooltip
|
||||
std::wstring tooltip_text = L"";
|
||||
if (hovering && !m_selected_item) {
|
||||
tooltip_text = utf8_to_wide(item.getDefinition(m_gamedef->idef()).description);
|
||||
tooltip_text = utf8_to_wide(item.getDefinition(m_client->idef()).description);
|
||||
}
|
||||
if (tooltip_text != L"") {
|
||||
std::vector<std::wstring> tt_rows = str_split(tooltip_text, L'\n');
|
||||
@ -2349,7 +2348,7 @@ void GUIFormSpecMenu::drawSelectedItem()
|
||||
if (!m_selected_item) {
|
||||
drawItemStack(driver, m_font, ItemStack(),
|
||||
core::rect<s32>(v2s32(0, 0), v2s32(0, 0)),
|
||||
NULL, m_gamedef, IT_ROT_DRAGGED);
|
||||
NULL, m_client, IT_ROT_DRAGGED);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -2363,7 +2362,7 @@ void GUIFormSpecMenu::drawSelectedItem()
|
||||
core::rect<s32> imgrect(0,0,imgsize.X,imgsize.Y);
|
||||
core::rect<s32> rect = imgrect + (m_pointer - imgrect.getCenter());
|
||||
rect.constrainTo(driver->getViewPort());
|
||||
drawItemStack(driver, m_font, stack, rect, NULL, m_gamedef, IT_ROT_DRAGGED);
|
||||
drawItemStack(driver, m_font, stack, rect, NULL, m_client, IT_ROT_DRAGGED);
|
||||
}
|
||||
|
||||
void GUIFormSpecMenu::drawMenu()
|
||||
@ -2488,11 +2487,11 @@ void GUIFormSpecMenu::drawMenu()
|
||||
*/
|
||||
for(u32 i=0; i<m_itemimages.size(); i++)
|
||||
{
|
||||
if (m_gamedef == 0)
|
||||
if (m_client == 0)
|
||||
break;
|
||||
|
||||
const ImageDrawSpec &spec = m_itemimages[i];
|
||||
IItemDefManager *idef = m_gamedef->idef();
|
||||
IItemDefManager *idef = m_client->idef();
|
||||
ItemStack item;
|
||||
item.deSerialize(spec.item_name, idef);
|
||||
core::rect<s32> imgrect(0, 0, spec.geom.X, spec.geom.Y);
|
||||
@ -2509,7 +2508,7 @@ void GUIFormSpecMenu::drawMenu()
|
||||
#endif
|
||||
}
|
||||
drawItemStack(driver, m_font, item, rect, &AbsoluteClippingRect,
|
||||
m_gamedef, IT_ROT_NONE);
|
||||
m_client, IT_ROT_NONE);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2527,7 +2526,7 @@ void GUIFormSpecMenu::drawMenu()
|
||||
if (!item_hovered) {
|
||||
drawItemStack(driver, m_font, ItemStack(),
|
||||
core::rect<s32>(v2s32(0, 0), v2s32(0, 0)),
|
||||
NULL, m_gamedef, IT_ROT_HOVERED);
|
||||
NULL, m_client, IT_ROT_HOVERED);
|
||||
}
|
||||
|
||||
/* TODO find way to show tooltips on touchscreen */
|
||||
@ -3470,7 +3469,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
|
||||
|
||||
// Check how many items can be moved
|
||||
move_amount = stack_from.count = MYMIN(move_amount, stack_from.count);
|
||||
ItemStack leftover = stack_to.addItem(stack_from, m_gamedef->idef());
|
||||
ItemStack leftover = stack_to.addItem(stack_from, m_client->idef());
|
||||
// If source stack cannot be added to destination stack at all,
|
||||
// they are swapped
|
||||
if ((leftover.count == stack_from.count) &&
|
||||
|
@ -34,7 +34,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "util/string.h"
|
||||
#include "util/enriched_string.h"
|
||||
|
||||
class IGameDef;
|
||||
class InventoryManager;
|
||||
class ISimpleTextureSource;
|
||||
class Client;
|
||||
@ -289,12 +288,10 @@ public:
|
||||
JoystickController *joystick,
|
||||
gui::IGUIElement* parent, s32 id,
|
||||
IMenuManager *menumgr,
|
||||
InventoryManager *invmgr,
|
||||
IGameDef *gamedef,
|
||||
Client *client,
|
||||
ISimpleTextureSource *tsrc,
|
||||
IFormSource* fs_src,
|
||||
TextDest* txt_dst,
|
||||
Client* client,
|
||||
bool remap_dbl_click = true);
|
||||
|
||||
~GUIFormSpecMenu();
|
||||
@ -384,7 +381,6 @@ protected:
|
||||
|
||||
irr::IrrlichtDevice* m_device;
|
||||
InventoryManager *m_invmgr;
|
||||
IGameDef *m_gamedef;
|
||||
ISimpleTextureSource *m_tsrc;
|
||||
Client *m_client;
|
||||
|
||||
|
20
src/hud.cpp
20
src/hud.cpp
@ -22,10 +22,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "hud.h"
|
||||
#include "settings.h"
|
||||
#include "util/numeric.h"
|
||||
#include "util/string.h"
|
||||
#include "log.h"
|
||||
#include "gamedef.h"
|
||||
#include "itemdef.h"
|
||||
#include "client.h"
|
||||
#include "inventory.h"
|
||||
#include "client/tile.h"
|
||||
#include "localplayer.h"
|
||||
@ -41,13 +39,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#endif
|
||||
|
||||
Hud::Hud(video::IVideoDriver *driver, scene::ISceneManager* smgr,
|
||||
gui::IGUIEnvironment* guienv, IGameDef *gamedef, LocalPlayer *player,
|
||||
gui::IGUIEnvironment* guienv, Client *client, LocalPlayer *player,
|
||||
Inventory *inventory)
|
||||
{
|
||||
this->driver = driver;
|
||||
this->smgr = smgr;
|
||||
this->guienv = guienv;
|
||||
this->gamedef = gamedef;
|
||||
this->client = client;
|
||||
this->player = player;
|
||||
this->inventory = inventory;
|
||||
|
||||
@ -61,7 +59,7 @@ Hud::Hud(video::IVideoDriver *driver, scene::ISceneManager* smgr,
|
||||
for (unsigned int i = 0; i < 4; i++)
|
||||
hbar_colors[i] = video::SColor(255, 255, 255, 255);
|
||||
|
||||
tsrc = gamedef->getTextureSource();
|
||||
tsrc = client->getTextureSource();
|
||||
|
||||
v3f crosshair_color = g_settings->getV3F("crosshair_color");
|
||||
u32 cross_r = rangelim(myround(crosshair_color.X), 0, 255);
|
||||
@ -92,7 +90,7 @@ Hud::Hud(video::IVideoDriver *driver, scene::ISceneManager* smgr,
|
||||
m_selection_material.Lighting = false;
|
||||
|
||||
if (g_settings->getBool("enable_shaders")) {
|
||||
IShaderSource *shdrsrc = gamedef->getShaderSource();
|
||||
IShaderSource *shdrsrc = client->getShaderSource();
|
||||
u16 shader_id = shdrsrc->getShader(
|
||||
mode == "halo" ? "selection_shader" : "default_shader", 1, 1);
|
||||
m_selection_material.MaterialType = shdrsrc->getShaderInfo(shader_id).material;
|
||||
@ -193,7 +191,7 @@ void Hud::drawItem(const ItemStack &item, const core::rect<s32>& rect,
|
||||
if (!use_hotbar_image)
|
||||
driver->draw2DRectangle(bgcolor2, rect, NULL);
|
||||
drawItemStack(driver, g_fontengine->getFont(), item, rect, NULL,
|
||||
gamedef, selected ? IT_ROT_SELECTED : IT_ROT_NONE);
|
||||
client, selected ? IT_ROT_SELECTED : IT_ROT_NONE);
|
||||
}
|
||||
|
||||
//NOTE: selectitem = 0 -> no selected; selectitem 1-based
|
||||
@ -629,7 +627,7 @@ void drawItemStack(video::IVideoDriver *driver,
|
||||
const ItemStack &item,
|
||||
const core::rect<s32> &rect,
|
||||
const core::rect<s32> *clip,
|
||||
IGameDef *gamedef,
|
||||
Client *client,
|
||||
ItemRotationKind rotation_kind)
|
||||
{
|
||||
static MeshTimeInfo rotation_time_infos[IT_ROT_NONE];
|
||||
@ -643,8 +641,8 @@ void drawItemStack(video::IVideoDriver *driver,
|
||||
return;
|
||||
}
|
||||
|
||||
const ItemDefinition &def = item.getDefinition(gamedef->idef());
|
||||
scene::IMesh* mesh = gamedef->idef()->getWieldMesh(def.name, gamedef);
|
||||
const ItemDefinition &def = item.getDefinition(client->idef());
|
||||
scene::IMesh* mesh = client->idef()->getWieldMesh(def.name, client);
|
||||
|
||||
if (mesh) {
|
||||
driver->clearZBuffer();
|
||||
|
@ -95,7 +95,7 @@ struct HudElement {
|
||||
#include <IGUIFont.h>
|
||||
#include "irr_aabb3d.h"
|
||||
|
||||
class IGameDef;
|
||||
class Client;
|
||||
class ITextureSource;
|
||||
class Inventory;
|
||||
class InventoryList;
|
||||
@ -107,7 +107,7 @@ public:
|
||||
video::IVideoDriver *driver;
|
||||
scene::ISceneManager* smgr;
|
||||
gui::IGUIEnvironment *guienv;
|
||||
IGameDef *gamedef;
|
||||
Client *client;
|
||||
LocalPlayer *player;
|
||||
Inventory *inventory;
|
||||
ITextureSource *tsrc;
|
||||
@ -121,7 +121,7 @@ public:
|
||||
bool use_hotbar_selected_image;
|
||||
|
||||
Hud(video::IVideoDriver *driver,scene::ISceneManager* smgr,
|
||||
gui::IGUIEnvironment* guienv, IGameDef *gamedef, LocalPlayer *player,
|
||||
gui::IGUIEnvironment* guienv, Client *client, LocalPlayer *player,
|
||||
Inventory *inventory);
|
||||
~Hud();
|
||||
|
||||
@ -190,7 +190,7 @@ void drawItemStack(video::IVideoDriver *driver,
|
||||
const ItemStack &item,
|
||||
const core::rect<s32> &rect,
|
||||
const core::rect<s32> *clip,
|
||||
IGameDef *gamedef,
|
||||
Client *client,
|
||||
ItemRotationKind rotation_kind);
|
||||
|
||||
#endif
|
||||
|
@ -20,7 +20,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
|
||||
#include "itemdef.h"
|
||||
|
||||
#include "gamedef.h"
|
||||
#include "nodedef.h"
|
||||
#include "tool.h"
|
||||
#include "inventory.h"
|
||||
@ -29,6 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "mesh.h"
|
||||
#include "wieldmesh.h"
|
||||
#include "client/tile.h"
|
||||
#include "client.h"
|
||||
#endif
|
||||
#include "log.h"
|
||||
#include "settings.h"
|
||||
@ -317,7 +317,7 @@ public:
|
||||
#ifndef SERVER
|
||||
public:
|
||||
ClientCached* createClientCachedDirect(const std::string &name,
|
||||
IGameDef *gamedef) const
|
||||
Client *client) const
|
||||
{
|
||||
infostream<<"Lazily creating item texture and mesh for \""
|
||||
<<name<<"\""<<std::endl;
|
||||
@ -331,7 +331,7 @@ public:
|
||||
if(cc)
|
||||
return cc;
|
||||
|
||||
ITextureSource *tsrc = gamedef->getTextureSource();
|
||||
ITextureSource *tsrc = client->getTextureSource();
|
||||
const ItemDefinition &def = get(name);
|
||||
|
||||
// Create new ClientCached
|
||||
@ -345,7 +345,7 @@ public:
|
||||
ItemStack item = ItemStack();
|
||||
item.name = def.name;
|
||||
|
||||
scene::IMesh *mesh = getItemMesh(gamedef, item);
|
||||
scene::IMesh *mesh = getItemMesh(client, item);
|
||||
cc->wield_mesh = mesh;
|
||||
|
||||
// Put in cache
|
||||
@ -354,7 +354,7 @@ public:
|
||||
return cc;
|
||||
}
|
||||
ClientCached* getClientCached(const std::string &name,
|
||||
IGameDef *gamedef) const
|
||||
Client *client) const
|
||||
{
|
||||
ClientCached *cc = NULL;
|
||||
m_clientcached.get(name, &cc);
|
||||
@ -363,7 +363,7 @@ public:
|
||||
|
||||
if(thr_is_current_thread(m_main_thread))
|
||||
{
|
||||
return createClientCachedDirect(name, gamedef);
|
||||
return createClientCachedDirect(name, client);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -392,18 +392,18 @@ public:
|
||||
}
|
||||
// Get item inventory texture
|
||||
virtual video::ITexture* getInventoryTexture(const std::string &name,
|
||||
IGameDef *gamedef) const
|
||||
Client *client) const
|
||||
{
|
||||
ClientCached *cc = getClientCached(name, gamedef);
|
||||
ClientCached *cc = getClientCached(name, client);
|
||||
if(!cc)
|
||||
return NULL;
|
||||
return cc->inventory_texture;
|
||||
}
|
||||
// Get item wield mesh
|
||||
virtual scene::IMesh* getWieldMesh(const std::string &name,
|
||||
IGameDef *gamedef) const
|
||||
Client *client) const
|
||||
{
|
||||
ClientCached *cc = getClientCached(name, gamedef);
|
||||
ClientCached *cc = getClientCached(name, client);
|
||||
if(!cc)
|
||||
return NULL;
|
||||
return cc->wield_mesh;
|
||||
@ -543,7 +543,7 @@ public:
|
||||
request = m_get_clientcached_queue.pop();
|
||||
|
||||
m_get_clientcached_queue.pushResult(request,
|
||||
createClientCachedDirect(request.key, gamedef));
|
||||
createClientCachedDirect(request.key, (Client *)gamedef));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -28,6 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "itemgroup.h"
|
||||
#include "sound.h"
|
||||
class IGameDef;
|
||||
class Client;
|
||||
struct ToolCapabilities;
|
||||
|
||||
/*
|
||||
@ -107,10 +108,10 @@ public:
|
||||
#ifndef SERVER
|
||||
// Get item inventory texture
|
||||
virtual video::ITexture* getInventoryTexture(const std::string &name,
|
||||
IGameDef *gamedef) const=0;
|
||||
Client *client) const=0;
|
||||
// Get item wield mesh
|
||||
virtual scene::IMesh* getWieldMesh(const std::string &name,
|
||||
IGameDef *gamedef) const=0;
|
||||
Client *client) const=0;
|
||||
#endif
|
||||
|
||||
virtual void serialize(std::ostream &os, u16 protocol_version)=0;
|
||||
@ -133,10 +134,10 @@ public:
|
||||
#ifndef SERVER
|
||||
// Get item inventory texture
|
||||
virtual video::ITexture* getInventoryTexture(const std::string &name,
|
||||
IGameDef *gamedef) const=0;
|
||||
Client *client) const=0;
|
||||
// Get item wield mesh
|
||||
virtual scene::IMesh* getWieldMesh(const std::string &name,
|
||||
IGameDef *gamedef) const=0;
|
||||
Client *client) const=0;
|
||||
#endif
|
||||
|
||||
// Remove all registered item and node definitions and aliases
|
||||
|
@ -21,7 +21,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
|
||||
#include "event.h"
|
||||
#include "collision.h"
|
||||
#include "gamedef.h"
|
||||
#include "nodedef.h"
|
||||
#include "settings.h"
|
||||
#include "environment.h"
|
||||
@ -32,8 +31,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
LocalPlayer
|
||||
*/
|
||||
|
||||
LocalPlayer::LocalPlayer(Client *gamedef, const char *name):
|
||||
Player(name, gamedef->idef()),
|
||||
LocalPlayer::LocalPlayer(Client *client, const char *name):
|
||||
Player(name, client->idef()),
|
||||
parent(0),
|
||||
hp(PLAYER_MAX_HP),
|
||||
got_teleported(false),
|
||||
@ -79,7 +78,7 @@ LocalPlayer::LocalPlayer(Client *gamedef, const char *name):
|
||||
camera_barely_in_ceiling(false),
|
||||
m_collisionbox(-BS * 0.30, 0.0, -BS * 0.30, BS * 0.30, BS * 1.75, BS * 0.30),
|
||||
m_cao(NULL),
|
||||
m_gamedef(gamedef)
|
||||
m_client(client)
|
||||
{
|
||||
// Initialize hp to 0, so that no hearts will be shown if server
|
||||
// doesn't support health points
|
||||
@ -96,7 +95,7 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
|
||||
std::vector<CollisionInfo> *collision_info)
|
||||
{
|
||||
Map *map = &env->getMap();
|
||||
INodeDefManager *nodemgr = m_gamedef->ndef();
|
||||
INodeDefManager *nodemgr = m_client->ndef();
|
||||
|
||||
v3f position = getPosition();
|
||||
|
||||
@ -109,8 +108,8 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
|
||||
}
|
||||
|
||||
// Skip collision detection if noclip mode is used
|
||||
bool fly_allowed = m_gamedef->checkLocalPrivilege("fly");
|
||||
bool noclip = m_gamedef->checkLocalPrivilege("noclip") &&
|
||||
bool fly_allowed = m_client->checkLocalPrivilege("fly");
|
||||
bool noclip = m_client->checkLocalPrivilege("noclip") &&
|
||||
g_settings->getBool("noclip");
|
||||
bool free_move = noclip && fly_allowed && g_settings->getBool("free_move");
|
||||
if (free_move) {
|
||||
@ -241,7 +240,7 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
|
||||
|
||||
v3f accel_f = v3f(0,0,0);
|
||||
|
||||
collisionMoveResult result = collisionMoveSimple(env, m_gamedef,
|
||||
collisionMoveResult result = collisionMoveSimple(env, m_client,
|
||||
pos_max_d, m_collisionbox, player_stepheight, dtime,
|
||||
&position, &m_speed, accel_f);
|
||||
|
||||
@ -376,7 +375,7 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
|
||||
|
||||
if(!result.standing_on_object && !touching_ground_was && touching_ground) {
|
||||
MtEvent *e = new SimpleTriggerEvent("PlayerRegainGround");
|
||||
m_gamedef->event()->put(e);
|
||||
m_client->event()->put(e);
|
||||
|
||||
// Set camera impact value to be used for view bobbing
|
||||
camera_impact = getSpeed().Y * -1;
|
||||
@ -448,8 +447,8 @@ void LocalPlayer::applyControl(float dtime)
|
||||
v3f speedH = v3f(0,0,0); // Horizontal (X, Z)
|
||||
v3f speedV = v3f(0,0,0); // Vertical (Y)
|
||||
|
||||
bool fly_allowed = m_gamedef->checkLocalPrivilege("fly");
|
||||
bool fast_allowed = m_gamedef->checkLocalPrivilege("fast");
|
||||
bool fly_allowed = m_client->checkLocalPrivilege("fly");
|
||||
bool fast_allowed = m_client->checkLocalPrivilege("fast");
|
||||
|
||||
bool free_move = fly_allowed && g_settings->getBool("free_move");
|
||||
bool fast_move = fast_allowed && g_settings->getBool("fast_move");
|
||||
@ -599,7 +598,7 @@ void LocalPlayer::applyControl(float dtime)
|
||||
setSpeed(speedJ);
|
||||
|
||||
MtEvent *e = new SimpleTriggerEvent("PlayerJump");
|
||||
m_gamedef->event()->put(e);
|
||||
m_client->event()->put(e);
|
||||
}
|
||||
}
|
||||
else if(in_liquid)
|
||||
|
@ -35,7 +35,7 @@ enum LocalPlayerAnimations {NO_ANIM, WALK_ANIM, DIG_ANIM, WD_ANIM}; // no local
|
||||
class LocalPlayer : public Player
|
||||
{
|
||||
public:
|
||||
LocalPlayer(Client *gamedef, const char *name);
|
||||
LocalPlayer(Client *client, const char *name);
|
||||
virtual ~LocalPlayer();
|
||||
|
||||
ClientActiveObject *parent;
|
||||
@ -162,7 +162,7 @@ private:
|
||||
aabb3f m_collisionbox;
|
||||
|
||||
GenericCAO* m_cao;
|
||||
Client *m_gamedef;
|
||||
Client *m_client;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -23,7 +23,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "map.h"
|
||||
#include "profiler.h"
|
||||
#include "nodedef.h"
|
||||
#include "gamedef.h"
|
||||
#include "mesh.h"
|
||||
#include "minimap.h"
|
||||
#include "content_mapblock.h"
|
||||
@ -43,14 +42,14 @@ static void applyFacesShading(video::SColor &color, const float factor)
|
||||
MeshMakeData
|
||||
*/
|
||||
|
||||
MeshMakeData::MeshMakeData(IGameDef *gamedef, bool use_shaders,
|
||||
MeshMakeData::MeshMakeData(Client *client, bool use_shaders,
|
||||
bool use_tangent_vertices):
|
||||
m_vmanip(),
|
||||
m_blockpos(-1337,-1337,-1337),
|
||||
m_crack_pos_relative(-1337, -1337, -1337),
|
||||
m_smooth_lighting(false),
|
||||
m_show_hud(false),
|
||||
m_gamedef(gamedef),
|
||||
m_client(client),
|
||||
m_use_shaders(use_shaders),
|
||||
m_use_tangent_vertices(use_tangent_vertices)
|
||||
{}
|
||||
@ -233,7 +232,7 @@ static u16 getSmoothLightCombined(v3s16 p, MeshMakeData *data)
|
||||
v3s16(1,1,1),
|
||||
};
|
||||
|
||||
INodeDefManager *ndef = data->m_gamedef->ndef();
|
||||
INodeDefManager *ndef = data->m_client->ndef();
|
||||
|
||||
u16 ambient_occlusion = 0;
|
||||
u16 light_count = 0;
|
||||
@ -664,7 +663,7 @@ static u8 face_contents(content_t m1, content_t m2, bool *equivalent,
|
||||
*/
|
||||
TileSpec getNodeTileN(MapNode mn, v3s16 p, u8 tileindex, MeshMakeData *data)
|
||||
{
|
||||
INodeDefManager *ndef = data->m_gamedef->ndef();
|
||||
INodeDefManager *ndef = data->m_client->ndef();
|
||||
TileSpec spec = ndef->get(mn).tiles[tileindex];
|
||||
// Apply temporary crack
|
||||
if (p == data->m_crack_pos_relative)
|
||||
@ -677,7 +676,7 @@ TileSpec getNodeTileN(MapNode mn, v3s16 p, u8 tileindex, MeshMakeData *data)
|
||||
*/
|
||||
TileSpec getNodeTile(MapNode mn, v3s16 p, v3s16 dir, MeshMakeData *data)
|
||||
{
|
||||
INodeDefManager *ndef = data->m_gamedef->ndef();
|
||||
INodeDefManager *ndef = data->m_client->ndef();
|
||||
|
||||
// Direction must be (1,0,0), (-1,0,0), (0,1,0), (0,-1,0),
|
||||
// (0,0,1), (0,0,-1) or (0,0,0)
|
||||
@ -734,7 +733,7 @@ TileSpec getNodeTile(MapNode mn, v3s16 p, v3s16 dir, MeshMakeData *data)
|
||||
u16 tile_index=facedir*16 + dir_i;
|
||||
TileSpec spec = getNodeTileN(mn, p, dir_to_tile[tile_index], data);
|
||||
spec.rotation=dir_to_tile[tile_index + 1];
|
||||
spec.texture = data->m_gamedef->tsrc()->getTexture(spec.texture_id);
|
||||
spec.texture = data->m_client->tsrc()->getTexture(spec.texture_id);
|
||||
return spec;
|
||||
}
|
||||
|
||||
@ -753,7 +752,7 @@ static void getTileInfo(
|
||||
)
|
||||
{
|
||||
VoxelManipulator &vmanip = data->m_vmanip;
|
||||
INodeDefManager *ndef = data->m_gamedef->ndef();
|
||||
INodeDefManager *ndef = data->m_client->ndef();
|
||||
v3s16 blockpos_nodes = data->m_blockpos * MAP_BLOCKSIZE;
|
||||
|
||||
MapNode &n0 = vmanip.getNodeRefUnsafe(blockpos_nodes + p);
|
||||
@ -1020,10 +1019,10 @@ static void updateAllFastFaceRows(MeshMakeData *data,
|
||||
MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
|
||||
m_mesh(new scene::SMesh()),
|
||||
m_minimap_mapblock(NULL),
|
||||
m_gamedef(data->m_gamedef),
|
||||
m_driver(m_gamedef->tsrc()->getDevice()->getVideoDriver()),
|
||||
m_tsrc(m_gamedef->getTextureSource()),
|
||||
m_shdrsrc(m_gamedef->getShaderSource()),
|
||||
m_client(data->m_client),
|
||||
m_driver(m_client->tsrc()->getDevice()->getVideoDriver()),
|
||||
m_tsrc(m_client->getTextureSource()),
|
||||
m_shdrsrc(m_client->getShaderSource()),
|
||||
m_animation_force_timer(0), // force initial animation
|
||||
m_last_crack(-1),
|
||||
m_crack_materials(),
|
||||
@ -1243,7 +1242,7 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
|
||||
|
||||
if (m_use_tangent_vertices) {
|
||||
scene::IMeshManipulator* meshmanip =
|
||||
m_gamedef->getSceneManager()->getMeshManipulator();
|
||||
m_client->getSceneManager()->getMeshManipulator();
|
||||
meshmanip->recalculateTangents(m_mesh, true, false, false);
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "util/cpp11_container.h"
|
||||
#include <map>
|
||||
|
||||
class IGameDef;
|
||||
class Client;
|
||||
class IShaderSource;
|
||||
|
||||
/*
|
||||
@ -45,11 +45,11 @@ struct MeshMakeData
|
||||
bool m_smooth_lighting;
|
||||
bool m_show_hud;
|
||||
|
||||
IGameDef *m_gamedef;
|
||||
Client *m_client;
|
||||
bool m_use_shaders;
|
||||
bool m_use_tangent_vertices;
|
||||
|
||||
MeshMakeData(IGameDef *gamedef, bool use_shaders,
|
||||
MeshMakeData(Client *client, bool use_shaders,
|
||||
bool use_tangent_vertices = false);
|
||||
|
||||
/*
|
||||
@ -128,7 +128,7 @@ public:
|
||||
private:
|
||||
scene::IMesh *m_mesh;
|
||||
MinimapMapblock *m_minimap_mapblock;
|
||||
IGameDef *m_gamedef;
|
||||
Client *m_client;
|
||||
video::IVideoDriver *m_driver;
|
||||
ITextureSource *m_tsrc;
|
||||
IShaderSource *m_shdrsrc;
|
||||
|
@ -20,10 +20,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "mg_biome.h"
|
||||
#include "mg_decoration.h"
|
||||
#include "emerge.h"
|
||||
#include "gamedef.h"
|
||||
#include "server.h"
|
||||
#include "nodedef.h"
|
||||
#include "map.h" //for MMVManip
|
||||
#include "log.h"
|
||||
#include "util/numeric.h"
|
||||
#include "util/mathconstants.h"
|
||||
#include "porting.h"
|
||||
@ -33,10 +32,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
BiomeManager::BiomeManager(IGameDef *gamedef) :
|
||||
ObjDefManager(gamedef, OBJDEF_BIOME)
|
||||
BiomeManager::BiomeManager(Server *server) :
|
||||
ObjDefManager(server, OBJDEF_BIOME)
|
||||
{
|
||||
m_gamedef = gamedef;
|
||||
m_server = server;
|
||||
|
||||
// Create default biome to be used in case none exist
|
||||
Biome *b = new Biome;
|
||||
@ -73,7 +72,7 @@ BiomeManager::~BiomeManager()
|
||||
|
||||
void BiomeManager::clear()
|
||||
{
|
||||
EmergeManager *emerge = m_gamedef->getEmergeManager();
|
||||
EmergeManager *emerge = m_server->getEmergeManager();
|
||||
|
||||
// Remove all dangling references in Decorations
|
||||
DecorationManager *decomgr = emerge->decomgr;
|
||||
|
@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "nodedef.h"
|
||||
#include "noise.h"
|
||||
|
||||
class Server;
|
||||
class Settings;
|
||||
class BiomeManager;
|
||||
|
||||
@ -186,7 +187,7 @@ private:
|
||||
|
||||
class BiomeManager : public ObjDefManager {
|
||||
public:
|
||||
BiomeManager(IGameDef *gamedef);
|
||||
BiomeManager(Server *server);
|
||||
virtual ~BiomeManager();
|
||||
|
||||
const char *getObjectTitle() const
|
||||
@ -223,7 +224,7 @@ public:
|
||||
virtual void clear();
|
||||
|
||||
private:
|
||||
IGameDef *m_gamedef;
|
||||
Server *m_server;
|
||||
|
||||
};
|
||||
|
||||
|
@ -20,7 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include <fstream>
|
||||
#include <typeinfo>
|
||||
#include "mg_schematic.h"
|
||||
#include "gamedef.h"
|
||||
#include "server.h"
|
||||
#include "mapgen.h"
|
||||
#include "emerge.h"
|
||||
#include "map.h"
|
||||
@ -34,16 +34,16 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
SchematicManager::SchematicManager(IGameDef *gamedef) :
|
||||
ObjDefManager(gamedef, OBJDEF_SCHEMATIC)
|
||||
SchematicManager::SchematicManager(Server *server) :
|
||||
ObjDefManager(server, OBJDEF_SCHEMATIC)
|
||||
{
|
||||
m_gamedef = gamedef;
|
||||
m_server = server;
|
||||
}
|
||||
|
||||
|
||||
void SchematicManager::clear()
|
||||
{
|
||||
EmergeManager *emerge = m_gamedef->getEmergeManager();
|
||||
EmergeManager *emerge = m_server->getEmergeManager();
|
||||
|
||||
// Remove all dangling references in Decorations
|
||||
DecorationManager *decomgr = emerge->decomgr;
|
||||
|
@ -29,7 +29,7 @@ class Mapgen;
|
||||
class MMVManip;
|
||||
class PseudoRandom;
|
||||
class NodeResolver;
|
||||
class IGameDef;
|
||||
class Server;
|
||||
|
||||
/*
|
||||
Minetest Schematic File Format
|
||||
@ -123,7 +123,7 @@ public:
|
||||
|
||||
class SchematicManager : public ObjDefManager {
|
||||
public:
|
||||
SchematicManager(IGameDef *gamedef);
|
||||
SchematicManager(Server *server);
|
||||
virtual ~SchematicManager() {}
|
||||
|
||||
virtual void clear();
|
||||
@ -139,7 +139,7 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
IGameDef *m_gamedef;
|
||||
Server *m_server;
|
||||
};
|
||||
|
||||
void generate_nodelist_and_update_ids(MapNode *nodes, size_t nodecount,
|
||||
|
@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#ifndef SERVER
|
||||
#include "client/tile.h"
|
||||
#include "mesh.h"
|
||||
#include "client.h"
|
||||
#include <IMeshManipulator.h>
|
||||
#endif
|
||||
#include "log.h"
|
||||
@ -572,8 +573,7 @@ void ContentFeatures::fillTileAttribs(ITextureSource *tsrc, TileSpec *tile,
|
||||
|
||||
#ifndef SERVER
|
||||
void ContentFeatures::updateTextures(ITextureSource *tsrc, IShaderSource *shdsrc,
|
||||
scene::ISceneManager *smgr, scene::IMeshManipulator *meshmanip,
|
||||
IGameDef *gamedef, const TextureSettings &tsettings)
|
||||
scene::IMeshManipulator *meshmanip, Client *client, const TextureSettings &tsettings)
|
||||
{
|
||||
// minimap pixel color - the average color of a texture
|
||||
if (tsettings.enable_minimap && tiledef[0].name != "")
|
||||
@ -709,7 +709,7 @@ void ContentFeatures::updateTextures(ITextureSource *tsrc, IShaderSource *shdsrc
|
||||
if ((drawtype == NDT_MESH) && (mesh != "")) {
|
||||
// Meshnode drawtype
|
||||
// Read the mesh and apply scale
|
||||
mesh_ptr[0] = gamedef->getMesh(mesh);
|
||||
mesh_ptr[0] = client->getMesh(mesh);
|
||||
if (mesh_ptr[0]){
|
||||
v3f scale = v3f(1.0, 1.0, 1.0) * BS * visual_scale;
|
||||
scaleMesh(mesh_ptr[0], scale);
|
||||
@ -1316,9 +1316,11 @@ void CNodeDefManager::updateTextures(IGameDef *gamedef,
|
||||
#ifndef SERVER
|
||||
infostream << "CNodeDefManager::updateTextures(): Updating "
|
||||
"textures in node definitions" << std::endl;
|
||||
ITextureSource *tsrc = gamedef->tsrc();
|
||||
IShaderSource *shdsrc = gamedef->getShaderSource();
|
||||
scene::ISceneManager* smgr = gamedef->getSceneManager();
|
||||
|
||||
Client *client = (Client *)gamedef;
|
||||
ITextureSource *tsrc = client->tsrc();
|
||||
IShaderSource *shdsrc = client->getShaderSource();
|
||||
scene::ISceneManager* smgr = client->getSceneManager();
|
||||
scene::IMeshManipulator* meshmanip = smgr->getMeshManipulator();
|
||||
TextureSettings tsettings;
|
||||
tsettings.readSettings();
|
||||
@ -1326,7 +1328,7 @@ void CNodeDefManager::updateTextures(IGameDef *gamedef,
|
||||
u32 size = m_content_features.size();
|
||||
|
||||
for (u32 i = 0; i < size; i++) {
|
||||
m_content_features[i].updateTextures(tsrc, shdsrc, smgr, meshmanip, gamedef, tsettings);
|
||||
m_content_features[i].updateTextures(tsrc, shdsrc, meshmanip, client, tsettings);
|
||||
progress_callback(progress_callback_args, i, size);
|
||||
}
|
||||
#endif
|
||||
|
@ -30,6 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#ifndef SERVER
|
||||
#include "client/tile.h"
|
||||
#include "shader.h"
|
||||
class Client;
|
||||
#endif
|
||||
#include "itemgroup.h"
|
||||
#include "sound.h" // SimpleSoundSpec
|
||||
@ -322,8 +323,7 @@ struct ContentFeatures
|
||||
u32 shader_id, bool use_normal_texture, bool backface_culling,
|
||||
u8 alpha, u8 material_type);
|
||||
void updateTextures(ITextureSource *tsrc, IShaderSource *shdsrc,
|
||||
scene::ISceneManager *smgr, scene::IMeshManipulator *meshmanip,
|
||||
IGameDef *gamedef, const TextureSettings &tsettings);
|
||||
scene::IMeshManipulator *meshmanip, Client *client, const TextureSettings &tsettings);
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -18,11 +18,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
*/
|
||||
|
||||
#include "particles.h"
|
||||
#include "constants.h"
|
||||
#include "debug.h"
|
||||
#include "settings.h"
|
||||
#include "client/tile.h"
|
||||
#include "gamedef.h"
|
||||
#include "client.h"
|
||||
#include "collision.h"
|
||||
#include <stdlib.h>
|
||||
#include "util/numeric.h"
|
||||
@ -452,7 +448,7 @@ void ParticleManager::clearAll ()
|
||||
}
|
||||
}
|
||||
|
||||
void ParticleManager::handleParticleEvent(ClientEvent *event, IGameDef *gamedef,
|
||||
void ParticleManager::handleParticleEvent(ClientEvent *event, Client *client,
|
||||
scene::ISceneManager* smgr, LocalPlayer *player)
|
||||
{
|
||||
switch (event->type) {
|
||||
@ -477,9 +473,9 @@ void ParticleManager::handleParticleEvent(ClientEvent *event, IGameDef *gamedef,
|
||||
}
|
||||
|
||||
video::ITexture *texture =
|
||||
gamedef->tsrc()->getTextureForMesh(*(event->add_particlespawner.texture));
|
||||
client->tsrc()->getTextureForMesh(*(event->add_particlespawner.texture));
|
||||
|
||||
ParticleSpawner* toadd = new ParticleSpawner(gamedef, smgr, player,
|
||||
ParticleSpawner* toadd = new ParticleSpawner(client, smgr, player,
|
||||
event->add_particlespawner.amount,
|
||||
event->add_particlespawner.spawntime,
|
||||
*event->add_particlespawner.minpos,
|
||||
@ -520,9 +516,9 @@ void ParticleManager::handleParticleEvent(ClientEvent *event, IGameDef *gamedef,
|
||||
}
|
||||
case CE_SPAWN_PARTICLE: {
|
||||
video::ITexture *texture =
|
||||
gamedef->tsrc()->getTextureForMesh(*(event->spawn_particle.texture));
|
||||
client->tsrc()->getTextureForMesh(*(event->spawn_particle.texture));
|
||||
|
||||
Particle* toadd = new Particle(gamedef, smgr, player, m_env,
|
||||
Particle* toadd = new Particle(client, smgr, player, m_env,
|
||||
*event->spawn_particle.pos,
|
||||
*event->spawn_particle.vel,
|
||||
*event->spawn_particle.acc,
|
||||
|
@ -170,7 +170,7 @@ public:
|
||||
|
||||
void step (float dtime);
|
||||
|
||||
void handleParticleEvent(ClientEvent *event,IGameDef *gamedef,
|
||||
void handleParticleEvent(ClientEvent *event, Client *client,
|
||||
scene::ISceneManager* smgr, LocalPlayer *player);
|
||||
|
||||
void addDiggingParticles(IGameDef* gamedef, scene::ISceneManager* smgr,
|
||||
|
@ -24,12 +24,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
|
||||
#include "pathfinder.h"
|
||||
#include "serverenvironment.h"
|
||||
#include "gamedef.h"
|
||||
#include "server.h"
|
||||
#include "nodedef.h"
|
||||
#include "map.h"
|
||||
#include "log.h"
|
||||
#include "irr_aabb3d.h"
|
||||
#include "util/basic_macros.h"
|
||||
|
||||
//#define PATHFINDER_DEBUG
|
||||
//#define PATHFINDER_CALC_TIME
|
||||
|
@ -20,14 +20,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "lua_api/l_nodemeta.h"
|
||||
#include "lua_api/l_internal.h"
|
||||
#include "lua_api/l_inventory.h"
|
||||
#include "common/c_converter.h"
|
||||
#include "common/c_content.h"
|
||||
#include "serverenvironment.h"
|
||||
#include "map.h"
|
||||
#include "gamedef.h"
|
||||
#include "nodemetadata.h"
|
||||
|
||||
|
||||
#include "server.h"
|
||||
|
||||
/*
|
||||
NodeMetaRef
|
||||
|
@ -50,7 +50,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "content_abm.h"
|
||||
#include "content_sao.h"
|
||||
#include "mods.h"
|
||||
#include "sound.h" // dummySoundManager
|
||||
#include "event_manager.h"
|
||||
#include "serverlist.h"
|
||||
#include "util/string.h"
|
||||
@ -3310,29 +3309,12 @@ ICraftDefManager *Server::getCraftDefManager()
|
||||
{
|
||||
return m_craftdef;
|
||||
}
|
||||
ITextureSource *Server::getTextureSource()
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
IShaderSource *Server::getShaderSource()
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
scene::ISceneManager *Server::getSceneManager()
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
u16 Server::allocateUnknownNodeId(const std::string &name)
|
||||
{
|
||||
return m_nodedef->allocateDummy(name);
|
||||
}
|
||||
|
||||
ISoundManager *Server::getSoundManager()
|
||||
{
|
||||
return &dummySoundManager;
|
||||
}
|
||||
|
||||
MtEventManager *Server::getEventManager()
|
||||
{
|
||||
return m_event;
|
||||
|
@ -283,13 +283,9 @@ public:
|
||||
virtual IItemDefManager* getItemDefManager();
|
||||
virtual INodeDefManager* getNodeDefManager();
|
||||
virtual ICraftDefManager* getCraftDefManager();
|
||||
virtual ITextureSource* getTextureSource();
|
||||
virtual IShaderSource* getShaderSource();
|
||||
virtual u16 allocateUnknownNodeId(const std::string &name);
|
||||
virtual ISoundManager* getSoundManager();
|
||||
virtual MtEventManager* getEventManager();
|
||||
virtual scene::ISceneManager* getSceneManager();
|
||||
virtual IRollbackManager *getRollbackManager() { return m_rollback; }
|
||||
IRollbackManager *getRollbackManager() { return m_rollback; }
|
||||
virtual EmergeManager *getEmergeManager() { return m_emerge; }
|
||||
|
||||
IWritableItemDefManager* getWritableItemDefManager();
|
||||
|
@ -352,11 +352,11 @@ void ActiveBlockList::update(std::vector<v3s16> &active_positions,
|
||||
*/
|
||||
|
||||
ServerEnvironment::ServerEnvironment(ServerMap *map,
|
||||
GameScripting *scriptIface, IGameDef *gamedef,
|
||||
GameScripting *scriptIface, Server *server,
|
||||
const std::string &path_world) :
|
||||
m_map(map),
|
||||
m_script(scriptIface),
|
||||
m_gamedef(gamedef),
|
||||
m_server(server),
|
||||
m_path_world(path_world),
|
||||
m_send_recommended_timer(0),
|
||||
m_active_block_interval_overload_skip(0),
|
||||
@ -487,7 +487,7 @@ void ServerEnvironment::kickAllPlayers(AccessDeniedCode reason,
|
||||
for (std::vector<RemotePlayer *>::iterator it = m_players.begin();
|
||||
it != m_players.end(); ++it) {
|
||||
RemotePlayer *player = dynamic_cast<RemotePlayer *>(*it);
|
||||
((Server*)m_gamedef)->DenyAccessVerCompliant(player->peer_id,
|
||||
m_server->DenyAccessVerCompliant(player->peer_id,
|
||||
player->protocol_version, reason, str_reason, reconnect);
|
||||
}
|
||||
}
|
||||
@ -501,7 +501,7 @@ void ServerEnvironment::saveLoadedPlayers()
|
||||
it != m_players.end();
|
||||
++it) {
|
||||
if ((*it)->checkModified()) {
|
||||
(*it)->save(players_path, m_gamedef);
|
||||
(*it)->save(players_path, m_server);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -511,7 +511,7 @@ void ServerEnvironment::savePlayer(RemotePlayer *player)
|
||||
std::string players_path = m_path_world + DIR_DELIM "players";
|
||||
fs::CreateDir(players_path);
|
||||
|
||||
player->save(players_path, m_gamedef);
|
||||
player->save(players_path, m_server);
|
||||
}
|
||||
|
||||
RemotePlayer *ServerEnvironment::loadPlayer(const std::string &playername, PlayerSAO *sao)
|
||||
@ -523,7 +523,7 @@ RemotePlayer *ServerEnvironment::loadPlayer(const std::string &playername, Playe
|
||||
|
||||
RemotePlayer *player = getPlayer(playername.c_str());
|
||||
if (!player) {
|
||||
player = new RemotePlayer("", m_gamedef->idef());
|
||||
player = new RemotePlayer("", m_server->idef());
|
||||
newplayer = true;
|
||||
}
|
||||
|
||||
@ -632,7 +632,7 @@ void ServerEnvironment::loadMeta()
|
||||
} catch (SettingNotFoundException &e) {
|
||||
// No problem, this is expected. Just continue with an empty string
|
||||
}
|
||||
m_lbm_mgr.loadIntroductionTimes(lbm_introduction_times, m_gamedef, m_game_time);
|
||||
m_lbm_mgr.loadIntroductionTimes(lbm_introduction_times, m_server, m_game_time);
|
||||
|
||||
m_day_count = args.exists("day_count") ?
|
||||
args.getU64("day_count") : 0;
|
||||
@ -640,7 +640,7 @@ void ServerEnvironment::loadMeta()
|
||||
|
||||
void ServerEnvironment::loadDefaultMeta()
|
||||
{
|
||||
m_lbm_mgr.loadIntroductionTimes("", m_gamedef, m_game_time);
|
||||
m_lbm_mgr.loadIntroductionTimes("", m_server, m_game_time);
|
||||
}
|
||||
|
||||
struct ActiveABM
|
||||
@ -902,7 +902,7 @@ void ServerEnvironment::addLoadingBlockModifierDef(LoadingBlockModifierDef *lbm)
|
||||
|
||||
bool ServerEnvironment::setNode(v3s16 p, const MapNode &n)
|
||||
{
|
||||
INodeDefManager *ndef = m_gamedef->ndef();
|
||||
INodeDefManager *ndef = m_server->ndef();
|
||||
MapNode n_old = m_map->getNodeNoEx(p);
|
||||
|
||||
// Call destructor
|
||||
@ -929,7 +929,7 @@ bool ServerEnvironment::setNode(v3s16 p, const MapNode &n)
|
||||
|
||||
bool ServerEnvironment::removeNode(v3s16 p)
|
||||
{
|
||||
INodeDefManager *ndef = m_gamedef->ndef();
|
||||
INodeDefManager *ndef = m_server->ndef();
|
||||
MapNode n_old = m_map->getNodeNoEx(p);
|
||||
|
||||
// Call destructor
|
||||
|
@ -29,6 +29,8 @@ class PlayerSAO;
|
||||
class ServerEnvironment;
|
||||
class ActiveBlockModifier;
|
||||
class ServerActiveObject;
|
||||
class Server;
|
||||
class GameScripting;
|
||||
|
||||
/*
|
||||
{Active, Loading} block modifier interface.
|
||||
@ -190,7 +192,7 @@ class ServerEnvironment : public Environment
|
||||
{
|
||||
public:
|
||||
ServerEnvironment(ServerMap *map, GameScripting *scriptIface,
|
||||
IGameDef *gamedef, const std::string &path_world);
|
||||
Server *server, const std::string &path_world);
|
||||
~ServerEnvironment();
|
||||
|
||||
Map & getMap();
|
||||
@ -201,8 +203,8 @@ public:
|
||||
GameScripting* getScriptIface()
|
||||
{ return m_script; }
|
||||
|
||||
IGameDef *getGameDef()
|
||||
{ return m_gamedef; }
|
||||
Server *getGameDef()
|
||||
{ return m_server; }
|
||||
|
||||
float getSendRecommendedInterval()
|
||||
{ return m_recommended_send_interval; }
|
||||
@ -377,8 +379,8 @@ private:
|
||||
ServerMap *m_map;
|
||||
// Lua state
|
||||
GameScripting* m_script;
|
||||
// Game definition
|
||||
IGameDef *m_gamedef;
|
||||
// Server definition
|
||||
Server *m_server;
|
||||
// World path
|
||||
const std::string m_path_world;
|
||||
// Active object list
|
||||
|
@ -20,7 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "settings.h"
|
||||
#include "wieldmesh.h"
|
||||
#include "inventory.h"
|
||||
#include "gamedef.h"
|
||||
#include "client.h"
|
||||
#include "itemdef.h"
|
||||
#include "nodedef.h"
|
||||
#include "mesh.h"
|
||||
@ -304,12 +304,12 @@ void WieldMeshSceneNode::setExtruded(const std::string &imagename,
|
||||
}
|
||||
}
|
||||
|
||||
void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef)
|
||||
void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client)
|
||||
{
|
||||
ITextureSource *tsrc = gamedef->getTextureSource();
|
||||
IItemDefManager *idef = gamedef->getItemDefManager();
|
||||
IShaderSource *shdrsrc = gamedef->getShaderSource();
|
||||
INodeDefManager *ndef = gamedef->getNodeDefManager();
|
||||
ITextureSource *tsrc = client->getTextureSource();
|
||||
IItemDefManager *idef = client->getItemDefManager();
|
||||
IShaderSource *shdrsrc = client->getShaderSource();
|
||||
INodeDefManager *ndef = client->getNodeDefManager();
|
||||
const ItemDefinition &def = item.getDefinition(idef);
|
||||
const ContentFeatures &f = ndef->get(def.name);
|
||||
content_t id = ndef->getId(def.name);
|
||||
@ -341,7 +341,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef)
|
||||
} else if (f.drawtype == NDT_NORMAL || f.drawtype == NDT_ALLFACES) {
|
||||
setCube(f.tiles, def.wield_scale, tsrc);
|
||||
} else {
|
||||
MeshMakeData mesh_make_data(gamedef, false);
|
||||
MeshMakeData mesh_make_data(client, false);
|
||||
MapNode mesh_make_node(id, 255, 0);
|
||||
mesh_make_data.fillSingleNode(&mesh_make_node);
|
||||
MapBlockMesh mapblock_mesh(&mesh_make_data, v3s16(0, 0, 0));
|
||||
@ -435,11 +435,11 @@ void WieldMeshSceneNode::changeToMesh(scene::IMesh *mesh)
|
||||
m_meshnode->setVisible(true);
|
||||
}
|
||||
|
||||
scene::IMesh *getItemMesh(IGameDef *gamedef, const ItemStack &item)
|
||||
scene::IMesh *getItemMesh(Client *client, const ItemStack &item)
|
||||
{
|
||||
ITextureSource *tsrc = gamedef->getTextureSource();
|
||||
IItemDefManager *idef = gamedef->getItemDefManager();
|
||||
INodeDefManager *ndef = gamedef->getNodeDefManager();
|
||||
ITextureSource *tsrc = client->getTextureSource();
|
||||
IItemDefManager *idef = client->getItemDefManager();
|
||||
INodeDefManager *ndef = client->getNodeDefManager();
|
||||
const ItemDefinition &def = item.getDefinition(idef);
|
||||
const ContentFeatures &f = ndef->get(def.name);
|
||||
content_t id = ndef->getId(def.name);
|
||||
@ -470,7 +470,7 @@ scene::IMesh *getItemMesh(IGameDef *gamedef, const ItemStack &item)
|
||||
mesh = cloneMesh(g_extrusion_mesh_cache->createCube());
|
||||
scaleMesh(mesh, v3f(1.2, 1.2, 1.2));
|
||||
} else {
|
||||
MeshMakeData mesh_make_data(gamedef, false);
|
||||
MeshMakeData mesh_make_data(client, false);
|
||||
MapNode mesh_make_node(id, 255, 0);
|
||||
mesh_make_data.fillSingleNode(&mesh_make_node);
|
||||
MapBlockMesh mapblock_mesh(&mesh_make_data, v3s16(0, 0, 0));
|
||||
|
@ -24,7 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include <string>
|
||||
|
||||
struct ItemStack;
|
||||
class IGameDef;
|
||||
class Client;
|
||||
class ITextureSource;
|
||||
struct TileSpec;
|
||||
|
||||
@ -42,7 +42,7 @@ public:
|
||||
v3f wield_scale, ITextureSource *tsrc);
|
||||
void setExtruded(const std::string &imagename,
|
||||
v3f wield_scale, ITextureSource *tsrc, u8 num_frames);
|
||||
void setItem(const ItemStack &item, IGameDef *gamedef);
|
||||
void setItem(const ItemStack &item, Client *client);
|
||||
|
||||
// Sets the vertex color of the wield mesh.
|
||||
// Must only be used if the constructor was called with lighting = false
|
||||
@ -77,7 +77,7 @@ private:
|
||||
aabb3f m_bounding_box;
|
||||
};
|
||||
|
||||
scene::IMesh *getItemMesh(IGameDef *gamedef, const ItemStack &item);
|
||||
scene::IMesh *getItemMesh(Client *client, const ItemStack &item);
|
||||
|
||||
scene::IMesh *getExtrudedMesh(ITextureSource *tsrc,
|
||||
const std::string &imagename);
|
||||
|
Loading…
Reference in New Issue
Block a user