summaryrefslogtreecommitdiff
path: root/src/environment.cpp
diff options
context:
space:
mode:
authorLoic Blot <loic.blot@unix-experience.fr>2016-10-08 16:31:22 +0200
committerNer'zhul <nerzhul@users.noreply.github.com>2016-10-08 22:27:44 +0200
commitfd5a130b86c08f0b3190c3d81affd4869c139fb7 (patch)
tree8300ec1e77cfd8c38292f5b81e8e0fb82de0d53d /src/environment.cpp
parent067766eec213918b6cb5b2533d0c78eceb3949ec (diff)
downloadminetest-fd5a130b86c08f0b3190c3d81affd4869c139fb7.tar.gz
minetest-fd5a130b86c08f0b3190c3d81affd4869c139fb7.tar.bz2
minetest-fd5a130b86c08f0b3190c3d81affd4869c139fb7.zip
More code cleanup (UNORDERED + RemotePlayer/LocalPlayer)
* ClientEnvironment now uses UNORDERED MAP for active objects * Use RemotePlayer and LocalPlayer everywhere it's possible * Minor code style fixes * Drop Client::getBreath() unused function
Diffstat (limited to 'src/environment.cpp')
-rw-r--r--src/environment.cpp105
1 files changed, 46 insertions, 59 deletions
diff --git a/src/environment.cpp b/src/environment.cpp
index d30b70527..bc246f66c 100644
--- a/src/environment.cpp
+++ b/src/environment.cpp
@@ -105,20 +105,20 @@ void Environment::removePlayer(Player* player)
}
}
-Player * Environment::getPlayer(u16 peer_id)
+Player *Environment::getPlayer(u16 peer_id)
{
- for(std::vector<Player*>::iterator i = m_players.begin();
+ for (std::vector<Player*>::iterator i = m_players.begin();
i != m_players.end(); ++i) {
Player *player = *i;
- if(player->peer_id == peer_id)
+ if (player->peer_id == peer_id)
return player;
}
return NULL;
}
-Player * Environment::getPlayer(const char *name)
+Player *Environment::getPlayer(const char *name)
{
- for(std::vector<Player*>::iterator i = m_players.begin();
+ for (std::vector<Player*>::iterator i = m_players.begin();
i != m_players.end(); ++i) {
Player *player = *i;
if(strcmp(player->getName(), name) == 0)
@@ -602,11 +602,9 @@ void ServerEnvironment::kickAllPlayers(AccessDeniedCode reason,
const std::string &str_reason, bool reconnect)
{
for (std::vector<Player*>::iterator it = m_players.begin();
- it != m_players.end();
- ++it) {
+ it != m_players.end(); ++it) {
((Server*)m_gamedef)->DenyAccessVerCompliant((*it)->peer_id,
- (*it)->protocol_version, (AccessDeniedCode)reason,
- str_reason, reconnect);
+ (*it)->protocol_version, reason, str_reason, reconnect);
}
}
@@ -633,14 +631,14 @@ void ServerEnvironment::savePlayer(RemotePlayer *player)
player->save(players_path);
}
-Player *ServerEnvironment::loadPlayer(const std::string &playername)
+RemotePlayer *ServerEnvironment::loadPlayer(const std::string &playername)
{
bool newplayer = false;
bool found = false;
std::string players_path = m_path_world + DIR_DELIM "players" DIR_DELIM;
std::string path = players_path + playername;
- RemotePlayer *player = static_cast<RemotePlayer *>(getPlayer(playername.c_str()));
+ RemotePlayer *player = getPlayer(playername.c_str());
if (!player) {
player = new RemotePlayer(m_gamedef, "");
newplayer = true;
@@ -1254,10 +1252,10 @@ void ServerEnvironment::step(float dtime)
*/
{
ScopeProfiler sp(g_profiler, "SEnv: handle players avg", SPT_AVG);
- for(std::vector<Player*>::iterator i = m_players.begin();
- i != m_players.end(); ++i)
- {
- Player *player = *i;
+ for (std::vector<Player*>::iterator i = m_players.begin();
+ i != m_players.end(); ++i) {
+ RemotePlayer *player = dynamic_cast<RemotePlayer *>(*i);
+ assert(player);
// Ignore disconnected players
if(player->peer_id == 0)
@@ -1277,12 +1275,12 @@ void ServerEnvironment::step(float dtime)
Get player block positions
*/
std::vector<v3s16> players_blockpos;
- for(std::vector<Player*>::iterator
- i = m_players.begin();
+ for (std::vector<Player*>::iterator i = m_players.begin();
i != m_players.end(); ++i) {
- Player *player = *i;
+ RemotePlayer *player = dynamic_cast<RemotePlayer *>(*i);
+ assert(player);
// Ignore disconnected players
- if(player->peer_id == 0)
+ if (player->peer_id == 0)
continue;
v3s16 blockpos = getNodeBlockPos(
@@ -1381,8 +1379,7 @@ void ServerEnvironment::step(float dtime)
block->m_node_timers.step((float)dtime);
if (!elapsed_timers.empty()) {
MapNode n;
- for (std::vector<NodeTimer>::iterator
- i = elapsed_timers.begin();
+ for (std::vector<NodeTimer>::iterator i = elapsed_timers.begin();
i != elapsed_timers.end(); ++i) {
n = block->getNodeNoEx(i->position);
p = i->position + block->getPosRelative();
@@ -1571,7 +1568,7 @@ u16 ServerEnvironment::addActiveObject(ServerActiveObject *object)
Finds out what new objects have been added to
inside a radius around a position
*/
-void ServerEnvironment::getAddedActiveObjects(Player *player, s16 radius,
+void ServerEnvironment::getAddedActiveObjects(RemotePlayer *player, s16 radius,
s16 player_radius,
std::set<u16> &current_objects,
std::queue<u16> &added_objects)
@@ -1624,7 +1621,7 @@ void ServerEnvironment::getAddedActiveObjects(Player *player, s16 radius,
Finds out what objects have been removed from
inside a radius around a position
*/
-void ServerEnvironment::getRemovedActiveObjects(Player *player, s16 radius,
+void ServerEnvironment::getRemovedActiveObjects(RemotePlayer *player, s16 radius,
s16 player_radius,
std::set<u16> &current_objects,
std::queue<u16> &removed_objects)
@@ -2269,10 +2266,8 @@ ClientEnvironment::ClientEnvironment(ClientMap *map, scene::ISceneManager *smgr,
ClientEnvironment::~ClientEnvironment()
{
// delete active objects
- for(std::map<u16, ClientActiveObject*>::iterator
- i = m_active_objects.begin();
- i != m_active_objects.end(); ++i)
- {
+ for (UNORDERED_MAP<u16, ClientActiveObject*>::iterator i = m_active_objects.begin();
+ i != m_active_objects.end(); ++i) {
delete i->second;
}
@@ -2312,18 +2307,18 @@ void ClientEnvironment::addPlayer(Player *player)
It is a failure if player is local and there already is a local
player
*/
- FATAL_ERROR_IF(player->isLocal() == true && getLocalPlayer() != NULL,
- "Player is local but there is already a local player");
+ FATAL_ERROR_IF(player->isLocal() && getLocalPlayer() != NULL,
+ "Player is local but there is already a local player");
Environment::addPlayer(player);
}
-LocalPlayer * ClientEnvironment::getLocalPlayer()
+LocalPlayer *ClientEnvironment::getLocalPlayer()
{
for(std::vector<Player*>::iterator i = m_players.begin();
i != m_players.end(); ++i) {
Player *player = *i;
- if(player->isLocal())
+ if (player->isLocal())
return (LocalPlayer*)player;
}
return NULL;
@@ -2407,11 +2402,11 @@ void ClientEnvironment::step(float dtime)
{
// Apply physics
- if(free_move == false && is_climbing == false)
+ if(!free_move && !is_climbing)
{
// Gravity
v3f speed = lplayer->getSpeed();
- if(lplayer->in_liquid == false)
+ if(!lplayer->in_liquid)
speed.Y -= lplayer->movement_gravity * lplayer->physics_override_gravity * dtime_part * 2;
// Liquid floating / sinking
@@ -2566,14 +2561,15 @@ void ClientEnvironment::step(float dtime)
/*
Stuff that can be done in an arbitarily large dtime
*/
- for(std::vector<Player*>::iterator i = m_players.begin();
+ for (std::vector<Player*>::iterator i = m_players.begin();
i != m_players.end(); ++i) {
- Player *player = *i;
+ LocalPlayer *player = dynamic_cast<LocalPlayer *>(*i);
+ assert(player);
/*
Handle non-local players
*/
- if(player->isLocal() == false) {
+ if (!player->isLocal()) {
// Move
player->move(dtime, this, 100*BS);
@@ -2604,10 +2600,8 @@ void ClientEnvironment::step(float dtime)
g_profiler->avg("CEnv: num of objects", m_active_objects.size());
bool update_lighting = m_active_object_light_update_interval.step(dtime, 0.21);
- for(std::map<u16, ClientActiveObject*>::iterator
- i = m_active_objects.begin();
- i != m_active_objects.end(); ++i)
- {
+ for (UNORDERED_MAP<u16, ClientActiveObject*>::iterator i = m_active_objects.begin();
+ i != m_active_objects.end(); ++i) {
ClientActiveObject* obj = i->second;
// Step object
obj->step(dtime, this);
@@ -2666,15 +2660,14 @@ GenericCAO* ClientEnvironment::getGenericCAO(u16 id)
ClientActiveObject* ClientEnvironment::getActiveObject(u16 id)
{
- std::map<u16, ClientActiveObject*>::iterator n;
- n = m_active_objects.find(id);
- if(n == m_active_objects.end())
+ UNORDERED_MAP<u16, ClientActiveObject*>::iterator n = m_active_objects.find(id);
+ if (n == m_active_objects.end())
return NULL;
return n->second;
}
-bool isFreeClientActiveObjectId(u16 id,
- std::map<u16, ClientActiveObject*> &objects)
+bool isFreeClientActiveObjectId(const u16 id,
+ UNORDERED_MAP<u16, ClientActiveObject*> &objects)
{
if(id == 0)
return false;
@@ -2682,19 +2675,17 @@ bool isFreeClientActiveObjectId(u16 id,
return objects.find(id) == objects.end();
}
-u16 getFreeClientActiveObjectId(
- std::map<u16, ClientActiveObject*> &objects)
+u16 getFreeClientActiveObjectId(UNORDERED_MAP<u16, ClientActiveObject*> &objects)
{
//try to reuse id's as late as possible
static u16 last_used_id = 0;
u16 startid = last_used_id;
- for(;;)
- {
+ for(;;) {
last_used_id ++;
- if(isFreeClientActiveObjectId(last_used_id, objects))
+ if (isFreeClientActiveObjectId(last_used_id, objects))
return last_used_id;
- if(last_used_id == startid)
+ if (last_used_id == startid)
return 0;
}
}
@@ -2714,8 +2705,7 @@ u16 ClientEnvironment::addActiveObject(ClientActiveObject *object)
}
object->setId(new_id);
}
- if(isFreeClientActiveObjectId(object->getId(), m_active_objects) == false)
- {
+ if(!isFreeClientActiveObjectId(object->getId(), m_active_objects)) {
infostream<<"ClientEnvironment::addActiveObject(): "
<<"id is not free ("<<object->getId()<<")"<<std::endl;
delete object;
@@ -2779,8 +2769,7 @@ void ClientEnvironment::removeActiveObject(u16 id)
verbosestream<<"ClientEnvironment::removeActiveObject(): "
<<"id="<<id<<std::endl;
ClientActiveObject* obj = getActiveObject(id);
- if(obj == NULL)
- {
+ if (obj == NULL) {
infostream<<"ClientEnvironment::removeActiveObject(): "
<<"id="<<id<<" not found"<<std::endl;
return;
@@ -2848,10 +2837,8 @@ void ClientEnvironment::updateLocalPlayerBreath(u16 breath)
void ClientEnvironment::getActiveObjects(v3f origin, f32 max_d,
std::vector<DistanceSortedActiveObject> &dest)
{
- for(std::map<u16, ClientActiveObject*>::iterator
- i = m_active_objects.begin();
- i != m_active_objects.end(); ++i)
- {
+ for (UNORDERED_MAP<u16, ClientActiveObject*>::iterator i = m_active_objects.begin();
+ i != m_active_objects.end(); ++i) {
ClientActiveObject* obj = i->second;
f32 d = (obj->getPosition() - origin).getLength();