00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
#ifndef OPENCAL_SYSTEM_H
00012
#define OPENCAL_SYSTEM_H
00013
00014
00015
#include <OpenCAL/global.h>
00016
00017
#include <vector>
00018
using std::vector;
00019
00020
00021
namespace OpenCAL
00022 {
00023
00024
class Object;
00025
class Actor;
00026
class Agent;
00027
class Renderer;
00028
class Picker;
00029
00036 class OPENCAL_API System
00037 {
00038
private:
00039 bool m_destructing;
00040
00041
protected:
00042
00043
typedef vector<Object *> ObjectList;
00044
typedef vector<Actor *> ActorList;
00045
typedef vector<Agent *> AgentList;
00046
typedef vector<System *> SystemList;
00047
00048
00049 ObjectList m_objects;
00050 ActorList m_actors;
00051 AgentList m_agents;
00052 SystemList m_systems;
00053
00054 System *m_parent;
00055
bool m_initialized, m_draw;
00056
bool m_enabled;
00057
00059 float m_accuracyHint;
00060
00061
Object *m_selectedObject;
00062
Renderer *m_renderer;
00063
Picker *m_picker;
00064
00065
public:
00066
00067
virtual ~System();
00068
00069
00070 Object *getObject(
unsigned int i) {
return m_objects[i]; }
00072 Actor *getActor(
unsigned int i) {
return m_actors[i]; }
00074 Agent *getAgent(
unsigned int i) {
return m_agents[i]; }
00076 System *getSystem(
unsigned int i) {
return m_systems[i]; }
00078
00079
00080
void setRenderer(
Renderer *renderer) { m_renderer = renderer; }
00081
Renderer *getRenderer() {
return m_renderer; }
00082
virtual void render();
00083
00084
00085
void setPicker(
Picker *picker) { m_picker = picker; }
00086
Picker *getPicker() {
return m_picker; }
00087
virtual void renderPicking();
00088
virtual Object *pick(
int x,
int y);
00089
00090 System *getParent() {
return m_parent; }
00091
const System *getParent()
const {
return m_parent; }
00092
00093
Object *getSelectedObject() {
return m_selectedObject; }
00094
void selectObject(
Object *object) { m_selectedObject = object; }
00095
void unselectObject() { m_selectedObject = 0; }
00096
00097
00098
unsigned int numObjects()
const {
return m_objects.size(); }
00099
unsigned int numActors()
const {
return m_actors.size(); }
00100
unsigned int numAgents()
const {
return m_agents.size(); }
00101
unsigned int numSystems()
const {
return m_systems.size(); }
00102
unsigned int numChildren()
const {
return m_systems.size(); }
00103
bool hasParent()
const {
return (m_parent != 0); }
00104
00105
00106
bool isEnabled()
const {
return m_enabled; }
00107
void enable() { m_enabled =
true; }
00108
void disable() { m_enabled =
false; }
00109
void toggle() { m_enabled = !m_enabled; }
00110
void setEnabled(
bool enabled) { m_enabled = enabled; }
00111
00112
00113
bool getDraw()
const {
return m_draw; }
00114
void setDraw(
bool enabled =
true) { m_draw = enabled; }
00115
void enableDraw() { m_draw =
true; }
00116
void disableDraw() { m_draw =
false; }
00117
void toggleDraw() { m_draw = !m_draw; }
00118
00119
00120
virtual bool isInitialized()
const {
return m_initialized; }
00121
virtual void initialize();
00122
00123
00124
virtual void step(
float deltaSeconds);
00125
00126
00127
00128
00129
00130
00131
00132
00133
protected:
00134
00135
00136 System(System *parent);
00137
00138
00139
virtual void addObject(
Object *object) { m_objects.push_back(object); }
00140
virtual void addActor(
Actor *actor) { m_actors.push_back(actor); }
00141
virtual void addAgent(
Agent *agent) { m_agents.push_back(agent); }
00142
virtual void addSystem(System *system) { m_systems.push_back(system); }
00143
00144
00145
virtual void deleteObject(
Object *object);
00146
virtual void deleteActor(
Actor *actor);
00147
virtual void deleteAgent(
Agent *agent);
00148
virtual void deleteSystem(System *system);
00149
00150
00151
00152
bool isDestructing()
const {
return m_destructing; }
00153
00154
friend class Object;
00155
friend class Actor;
00156
friend class Agent;
00157 };
00158 }
00159
00160
#endif // OPENCAL_SYSTEM_H