return NULL;
}
+Player * Environment::getNearestConnectedPlayer(v3f pos)
+{
+ core::list<Player*> connected_players = getPlayers(true);
+ f32 nearest_d = 0;
+ Player *nearest_player = NULL;
+ for(core::list<Player*>::Iterator
+ i = connected_players.begin();
+ i != connected_players.end(); i++)
+ {
+ Player *player = *i;
+ f32 d = player->getPosition().getDistanceFrom(pos);
+ if(d < nearest_d || nearest_player == NULL)
+ {
+ nearest_d = d;
+ nearest_player = player;
+ }
+ }
+ return nearest_player;
+}
+
core::list<Player*> Environment::getPlayers()
{
return m_players;
{
m_random_spawn_timer += myrand_range(2.0, 20.0);
- /*TestSAO *obj = new TestSAO(0,
- v3f(myrand_range(-2*BS,2*BS), BS*5, myrand_range(-2*BS,2*BS)));*/
-
/*
Find some position
*/
if(player)
pos = player->getPosition();
pos += v3f(
- myrand_range(-5,5)*BS,
+ myrand_range(-3,3)*BS,
0,
- myrand_range(-5,5)*BS
+ myrand_range(-3,3)*BS
);
/*
- Create a LuaSAO (ServerActiveObject)
- */
-
- LuaSAO *obj = new LuaSAO(this, 0, pos);
-
- /*
- Select a random type for it
+ Create a TestSAO object
*/
- std::string objectdir = porting::getDataPath("luaobjects");
- std::vector<fs::DirListNode> dirlist = fs::GetDirListing(objectdir);
- if(dirlist.size() > 0)
- {
- u32 selected_i = myrand_range(0, dirlist.size()-1);
- std::string selected_name = "";
- selected_name = dirlist[selected_i].name;
- /*for(u32 i=0; i<dirlist.size(); i++)*/
-
- dstream<<"ServerEnvironment: Selected script name \""<<selected_name
- <<"\" for new lua object"<<std::endl;
- /*
- Load the scripts for the type
- */
- obj->initializeFromNothing(selected_name.c_str());
+ TestSAO *obj = new TestSAO(this, 0,
+ v3f(myrand_range(-2*BS,2*BS), BS*5, myrand_range(-2*BS,2*BS)));
- // Add the object to the environment
- addActiveObject(obj);
- }
+ // Add the object to the environment
+ addActiveObject(obj);
}
} // enable_experimental
f32 dtime_part;
if(dtime_downcount > dtime_max_increment)
+ {
dtime_part = dtime_max_increment;
+ dtime_downcount -= dtime_part;
+ }
else
+ {
dtime_part = dtime_downcount;
- dtime_downcount -= dtime_part;
+ /*
+ Setting this to 0 (no -=dtime_part) disables an infinite loop
+ when dtime_part is so small that dtime_downcount -= dtime_part
+ does nothing
+ */
+ dtime_downcount = 0;
+ }
/*
Handle local player
{
v3s16 p_blocks = getNodeBlockPos(bottompos);
MapBlock *b = m_map->getBlockNoCreate(p_blocks);
- b->updateMesh(m_daynight_ratio);
+ //b->updateMesh(m_daynight_ratio);
+ b->setMeshExpired(true);
}
}
}