00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 namespace VRUT
00013 {
00015 enum JSEVT_PARAM_TYPE {
00016 JSEVT_NULL,
00017 JSEVT_BOOL,
00018 JSEVT_INT,
00019 JSEVT_MODULE_ID,
00020 JSEVT_RENDER_WINDOW_ID,
00021 JSEVT_SCENE_ID,
00022 JSEVT_NODE_ID,
00023 JSEVT_STRING,
00024 JSEVT_MEMORY
00025 };
00026
00027 struct JSEventArgStruct
00028 {
00029 JSEVT_PARAM_TYPE type;
00030 unsigned id;
00031 const char *name;
00032 };
00033 }
00034
00035 static JSEventArgStruct eventArgs[] = {
00036 {JSEVT_BOOL, 0, "ARG_BOOL"},
00037 {JSEVT_INT, 0, "ARG_INT"},
00038 {JSEVT_MODULE_ID, 0, "ARG_MODULE_ID"},
00039 {JSEVT_RENDER_WINDOW_ID, 0, "ARG_RENDER_WINDOW_ID"},
00040 {JSEVT_SCENE_ID, 0, "ARG_SCENE_ID"},
00041 {JSEVT_NODE_ID, 0, "ARG_NODE_ID"},
00042 {JSEVT_STRING, 0, "ARG_STRING"},
00043 {JSEVT_MEMORY, 0, "ARG_MEMORY"}
00044 };
00045
00047 #define JSEVT_PARAM_IS_STRING(_type) (_type == JSEVT_STRING)
00049 #define JSEVT_PARAM_IS_INT(_type) (_type == JSEVT_INT || _type == JSEVT_NODE_ID || _type == JSEVT_BOOL)
00051 #define JSEVT_PARAM_IS_ID(_type) (_type == JSEVT_MODULE_ID || _type == JSEVT_RENDER_WINDOW_ID || _type == JSEVT_SCENE_ID)
00053 #define JSEVT_PARAM_IS_CD(_type) (_type == JSEVT_MEMORY)
00054
00056 #define JSEVT_PARAM_IS_JSSTRING(_type) (_type == JSEVT_STRING)
00058 #define JSEVT_PARAM_IS_JSBOOL(_type) (_type == JSEVT_BOOL)
00060 #define JSEVT_PARAM_IS_JSINT(_type) (_type == JSEVT_MODULE_ID || _type == JSEVT_RENDER_WINDOW_ID \
00061 || _type == JSEVT_SCENE_ID || _type == JSEVT_INT || _type == JSEVT_NODE_ID)
00063 #define JSEVT_PARAM_IS_JSMEMORY(_type) (_type == JSEVT_MEMORY)
00064
00066 #define JSEVT_DEFINE(_name) Event::_name, 0, #_name
00067
00069 #define JSEVT_MAX_PARAMS 3
00071 #define JSEVT_P3(_p1, _p2, _p3) 3, {_p1, _p2, _p3}
00073 #define JSEVT_P2(_p1, _p2) 2, {_p1, _p2, JSEVT_NULL}
00075 #define JSEVT_P1(_p1) 1, {_p1, JSEVT_NULL, JSEVT_NULL}
00077 #define JSEVT_NO_PARAMS 0, {JSEVT_NULL, JSEVT_NULL, JSEVT_NULL}
00078
00079 namespace VRUT
00080 {
00082 struct JSEventStruct
00083 {
00084 Event::EVENT_TYPE type;
00085 unsigned id;
00086 const char *name;
00087 unsigned nparams;
00088 JSEVT_PARAM_TYPE params[JSEVT_MAX_PARAMS];
00089 };
00090 }
00091
00093 static JSEventStruct events[] = {
00094 {JSEVT_DEFINE(EVT_INPUT_TRACKING), JSEVT_P1(JSEVT_MEMORY)},
00095 {JSEVT_DEFINE(EVT_MODULE_PREFER), JSEVT_P1(JSEVT_STRING)},
00096 {JSEVT_DEFINE(EVT_MODULE_FORBID), JSEVT_P1(JSEVT_STRING)},
00097 {JSEVT_DEFINE(EVT_MODULE_RELEASE), JSEVT_P1(JSEVT_MODULE_ID)},
00098 {JSEVT_DEFINE(EVT_MODULE_RUN), JSEVT_P1(JSEVT_STRING)},
00099 {JSEVT_DEFINE(EVT_SCENE_IMAGE_ADD), JSEVT_P1(JSEVT_STRING)},
00100 {JSEVT_DEFINE(EVT_SCENE_IMAGE_ADDED), JSEVT_P1(JSEVT_STRING)},
00101 {JSEVT_DEFINE(EVT_SCENE_NODE_MOVED), JSEVT_P2(JSEVT_SCENE_ID, JSEVT_NODE_ID)},
00102 {JSEVT_DEFINE(EVT_SCENE_NODE_INSERTED), JSEVT_P2(JSEVT_SCENE_ID, JSEVT_NODE_ID)},
00103 {JSEVT_DEFINE(EVT_SCENE_NODE_TRANSFORMED), JSEVT_P2(JSEVT_SCENE_ID, JSEVT_NODE_ID)},
00104 {JSEVT_DEFINE(EVT_SCENE_GRAPHVIZ), JSEVT_P1(JSEVT_SCENE_ID)},
00105 {JSEVT_DEFINE(EVT_SCENE_DUMP), JSEVT_P1(JSEVT_SCENE_ID)},
00106 {JSEVT_DEFINE(EVT_SCENE_BVH_UPDATE), JSEVT_P1(JSEVT_SCENE_ID)},
00107 {JSEVT_DEFINE(EVT_SCENE_BVH_UPDATED), JSEVT_P1(JSEVT_SCENE_ID)},
00108 {JSEVT_DEFINE(EVT_IO_SCENE_IMPORT), JSEVT_P1(JSEVT_STRING)},
00109 {JSEVT_DEFINE(EVT_IO_SCENE_IMPORT_DONE), JSEVT_P1(JSEVT_SCENE_ID)},
00110 {JSEVT_DEFINE(EVT_IO_SCENE_EXPORT), JSEVT_P2(JSEVT_SCENE_ID, JSEVT_STRING)},
00111 {JSEVT_DEFINE(EVT_RENDER_SCENE), JSEVT_P1(JSEVT_SCENE_ID)},
00112 {JSEVT_DEFINE(EVT_RENDER_WIN_CREATED), JSEVT_P1(JSEVT_RENDER_WINDOW_ID)},
00113 {JSEVT_DEFINE(EVT_RENDER_WIN_CLOSED), JSEVT_P1(JSEVT_RENDER_WINDOW_ID)},
00114 {JSEVT_DEFINE(EVT_RENDER_UPDATE), JSEVT_P1(JSEVT_SCENE_ID)},
00115 {JSEVT_DEFINE(EVT_RENDER_CACHE_START), JSEVT_P1(JSEVT_SCENE_ID)},
00116 {JSEVT_DEFINE(EVT_RENDER_CACHE_STOP), JSEVT_P1(JSEVT_SCENE_ID)},
00117 {JSEVT_DEFINE(EVT_RENDER_FRAMERATE), JSEVT_P2(JSEVT_RENDER_WINDOW_ID, JSEVT_INT)},
00118 {JSEVT_DEFINE(EVT_RENDER_FULLSCREEN_TOGGLE), JSEVT_P1(JSEVT_RENDER_WINDOW_ID)},
00119 {JSEVT_DEFINE(EVT_RENDER_FULLSCREEN_SET), JSEVT_P2(JSEVT_RENDER_WINDOW_ID, JSEVT_BOOL)}
00120 };
00121
00122 #define JSEVT_EVT_COUNT (sizeof (events) / sizeof (JSEventStruct))
00123 #define JSEVT_ARG_COUNT (sizeof (eventArgs) / sizeof (JSEventArgStruct))
00124
00126 static int getEventIdxByType(int type)
00127 {
00128 Event::EVENT_TYPE eventID = Event::EVENT_TYPE(type);
00129 int count = int(JSEVT_EVT_COUNT);
00130 for (int i = 0; i < count; i++)
00131 {
00132 if (events[i].type == eventID)
00133 return i;
00134 }
00135 return -1;
00136 }
00137
00139 static int getEventIdxById(unsigned id)
00140 {
00141 if (id <= JSEVT_EVT_COUNT)
00142 return id - 1;
00143 return -1;
00144 }
00145
00147 static int getEventArgIdxByType(int type)
00148 {
00149 JSEVT_PARAM_TYPE argType = JSEVT_PARAM_TYPE(type);
00150 int count = int(JSEVT_ARG_COUNT);
00151 for (int i = 0; i < count; i++)
00152 {
00153 if (eventArgs[i].type == argType)
00154 return i;
00155 }
00156 return -1;
00157 }
00158
00160 static int getEventArgIdxById(unsigned id)
00161 {
00162 if (id > JSEVT_EVT_COUNT && id <= JSEVT_EVT_COUNT + JSEVT_ARG_COUNT)
00163 return id - JSEVT_EVT_COUNT - 1;
00164 return -1;
00165 }