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.cc64
1 files changed, 62 insertions, 2 deletions
diff --git a/src/core/player.cc b/src/core/player.cc
index 488e407..4c4616a 100644
--- a/src/core/player.cc
+++ b/src/core/player.cc
@@ -4,8 +4,11 @@
the terms of the GNU General Public License version 2.
*/
+#include <sstream>
+
#include "sys/sys.h"
#include "core/player.h"
+#include "core/cvar.h"
namespace core
{
@@ -25,11 +28,37 @@ void Player::clear()
player_id = 0;
player_name.clear();
player_dirty = false;
+
+ clear_assets();
+}
+
+void Player::clear_assets()
+{
+ // clear assets
+ for (std::list<EntityControlable*>::iterator asset = assets.begin(); asset != assets.end(); asset++) {
+ (*asset)->entity_owner = 0;
+ (*asset)->die();
+ }
+ assets.clear();
+
player_control = 0;
}
-void Player::serialize_client_update(std::ostream & os) const
+void Player::serialize_client_update(std::ostream & os)
{
+ Cvar *cl_name = Cvar::find("cl_name");
+ if (cl_name) {
+ player_name = cl_name->str();
+ }
+
+ Cvar *cl_color = Cvar::find("cl_color");
+ math::Color color(1.0, 1.0, 1.0, 1.0);
+ if (cl_color) {
+ std::istringstream is(cl_color->str());
+ is >> color;
+ player_color = color;
+ }
+
os << " " << player_color << " \"" << player_name << "\"";
}
@@ -55,7 +84,7 @@ void Player::serialize_server_update(std::ostream & os) const
co = player_control->id();
else
co = 0;
-
+
os << player_id << " " << co << " " << player_color << " \"" << player_name << "\"";
}
@@ -88,5 +117,36 @@ void Player::recieve_server_update(std::istream &is)
player_name = n;
}
+void Player::add_asset(EntityControlable *entity)
+{
+ entity->entity_owner = this;
+ assets.push_back(entity);
+}
+
+void Player::remove_asset(EntityControlable *entity)
+{
+ for (std::list<EntityControlable*>::iterator asset = assets.begin(); asset != assets.end(); asset++) {
+ if ((*asset) == entity) {
+ (*asset)->entity_owner = 0;
+ (*asset)->die();
+ assets.erase(asset);
+ return;
+ }
+ }
+ con_warn << "Could not remove asset " << entity->id() << " from player " << this->id() << "\n";
}
+void Player::remove_asset(unsigned int id)
+{
+ for (std::list<EntityControlable*>::iterator asset = assets.begin(); asset != assets.end(); asset++) {
+ if ((*asset)->id() == id) {
+ (*asset)->entity_owner = 0;
+ (*asset)->die();
+ assets.erase(asset);
+ return;
+ }
+ }
+ con_warn << "Could not remove asset " << id << " from player " << this->id() << "\n";
+}
+
+}