Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/player.cc')
-rw-r--r--src/core/player.cc40
1 files changed, 39 insertions, 1 deletions
diff --git a/src/core/player.cc b/src/core/player.cc
index 8fc4ebf..f4ee6ea 100644
--- a/src/core/player.cc
+++ b/src/core/player.cc
@@ -4,6 +4,7 @@
the terms of the GNU General Public License version 2.
*/
+#include "sys/sys.h"
#include "core/player.h"
namespace core
@@ -23,9 +24,46 @@ void Player::clear()
{
player_id = 0;
player_name.clear();
- dirty = false;
+ player_dirty = false;
control = 0;
}
+void Player::serialize_server_update(std::ostream & os) const
+{
+ unsigned int co;
+ if (control)
+ co = control->id();
+ else
+ co = 0;
+
+ os << player_id << " " << co << " \"" << player_name << "\"";
+}
+
+void Player::recieve_server_update(std::istream &is)
+{
+ is >> player_id;
+ unsigned int co = 0;
+ is >> co;
+ if (co) {
+ Entity *e = Entity::find(co);
+ if (e && e->type() == Entity::Controlable) {
+ control = (EntityControlable *) e;
+ } else {
+ control = 0;
+ con_warn << "control set to unknown entity " << co << "\n";
+ }
+ } else {
+ control = 0;
+ }
+
+ std::string n;
+ char c;
+ while ( (is.get(c)) && (c != '"'));
+ while ( (is.get(c)) && (c != '"'))
+ n += c;
+
+ player_name = n;
+}
+
}