Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2008-02-21 19:06:15 +0000
committerStijn Buys <ingar@osirion.org>2008-02-21 19:06:15 +0000
commit8aa04fc836116a58f8ffd1e0c3539b9ea8a94ddf (patch)
treebb933edb3919ed67d05b098a6b97a73f01746762 /src/core/player.cc
parent41ad1e4c9e2a70d0a8811f4b035f0d3018045e61 (diff)
dedicated server, entity transfer
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;
+}
+
}