6 #include "ViewEntity.h" 7 #include <Atlas/Objects/ObjectsFwd.h> 8 #include <wfmath/timestamp.h> 11 #include <sigc++/trackable.h> 12 #include <sigc++/signal.h> 13 #include <sigc++/slot.h> 14 #include <sigc++/connection.h> 21 #include <unordered_map> 22 #include <Atlas/Message/Element.h> 40 class View :
public sigc::trackable
100 double getSimulationSpeed()
const;
102 typedef sigc::slot<void, ViewEntity*> EntitySightSlot;
131 void dumpLookQueue();
139 return m_lookQueue.size();
149 size_t pruneAbandonedPendingEntities();
159 void appear(
const std::string& eid,
double stamp);
160 void disappear(
const std::string& eid);
161 void sight(
const Atlas::Objects::Entity::RootEntity& ge);
162 void deleteEntity(
const std::string& eid);
163 void unseen(
const std::string& eid);
166 bool isPending(
const std::string& eid)
const;
179 ViewEntity* initialSight(
const Atlas::Objects::Entity::RootEntity& ge);
181 void getEntityFromServer(
const std::string& eid);
184 void setTopLevelEntity(
Entity* newTopLevel);
186 std::unique_ptr<ViewEntity> createEntity(
const Atlas::Objects::Entity::RootEntity&);
188 void parseSimulationSpeed(
const Atlas::Message::Element& element);
194 void issueQueuedLook();
196 void eraseFromLookQueue(
const std::string& eid);
198 typedef std::unordered_map<std::string, std::unique_ptr<ViewEntity>> IdEntityMap;
203 std::unique_ptr<ViewEntity> entity;
204 std::unique_ptr<EntityRouter> entityRouter;
206 std::unordered_map<std::string, EntityEntry> m_contents;
208 WFMath::TimeStamp m_lastUpdateTime;
213 double m_simulationSpeed;
218 enum class SightAction
227 struct PendingStatus {
228 SightAction sightAction;
229 std::chrono::steady_clock::time_point registrationTime = std::chrono::steady_clock::now();
232 std::map<std::string, PendingStatus> m_pending;
241 std::deque<std::string> m_lookQueue;
243 sigc::connection m_simulationSpeedConnection;
245 unsigned int m_maxPendingCount;
247 typedef sigc::signal<void, ViewEntity*> EntitySightSignal;
249 typedef std::unordered_map<std::string, EntitySightSignal> NotifySightMap;
250 NotifySightMap m_notifySights;
252 typedef std::set<ViewEntity*> EntitySet;
258 struct FactoryOrdering
260 bool operator()(
const std::unique_ptr<Factory>& a,
const std::unique_ptr<Factory>& b)
const 262 return a->priority() > b->priority();
266 typedef std::multiset<std::unique_ptr<Factory>, FactoryOrdering> FactoryStore;
267 FactoryStore m_factories;
269 std::set<Task*> m_progressingTasks;
274 #endif // of ERIS_VIEW_H Entity * getTopLevel() const
sigc::connection notifyWhenEntitySeen(const std::string &eid, const EntitySightSlot &slot)
sigc::signal< void, ViewEntity * > InitialSightEntity
sigc::signal< void > TopLevelEntityChanged
emitted when the TLVE changes
sigc::signal< void, ViewEntity * > EntityCreated
void taskRateChanged(Task *)
void sendLookAt(const std::string &eid)
std::size_t lookQueueSize() const
Handles polling of the IO system as well as making sure that registered handlers are run on the main ...
An entity which is bound to an Eris::View. This subclass of Eris::Entity is intimately bound to a Vie...
TypeService & getTypeService()
Gets the TypeService attached to the view.
bool isPending(const std::string &eid) const
test if the specified entity ID is pending initial sight on the View
Entity is a concrete (instantiable) class representing one game entity.
sigc::signal< void, ViewEntity * > EntityDeleted
ViewEntity * getEntity(const std::string &eid) const
sigc::signal< void, ViewEntity * > EntitySeen
void registerFactory(std::unique_ptr< Factory > factory)
EventService & getEventService()
Gets the EventService used by the view.