Skip to content

Commit

Permalink
Dont write player files all the time
Browse files Browse the repository at this point in the history
  • Loading branch information
PilzAdam committed Jun 28, 2013
1 parent 9e100bc commit 280946b
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 1 deletion.
3 changes: 3 additions & 0 deletions src/environment.cpp
Expand Up @@ -434,6 +434,7 @@ void ServerEnvironment::serializePlayers(const std::string &savedir)
//infostream<<"Found matching player, overwriting."<<std::endl;

// OK, found. Save player there.
if(player->checkModified())
{
// Open file and serialize
std::ofstream os(path.c_str(), std::ios_base::binary);
Expand All @@ -444,6 +445,8 @@ void ServerEnvironment::serializePlayers(const std::string &savedir)
}
player->serialize(os);
saved_players.insert(player);
} else {
saved_players.insert(player);
}
}

Expand Down
33 changes: 33 additions & 0 deletions src/inventory.cpp
Expand Up @@ -562,6 +562,26 @@ InventoryList & InventoryList::operator = (const InventoryList &other)
return *this;
}

bool InventoryList::operator == (const InventoryList &other)
{
if(m_size != other.m_size)
return false;
if(m_width != other.m_width)
return false;
if(m_name != other.m_name)
return false;
for(u32 i=0; i<m_items.size(); i++)
{
ItemStack s1 = m_items[i];
ItemStack s2 = other.m_items[i];
if(s1.name != s2.name || s1.wear!= s2.wear || s1.count != s2.count ||
s1.metadata != s2.metadata)
return false;
}

return true;
}

const std::string &InventoryList::getName() const
{
return m_name;
Expand Down Expand Up @@ -855,6 +875,19 @@ Inventory & Inventory::operator = (const Inventory &other)
return *this;
}

bool Inventory::operator == (const Inventory &other)
{
if(m_lists.size() != other.m_lists.size())
return false;

for(u32 i=0; i<m_lists.size(); i++)
{
if(m_lists[i] != other.m_lists[i])
return false;
}
return true;
}

void Inventory::serialize(std::ostream &os) const
{
for(u32 i=0; i<m_lists.size(); i++)
Expand Down
2 changes: 2 additions & 0 deletions src/inventory.h
Expand Up @@ -183,6 +183,7 @@ class InventoryList

InventoryList(const InventoryList &other);
InventoryList & operator = (const InventoryList &other);
bool operator == (const InventoryList &other);

const std::string &getName() const;
u32 getSize() const;
Expand Down Expand Up @@ -258,6 +259,7 @@ class Inventory
Inventory(IItemDefManager *itemdef);
Inventory(const Inventory &other);
Inventory & operator = (const Inventory &other);
bool operator == (const Inventory &other);

void serialize(std::ostream &os) const;
void deSerialize(std::istream &is);
Expand Down
11 changes: 10 additions & 1 deletion src/player.cpp
Expand Up @@ -44,7 +44,12 @@ Player::Player(IGameDef *gamedef):
m_yaw(0),
m_speed(0,0,0),
m_position(0,0,0),
m_collisionbox(-BS*0.30,0.0,-BS*0.30,BS*0.30,BS*1.55,BS*0.30)
m_collisionbox(-BS*0.30,0.0,-BS*0.30,BS*0.30,BS*1.55,BS*0.30),
m_last_pitch(0),
m_last_yaw(0),
m_last_pos(0,0,0),
m_last_hp(PLAYER_MAX_HP),
m_last_inventory(gamedef->idef())
{
updateName("<not set>");
inventory.clear();
Expand All @@ -53,6 +58,7 @@ Player::Player(IGameDef *gamedef):
craft->setWidth(3);
inventory.addList("craftpreview", 1);
inventory.addList("craftresult", 1);
m_last_inventory = inventory;

// Can be redefined via Lua
inventory_formspec = "size[8,7.5]"
Expand Down Expand Up @@ -224,6 +230,9 @@ void Player::deSerialize(std::istream &is, std::string playername)
inventory.getList("craftresult")->changeItem(0, ItemStack());
}
}

// Set m_last_*
checkModified();
}

/*
Expand Down
23 changes: 23 additions & 0 deletions src/player.h
Expand Up @@ -199,6 +199,23 @@ class Player
void serialize(std::ostream &os);
void deSerialize(std::istream &is, std::string playername);

bool checkModified()
{
if(m_last_hp != hp || m_last_pitch != m_pitch ||
m_last_pos != m_position || m_last_yaw != m_yaw ||
!(inventory == m_last_inventory))
{
m_last_hp = hp;
m_last_pitch = m_pitch;
m_last_pos = m_position;
m_last_yaw = m_yaw;
m_last_inventory = inventory;
return true;
} else {
return false;
}
}

bool touching_ground;
// This oscillates so that the player jumps a bit above the surface
bool in_liquid;
Expand Down Expand Up @@ -262,6 +279,12 @@ class Player
v3f m_speed;
v3f m_position;
core::aabbox3d<f32> m_collisionbox;

f32 m_last_pitch;
f32 m_last_yaw;
v3f m_last_pos;
u16 m_last_hp;
Inventory m_last_inventory;
};


Expand Down

0 comments on commit 280946b

Please sign in to comment.