Compare commits

..

No commits in common. "25cf3757b29a0397e201a4719788ead3dc76ec94" and "ac628c9b0ab8c69313b3fe401384ecd0fc20eb14" have entirely different histories.

10 changed files with 40 additions and 82 deletions

View File

@ -57,23 +57,11 @@ minetest.register_entity("__builtin:item", {
end,
get_staticdata = function(self)
--return self.itemstring
return minetest.serialize({
itemstring = self.itemstring,
always_collect = self.always_collect,
})
return self.itemstring
end,
on_activate = function(self, staticdata)
if string.sub(staticdata, 1, string.len("return")) == "return" then
local data = minetest.deserialize(staticdata)
if data and type(data) == "table" then
self.itemstring = data.itemstring
self.always_collect = data.always_collect
end
else
self.itemstring = staticdata
end
self.itemstring = staticdata
self.object:set_armor_groups({immortal=1})
self.object:setvelocity({x=0, y=2, z=0})
self.object:setacceleration({x=0, y=-10, z=0})

View File

@ -1237,7 +1237,7 @@ Entity definition (register_entity)
initial_properties = <initial object properties>,
on_activate = function(self, staticdata, dtime_s),
on_activate = function(self, staticdata),
on_step = function(self, dtime),
on_punch = function(self, hitter),
on_rightclick = function(self, clicker),
@ -1421,11 +1421,6 @@ Node definition (register_node)
on_metadata_inventory_take = func(pos, listname, index, stack, player),
^ Called after the actual action has happened, according to what was allowed.
^ No return value
on_blast = func(pos, intensity),
^ intensity: 1.0 = mid range of regular TNT
^ If defined, called when an explosion touches the node, instead of
removing the node
}
Recipe for register_craft: (shaped)

View File

@ -40,7 +40,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/serialize.h"
#include "util/mathconstants.h"
#include "map.h"
#include <IMeshManipulator.h>
class Settings;
struct ToolCapabilities;
@ -798,15 +797,8 @@ public:
infostream<<"textures[0]: "<<m_prop.textures[0]<<std::endl;
IItemDefManager *idef = m_gamedef->idef();
ItemStack item(m_prop.textures[0], 1, 0, "", idef);
scene::IMesh *item_mesh = item.getDefinition(idef).wield_mesh;
// Copy mesh to be able to set unique vertex colors
scene::IMeshManipulator *manip =
irr->getVideoDriver()->getMeshManipulator();
scene::IMesh *mesh = manip->createMeshUniquePrimitives(item_mesh);
scene::IMesh *mesh = item.getDefinition(idef).wield_mesh;
m_meshnode = smgr->addMeshSceneNode(mesh, NULL);
mesh->drop();
m_meshnode->setScale(v3f(m_prop.visual_size.X/2,
m_prop.visual_size.Y/2,
@ -846,17 +838,15 @@ public:
{
bool is_visible = (m_hp != 0);
u8 li = decode_light(light_at_pos);
if(li != m_last_light){
m_last_light = li;
video::SColor color(255,li,li,li);
if(m_meshnode){
setMeshColor(m_meshnode->getMesh(), color);
m_meshnode->setVisible(is_visible);
}
if(m_spritenode){
m_spritenode->setColor(color);
m_spritenode->setVisible(is_visible);
}
m_last_light = li;
video::SColor color(255,li,li,li);
if(m_meshnode){
setMeshColor(m_meshnode->getMesh(), color);
m_meshnode->setVisible(is_visible);
}
if(m_spritenode){
m_spritenode->setColor(color);
m_spritenode->setVisible(is_visible);
}
}

View File

@ -376,9 +376,9 @@ LuaEntitySAO::~LuaEntitySAO()
}
}
void LuaEntitySAO::addedToEnvironment(u32 dtime_s)
void LuaEntitySAO::addedToEnvironment()
{
ServerActiveObject::addedToEnvironment(dtime_s);
ServerActiveObject::addedToEnvironment();
// Create entity from name
lua_State *L = m_env->getLua();
@ -390,7 +390,7 @@ void LuaEntitySAO::addedToEnvironment(u32 dtime_s)
// Initialize HP from properties
m_hp = m_prop.hp_max;
// Activate entity, supplying serialized state
scriptapi_luaentity_activate(L, m_id, m_init_state.c_str(), dtime_s);
scriptapi_luaentity_activate(L, m_id, m_init_state.c_str());
}
}
@ -805,9 +805,9 @@ std::string PlayerSAO::getDescription()
}
// Called after id has been set and has been inserted in environment
void PlayerSAO::addedToEnvironment(u32 dtime_s)
void PlayerSAO::addedToEnvironment()
{
ServerActiveObject::addedToEnvironment(dtime_s);
ServerActiveObject::addedToEnvironment();
ServerActiveObject::setBasePosition(m_player->getPosition());
m_player->setPlayerSAO(this);
m_player->peer_id = m_peer_id;

View File

@ -43,7 +43,7 @@ public:
{ return ACTIVEOBJECT_TYPE_LUAENTITY; }
u8 getSendType() const
{ return ACTIVEOBJECT_TYPE_GENERIC; }
virtual void addedToEnvironment(u32 dtime_s);
virtual void addedToEnvironment();
static ServerActiveObject* create(ServerEnvironment *env, v3f pos,
const std::string &data);
void step(float dtime, bool send_recommended);
@ -118,7 +118,7 @@ public:
Active object <-> environment interface
*/
void addedToEnvironment(u32 dtime_s);
void addedToEnvironment();
void removingFromEnvironment();
bool isStaticAllowed() const;
bool unlimitedTransferDistance() const;

View File

@ -743,25 +743,19 @@ neighbor_found:
u32 active_object_count = block->m_static_objects.m_active.size();
// Find out how many objects this and all the neighbors contain
u32 active_object_count_wider = 0;
u32 wider_unknown_count = 0;
for(s16 x=-1; x<=1; x++)
for(s16 y=-1; y<=1; y++)
for(s16 z=-1; z<=1; z++)
{
MapBlock *block2 = map->getBlockNoCreateNoEx(
block->getPos() + v3s16(x,y,z));
if(block2==NULL){
wider_unknown_count = 0;
if(block2==NULL)
continue;
}
active_object_count_wider +=
block2->m_static_objects.m_active.size()
+ block2->m_static_objects.m_stored.size();
}
// Extrapolate
u32 wider_known_count = 3*3*3 - wider_unknown_count;
active_object_count_wider += wider_unknown_count * active_object_count_wider / wider_known_count;
// Call all the trigger variations
i->abm->trigger(m_env, p, n);
i->abm->trigger(m_env, p, n,
@ -790,7 +784,7 @@ void ServerEnvironment::activateBlock(MapBlock *block, u32 additional_dtime)
<<dtime_s<<" seconds old."<<std::endl;*/
// Activate stored objects
activateObjects(block, dtime_s);
activateObjects(block);
// Run node timers
std::map<v3s16, NodeTimer> elapsed_timers =
@ -1249,7 +1243,7 @@ u16 getFreeServerActiveObjectId(
u16 ServerEnvironment::addActiveObject(ServerActiveObject *object)
{
assert(object);
u16 id = addActiveObjectRaw(object, true, 0);
u16 id = addActiveObjectRaw(object, true);
return id;
}
@ -1408,7 +1402,7 @@ ActiveObjectMessage ServerEnvironment::getActiveObjectMessage()
*/
u16 ServerEnvironment::addActiveObjectRaw(ServerActiveObject *object,
bool set_changed, u32 dtime_s)
bool set_changed)
{
assert(object);
if(object->getId() == 0){
@ -1448,7 +1442,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(dtime_s);
object->addedToEnvironment();
// Add static data to block
if(object->isStaticAllowed())
@ -1471,10 +1465,9 @@ u16 ServerEnvironment::addActiveObjectRaw(ServerActiveObject *object,
"addActiveObjectRaw");
}
else{
v3s16 p = floatToInt(objectpos, BS);
errorstream<<"ServerEnvironment::addActiveObjectRaw(): "
<<"could not find block for storing id="<<object->getId()
<<" statically (pos="<<PP(p)<<")"<<std::endl;
<<" statically"<<std::endl;
}
}
@ -1585,7 +1578,7 @@ static void print_hexdump(std::ostream &o, const std::string &data)
/*
Convert stored objects from blocks near the players to active.
*/
void ServerEnvironment::activateObjects(MapBlock *block, u32 dtime_s)
void ServerEnvironment::activateObjects(MapBlock *block)
{
if(block==NULL)
return;
@ -1609,7 +1602,7 @@ void ServerEnvironment::activateObjects(MapBlock *block, u32 dtime_s)
"large amount of objects");
return;
}
// A list for objects that couldn't be converted to active for some
// A list for objects that couldn't be converted to static for some
// reason. They will be stored back.
core::list<StaticObject> new_stored;
// Loop through stored static objects
@ -1639,7 +1632,7 @@ void ServerEnvironment::activateObjects(MapBlock *block, u32 dtime_s)
<<"activated static object pos="<<PP(s_obj.pos/BS)
<<" type="<<(int)s_obj.type<<std::endl;
// This will also add the object to the active static list
addActiveObjectRaw(obj, false, dtime_s);
addActiveObjectRaw(obj, false);
}
// Clear stored list
block->m_static_objects.m_stored.clear();
@ -1763,12 +1756,7 @@ void ServerEnvironment::deactivateFarObjects(bool force_delete)
// Add to the block where the object is located in
v3s16 blockpos = getNodeBlockPos(floatToInt(objectpos, BS));
// Get or generate the block
MapBlock *block = NULL;
try{
block = m_map->emergeBlock(blockpos);
} catch(InvalidPositionException &e){
// Handled via NULL pointer
}
MapBlock *block = m_map->emergeBlock(blockpos);
if(block)
{
@ -1805,10 +1793,9 @@ void ServerEnvironment::deactivateFarObjects(bool force_delete)
}
else{
if(!force_delete){
v3s16 p = floatToInt(objectpos, BS);
errorstream<<"ServerEnv: Could not find or generate "
<<"a block for storing id="<<obj->getId()
<<" statically (pos="<<PP(p)<<")"<<std::endl;
<<" statically"<<std::endl;
continue;
}
}
@ -2142,7 +2129,6 @@ void ClientEnvironment::step(float dtime)
Step active objects and update lighting of them
*/
bool update_lighting = m_active_object_light_update_interval.step(dtime, 0.21);
for(core::map<u16, ClientActiveObject*>::Iterator
i = m_active_objects.getIterator();
i.atEnd()==false; i++)
@ -2151,7 +2137,7 @@ void ClientEnvironment::step(float dtime)
// Step object
obj->step(dtime, this);
if(update_lighting)
if(m_active_object_light_update_interval.step(dtime, 0.21))
{
// Update lighting
u8 light = 0;

View File

@ -312,7 +312,7 @@ private:
Returns the id of the object.
Returns 0 if not added and thus deleted.
*/
u16 addActiveObjectRaw(ServerActiveObject *object, bool set_changed, u32 dtime_s);
u16 addActiveObjectRaw(ServerActiveObject *object, bool set_changed);
/*
Remove all objects that satisfy (m_removed && m_known_by_count==0)
@ -322,7 +322,7 @@ private:
/*
Convert stored objects from block to active
*/
void activateObjects(MapBlock *block, u32 dtime_s);
void activateObjects(MapBlock *block);
/*
Convert objects that are not in active blocks to static.

View File

@ -6483,7 +6483,7 @@ bool scriptapi_luaentity_add(lua_State *L, u16 id, const char *name)
}
void scriptapi_luaentity_activate(lua_State *L, u16 id,
const std::string &staticdata, u32 dtime_s)
const std::string &staticdata)
{
realitycheck(L);
assert(lua_checkstack(L, 20));
@ -6501,9 +6501,8 @@ void scriptapi_luaentity_activate(lua_State *L, u16 id,
luaL_checktype(L, -1, LUA_TFUNCTION);
lua_pushvalue(L, object); // self
lua_pushlstring(L, staticdata.c_str(), staticdata.size());
lua_pushinteger(L, dtime_s);
// Call with 3 arguments, 0 results
if(lua_pcall(L, 3, 0, 0))
// Call with 2 arguments, 0 results
if(lua_pcall(L, 2, 0, 0))
script_error(L, "error running function on_activate: %s\n",
lua_tostring(L, -1));
}

View File

@ -167,7 +167,7 @@ void scriptapi_detached_inventory_on_take(lua_State *L,
// Returns true if succesfully added into Lua; false otherwise.
bool scriptapi_luaentity_add(lua_State *L, u16 id, const char *name);
void scriptapi_luaentity_activate(lua_State *L, u16 id,
const std::string &staticdata, u32 dtime_s);
const std::string &staticdata);
void scriptapi_luaentity_rm(lua_State *L, u16 id);
std::string scriptapi_luaentity_get_staticdata(lua_State *L, u16 id);
void scriptapi_luaentity_get_properties(lua_State *L, u16 id,

View File

@ -62,7 +62,7 @@ public:
{ return getType(); }
// Called after id has been set and has been inserted in environment
virtual void addedToEnvironment(u32 dtime_s){};
virtual void addedToEnvironment(){};
// Called before removing from environment
virtual void removingFromEnvironment(){};
// Returns true if object's deletion is the job of the