1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Create framework for getting rid of global definitions of node/tool/item/whatever types

This commit is contained in:
Perttu Ahola 2011-11-14 00:19:48 +02:00
parent 5fc791ac9a
commit abceeee92f
60 changed files with 1017 additions and 743 deletions

View file

@ -32,6 +32,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "scriptapi.h"
#include "mapnode_contentfeatures.h"
#include "nodemetadata.h"
#include "main.h" // For g_settings, g_profiler
#define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")"
@ -270,9 +271,11 @@ void ActiveBlockList::update(core::list<v3s16> &active_positions,
ServerEnvironment
*/
ServerEnvironment::ServerEnvironment(ServerMap *map, lua_State *L):
ServerEnvironment::ServerEnvironment(ServerMap *map, lua_State *L,
IGameDef *gamedef):
m_map(map),
m_lua(L),
m_gamedef(gamedef),
m_random_spawn_timer(3),
m_send_recommended_timer(0),
m_game_time(0),
@ -312,7 +315,7 @@ void ServerEnvironment::serializePlayers(const std::string &savedir)
//infostream<<"Checking player file "<<path<<std::endl;
// Load player to see what is its name
ServerRemotePlayer testplayer;
ServerRemotePlayer testplayer(this);
{
// Open file and deserialize
std::ifstream is(path.c_str(), std::ios_base::binary);
@ -321,7 +324,7 @@ void ServerEnvironment::serializePlayers(const std::string &savedir)
infostream<<"Failed to read "<<path<<std::endl;
continue;
}
testplayer.deSerialize(is);
testplayer.deSerialize(is, m_gamedef);
}
//infostream<<"Loaded test player with name "<<testplayer.getName()<<std::endl;
@ -426,7 +429,7 @@ void ServerEnvironment::deSerializePlayers(const std::string &savedir)
infostream<<"Checking player file "<<path<<std::endl;
// Load player to see what is its name
ServerRemotePlayer testplayer;
ServerRemotePlayer testplayer(this);
{
// Open file and deserialize
std::ifstream is(path.c_str(), std::ios_base::binary);
@ -435,7 +438,7 @@ void ServerEnvironment::deSerializePlayers(const std::string &savedir)
infostream<<"Failed to read "<<path<<std::endl;
continue;
}
testplayer.deSerialize(is);
testplayer.deSerialize(is, m_gamedef);
}
if(!string_allowed(testplayer.getName(), PLAYERNAME_ALLOWED_CHARS))
@ -454,7 +457,7 @@ void ServerEnvironment::deSerializePlayers(const std::string &savedir)
if(player == NULL)
{
infostream<<"Is a new player"<<std::endl;
player = new ServerRemotePlayer();
player = new ServerRemotePlayer(this);
newplayer = true;
}
@ -469,7 +472,7 @@ void ServerEnvironment::deSerializePlayers(const std::string &savedir)
infostream<<"Failed to read "<<path<<std::endl;
continue;
}
player->deSerialize(is);
player->deSerialize(is, m_gamedef);
}
if(newplayer)
@ -1507,7 +1510,7 @@ u16 ServerEnvironment::addActiveObjectRaw(ServerActiveObject *object,
// Register reference in scripting api (must be done before post-init)
scriptapi_add_object_reference(m_lua, object);
// Post-initialize object
object->addedToEnvironment(object->getId());
object->addedToEnvironment();
return object->getId();
}
@ -1862,9 +1865,12 @@ void ServerEnvironment::deactivateFarObjects(bool force_delete)
ClientEnvironment
*/
ClientEnvironment::ClientEnvironment(ClientMap *map, scene::ISceneManager *smgr):
ClientEnvironment::ClientEnvironment(ClientMap *map, scene::ISceneManager *smgr,
ITextureSource *texturesource, IGameDef *gamedef):
m_map(map),
m_smgr(smgr)
m_smgr(smgr),
m_texturesource(texturesource),
m_gamedef(gamedef)
{
assert(m_map);
assert(m_smgr);
@ -2166,9 +2172,9 @@ void ClientEnvironment::step(float dtime)
}
}
void ClientEnvironment::updateMeshes(v3s16 blockpos)
void ClientEnvironment::updateMeshes(v3s16 blockpos, ITextureSource *tsrc)
{
m_map->updateMeshes(blockpos, getDayNightRatio());
m_map->updateMeshes(blockpos, getDayNightRatio(), tsrc);
}
void ClientEnvironment::expireMeshes(bool only_daynight_diffed)
@ -2242,14 +2248,15 @@ u16 ClientEnvironment::addActiveObject(ClientActiveObject *object)
infostream<<"ClientEnvironment::addActiveObject(): "
<<"added (id="<<object->getId()<<")"<<std::endl;
m_active_objects.insert(object->getId(), object);
object->addToScene(m_smgr);
// TODO: Make g_texturesource non-global
object->addToScene(m_smgr, m_texturesource);
return object->getId();
}
void ClientEnvironment::addActiveObject(u16 id, u8 type,
const std::string &init_data)
{
ClientActiveObject* obj = ClientActiveObject::create(type);
ClientActiveObject* obj = ClientActiveObject::create(type, m_gamedef);
if(obj == NULL)
{
infostream<<"ClientEnvironment::addActiveObject(): "