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/entity.cc')
-rw-r--r--src/core/entity.cc69
1 files changed, 53 insertions, 16 deletions
diff --git a/src/core/entity.cc b/src/core/entity.cc
index 08fddbf..ece1e9b 100644
--- a/src/core/entity.cc
+++ b/src/core/entity.cc
@@ -13,6 +13,7 @@
#include "core/entity.h"
#include "core/cvar.h"
#include "core/application.h"
+#include "core/gameinterface.h"
namespace core
{
@@ -71,18 +72,42 @@ void Entity::erase(unsigned int id)
}
}
+void Entity::clear()
+{
+ for (Entity::Registry::iterator it = Entity::registry().begin(); it != Entity::registry().end(); it++) {
+ delete(*it).second;
+ }
+ Entity::registry().clear();
+ entity_nextid = 0;
+}
+
+void Entity::list_header()
+{
+ con_print << " "
+ << " id "
+ << "type "
+ << "label "
+ << "name" << std::endl;
+}
+
+void Entity::list(const Entity *entity)
+{
+ con_print << " "
+ << "^B" << std::setw(4) << entity->id() << " "
+ << "^B" << std::setfill('0') << std::setw(4) << entity->type() << ":" << std::setw(4) << entity->moduletype() << std::setfill(' ') << " "
+ << "^B" << aux::pad_right(entity->label(), 24) << " "
+ << "^N" << entity->name() << std::endl;
+}
+
void Entity::list()
{
- Registry::iterator it;
- for (it = entity_registry.begin(); it != entity_registry.end(); it++) {
+ list_header();
+ for (Registry::iterator it = entity_registry.begin(); it != entity_registry.end(); it++) {
std::string typeindicator;
Entity *entity = (*it).second;
- con_print << " id " << std::setw(4) << entity->id()
- << " type " << std::setw(4) << entity->type()
- << ":" << std::setw(4) << entity->moduletype()
- << " " << entity->label() << std::endl;
+ list(entity);
}
- con_print << entity_registry.size() << " registered entities" << std::endl;
+ con_print << entity_registry.size() << " entities" << std::endl;
}
/* ---- class Entity ----------------------------------------------- */
@@ -241,9 +266,10 @@ void Entity::serialize_server_create(std::ostream & os) const
<< radius() << " "
<< std::setprecision(8) << entity_axis.forward() << " "
<< std::setprecision(8) << entity_axis.left() << " "
- << label() << " "
+ << "\"" <<label() << "\" "
<< "\"" << name() << "\" "
- << "\"" << (entity_model ? entity_model->name() : "") << "\" ";
+ << "\"" << (entity_model ? entity_model->name() : "") << "\" "
+ << (info() ? info()->id() : 0) << " ";
}
void Entity::receive_server_create(std::istream &is)
@@ -252,6 +278,7 @@ void Entity::receive_server_create(std::istream &is)
unsigned int zo;
unsigned int o = 0;
std::string n;
+ char c;
is >> entity_moduletypeid;
is >> entity_flags;
@@ -284,24 +311,34 @@ void Entity::receive_server_create(std::istream &is)
is >> entity_axis[1];
entity_axis[2] = math::crossproduct(entity_axis.forward(), entity_axis.left());
- char c;
- is >> n;
- set_label(n);
+ // read label
n.clear();
-
+ while ((is.get(c)) && (c != '"'));
+ while ((is.get(c)) && (c != '"'))
+ n += c;
+ set_label(n);
+
// read name
+ n.clear();
while ((is.get(c)) && (c != '"'));
while ((is.get(c)) && (c != '"'))
n += c;
set_name(n);
- n.clear();
-
+
// read model name
+ n.clear();
while ((is.get(c)) && (c != '"'));
while ((is.get(c)) && (c != '"'))
n += c;
-
set_modelname(n);
+
+ // read info id
+ is >> o;
+ if (o)
+ set_info(game()->info(o));
+ else
+ set_info(0);
+
entity_dirty = false;
}