1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-08-11 17:51:04 +00:00

Player/LocalPlayer/RemotePlayer inheritance cleanup (part 1 on X)

* LocalPlayer take ownership of maxHudId as it's the only caller
* RemotePlayer take ownership of day night ratio as it's the only user
* Pass getPlayerControl as const reference to prevent object copy on each call (perf improvement in ObjectRef::l_get_player_control call)
* getPlayerSAO is now only RemotePlayer call
* get/setHotbarItemCount is now RemotePlayer owned
* Server: Use RemotePlayer instead of Player object on concerned call to properly fix the object type
* PlayerSAO now uses RemotePlayer instead of Player because it's only server side
* ObjectRef::getplayer also returns RemotePlayer as it's linked with PlayerSAO
This commit is contained in:
Loic Blot 2016-10-08 10:38:04 +02:00 committed by Ner'zhul
parent 0264e38bff
commit 8bcd10b872
12 changed files with 103 additions and 109 deletions

View file

@ -1256,7 +1256,7 @@ Inventory* Server::getInventory(const InventoryLocation &loc)
break;
case InventoryLocation::PLAYER:
{
Player *player = m_env->getPlayer(loc.name.c_str());
RemotePlayer *player = dynamic_cast<RemotePlayer *>(m_env->getPlayer(loc.name.c_str()));
if(!player)
return NULL;
PlayerSAO *playersao = player->getPlayerSAO();
@ -1296,9 +1296,12 @@ void Server::setInventoryModified(const InventoryLocation &loc, bool playerSend)
if (!playerSend)
return;
Player *player = m_env->getPlayer(loc.name.c_str());
if(!player)
RemotePlayer *player =
dynamic_cast<RemotePlayer *>(m_env->getPlayer(loc.name.c_str()));
if (!player)
return;
PlayerSAO *playersao = player->getPlayerSAO();
if(!playersao)
return;
@ -2637,19 +2640,16 @@ void Server::DeleteClient(u16 peer_id, ClientDeletionReason reason)
++i;
}
Player *player = m_env->getPlayer(peer_id);
RemotePlayer *player = dynamic_cast<RemotePlayer *>(m_env->getPlayer(peer_id));
/* Run scripts and remove from environment */
{
if(player != NULL)
{
PlayerSAO *playersao = player->getPlayerSAO();
assert(playersao);
if(player != NULL) {
PlayerSAO *playersao = player->getPlayerSAO();
assert(playersao);
m_script->on_leaveplayer(playersao, reason == CDR_TIMEOUT);
m_script->on_leaveplayer(playersao, reason == CDR_TIMEOUT);
playersao->disconnected();
}
playersao->disconnected();
}
/*
@ -2691,7 +2691,7 @@ void Server::DeleteClient(u16 peer_id, ClientDeletionReason reason)
SendChatMessage(PEER_ID_INEXISTENT,message);
}
void Server::UpdateCrafting(Player* player)
void Server::UpdateCrafting(RemotePlayer* player)
{
DSTACK(FUNCTION_NAME);
@ -2701,7 +2701,8 @@ void Server::UpdateCrafting(Player* player)
loc.setPlayer(player->getName());
std::vector<ItemStack> output_replacements;
getCraftingResult(&player->inventory, preview, output_replacements, false, this);
m_env->getScriptIface()->item_CraftPredict(preview, player->getPlayerSAO(), (&player->inventory)->getList("craft"), loc);
m_env->getScriptIface()->item_CraftPredict(preview, player->getPlayerSAO(),
(&player->inventory)->getList("craft"), loc);
// Put the new preview in
InventoryList *plist = player->inventory.getList("craftpreview");
@ -2851,8 +2852,8 @@ std::string Server::getPlayerName(u16 peer_id)
PlayerSAO* Server::getPlayerSAO(u16 peer_id)
{
Player *player = m_env->getPlayer(peer_id);
if(player == NULL)
RemotePlayer *player = dynamic_cast<RemotePlayer *>(m_env->getPlayer(peer_id));
if (player == NULL)
return NULL;
return player->getPlayerSAO();
}
@ -2917,8 +2918,9 @@ void Server::reportPrivsModified(const std::string &name)
reportPrivsModified(player->getName());
}
} else {
Player *player = m_env->getPlayer(name.c_str());
if(!player)
RemotePlayer *player =
dynamic_cast<RemotePlayer *>(m_env->getPlayer(name.c_str()));
if (!player)
return;
SendPlayerPrivileges(player->peer_id);
PlayerSAO *sao = player->getPlayerSAO();
@ -3025,7 +3027,7 @@ bool Server::hudChange(Player *player, u32 id, HudElementStat stat, void *data)
return true;
}
bool Server::hudSetFlags(Player *player, u32 flags, u32 mask)
bool Server::hudSetFlags(RemotePlayer *player, u32 flags, u32 mask)
{
if (!player)
return false;
@ -3043,10 +3045,11 @@ bool Server::hudSetFlags(Player *player, u32 flags, u32 mask)
return true;
}
bool Server::hudSetHotbarItemcount(Player *player, s32 hotbar_itemcount)
bool Server::hudSetHotbarItemcount(RemotePlayer *player, s32 hotbar_itemcount)
{
if (!player)
return false;
if (hotbar_itemcount <= 0 || hotbar_itemcount > HUD_HOTBAR_ITEMCOUNT_MAX)
return false;
@ -3057,13 +3060,6 @@ bool Server::hudSetHotbarItemcount(Player *player, s32 hotbar_itemcount)
return true;
}
s32 Server::hudGetHotbarItemcount(Player *player)
{
if (!player)
return 0;
return player->getHotbarItemcount();
}
void Server::hudSetHotbarImage(Player *player, std::string name)
{
if (!player)
@ -3130,7 +3126,7 @@ bool Server::setSky(Player *player, const video::SColor &bgcolor,
return true;
}
bool Server::overrideDayNightRatio(Player *player, bool do_override,
bool Server::overrideDayNightRatio(RemotePlayer *player, bool do_override,
float ratio)
{
if (!player)