OPTPiX SpriteStudio SDK
Loading...
Searching...
No Matches
sshTask.h
Go to the documentation of this file.
1#ifndef __RS_TASK__
2#define __RS_TASK__
3
4#ifdef __GNUC__
5 #include <cstring>
6#endif
7
8#include <vector>
9#include <list>
10
11#include <memory>
12
13// 未使用引数の警告避け
14#ifndef SPRITESTUDIO6SDK_NOUSE_ARGUMENT
15 #define SPRITESTUDIO6SDK_NOUSE_ARGUMENT(_name_) ( void )( &_name_ );
16#endif
17
18namespace spritestudio6
19{
20
22{
23private:
24 static unsigned long m_tree_item_uid;
25public:
28 static unsigned long getuid(){ return ++m_tree_item_uid; }
29};
30
31
32template<class __myclass>
33class treeitem : public __myclass
34{
35private:
36 char m_ident[32+1];
37 treeitem* sibling_prev;
38 treeitem* sibling_next;
39 treeitem* child;
40 treeitem* parent;
41
42 bool _child_destroy;
43 bool _my_destroy;
44
45 unsigned long m_uid;
46
47 int childnum;
48public:
49
51 : sibling_next(0) , sibling_prev(0) , child(0) , childnum(0) , parent(0) ,_child_destroy(true),_my_destroy(true)
52 {
53 m_ident[0] = 0;
54 m_uid = treeitem_uid::getuid();
55 }
56
57
58 virtual ~treeitem()
59 {
60 destroy();
61 }
62
63 const char* getIdentify()
64 {
65 return m_ident;
66 }
67
68
69 void setIdentify( const char* _ident )
70 {
71
72 size_t l = strlen(_ident);
73
74 if ( l > 32 ) l = 32;
75 for ( size_t i = 0 ; i < l ; i++ ) m_ident[i] = _ident[i];
76 m_ident[l+1] = 0;
77
78 }
79
80 //子タスクの自動削除フラグの設定 (true/自動削除 false/手動削除)
81 void set_child_auto_destroy( bool flag )
82 {
83 _child_destroy = flag;
84 }
85
86 void set_my_auto_destroy( bool flag )
87 {
88 _my_destroy = flag;
89 }
90
91 treeitem* get_parent(){ return parent;}
92 treeitem* get_child(){ return child;}
93 treeitem* get_sibling() { return sibling_next;}
94 int get_childnum(){ return childnum; }
95
96 void appendchild( treeitem *item)
97 {
98 if ( child == 0 )
99 {
100 child = item;
101 }else{
102 child->appendsibling(item);
103 }
104 item->parent = this;
105 this->childnum++;
106 }
107
109 {
110 if ( sibling_next == 0)
111 {
112 sibling_next = item;
113 item->sibling_prev = this;
114 }else{
115 sibling_next->appendsibling(item);
116 }
117 }
118
119 void destroysub( treeitem* item )
120 {
121 if ( item->_my_destroy == false ) return ; //削除しないGC対策
122
123 if ( item->get_child() )
124 {
125 destroysub( item->child );
126 item->child = 0;
127 }
128 if ( item->get_sibling() )
129 {
130 destroysub( item->sibling_next );
131 item->sibling_next = 0;
132 }
133
134 delete item;
135 }
136
137 void destroy()
138 {
139 if ( this->get_parent() )
140 {
141 get_parent()->prependtask(this);
142 this->parent = 0;
143 }
144
145 if ( _child_destroy )
146 {
147 if (child)
148 {
149 destroysub( child );
150 child = 0;
151 }
152 }
153
154 //繋ぎなおし
155 if ( sibling_next )
156 {
157 sibling_next->sibling_prev = sibling_prev;
158 }
159
160 if ( sibling_prev )
161 {
162 sibling_prev->sibling_next = sibling_next;
163 }
164 }
165
167 {
168 if ( root )
169 {
170 if ( root->sibling_next == sub )
171 {
172 root->sibling_next = sub->sibling_next;
173 if ( sub->sibling_next )
174 {
175 sub->sibling_next->sibling_prev = root;
176 }
177 }
178
179 if ( root->child == sub )
180 {
181 treeitem* temp = root->child;
182 if ( temp )
183 {
184 if ( temp->sibling_next )
185 {
186 temp->sibling_next->sibling_prev = 0;
187 temp->sibling_next->parent = root;
188 }
189 }
190 root->child = root->child->sibling_next;
191
192 }
193
194 if ( root->sibling_next )
195 {
196 prependsibling_sub( root->sibling_next , sub );
197 }
198
199 if ( root->child )
200 {
201 prependsibling_sub( root->child , sub );
202 }
203
204 }
205
206 }
207
208 //ぶら下がっている中から指定の要素を外す
210 {
211 prependsibling_sub( this , item );
212
213 }
214
215
216
217};
218
219
220
221
222//コントロール管理
224 bool m_pause;
225 bool m_drawpause;
226public:
228 m_pause(false),m_drawpause(false)
229 {}
231
232 void setpause( bool sw ){ m_pause = sw; }
233 bool ispause(){return m_pause;}
234 void setdrawpause( bool sw ){ m_drawpause = sw;}
235 bool isdrawpause(){ return m_drawpause;}
236
237
238 virtual void draw(){};
239// virtual void update(){};
240 virtual void update(double delta){ SPRITESTUDIO6SDK_NOUSE_ARGUMENT(delta); };
241 virtual void init(){};
242
243};
244
245
247
248
249//タスクマネージャ
250
252private:
253
254 int m_priority_max;
255 std::unique_ptr<task_base> m_root;
256
257 void exec_resist_tasks_sub(task_base* task ,double delta_time);
258 void draw_resist_tasks_sub(task_base* task );
259
260public:
261 task_manager();
263
264
265 void resist_task( task_base *parent , task_base* reg_task);
266 void unresist_task( task_base *parent , task_base* unreg_task);
267
268 void exec_resist_tasks(double delta_time);
269 void draw_resist_tasks();
271 {
272 return m_root.get();
273 }
274 void destroy_tasks();
275
276
277};
278
280private:
281 static task_manager_singleton* g_myinst;
282public:
284 {
285 g_myinst = this;
286 }
288 {
289 g_myinst = 0;
290 }
291
292 static task_manager_singleton* getinst(){ return g_myinst;}
293};
294
299
300
301inline void task_unresist_task( task_base *parent , task_base* reg_task)
302{
303 get_rstaskmanager()->unresist_task( parent , reg_task);
304}
306{
307 return get_rstaskmanager()->get_root();
308}
309
310inline void task_resist_task( task_base *parent , task_base* reg_task)
311{
312 if ( parent ){
313 get_rstaskmanager()->resist_task( parent , reg_task);
314 }else{
316 }
317}
318
319inline void task_manager_exec(double delta_time)
320{
321 get_rstaskmanager()->exec_resist_tasks(delta_time);
322}
323
324inline void task_manager_draw()
325{
327}
328
330{
332 {
334 }
335}
336
337
338} // namespace spritestudio6
339
340#endif
virtual void init()
Definition sshTask.h:241
void setdrawpause(bool sw)
Definition sshTask.h:234
bool isdrawpause()
Definition sshTask.h:235
virtual void draw()
Definition sshTask.h:238
~task_imp()
Definition sshTask.h:230
void setpause(bool sw)
Definition sshTask.h:232
bool ispause()
Definition sshTask.h:233
task_imp()
Definition sshTask.h:227
virtual void update(double delta)
Definition sshTask.h:240
task_manager_singleton()
Definition sshTask.h:283
static task_manager_singleton * getinst()
Definition sshTask.h:292
~task_manager_singleton()
Definition sshTask.h:287
task_manager()
Definition sshTask.cpp:13
void exec_resist_tasks(double delta_time)
Definition sshTask.cpp:102
void destroy_tasks()
Definition sshTask.cpp:26
void draw_resist_tasks()
Definition sshTask.cpp:76
void resist_task(task_base *parent, task_base *reg_task)
Definition sshTask.cpp:39
~task_manager()
Definition sshTask.cpp:21
task_base * get_root()
Definition sshTask.h:270
void unresist_task(task_base *parent, task_base *unreg_task)
Definition sshTask.cpp:33
static unsigned long getuid()
Definition sshTask.h:28
treeitem_uid()
Definition sshTask.h:26
~treeitem_uid()
Definition sshTask.h:27
Definition sshTask.h:34
void destroysub(treeitem *item)
Definition sshTask.h:119
treeitem * get_parent()
Definition sshTask.h:91
virtual ~treeitem()
Definition sshTask.h:58
void set_child_auto_destroy(bool flag)
Definition sshTask.h:81
treeitem * get_child()
Definition sshTask.h:92
int get_childnum()
Definition sshTask.h:94
const char * getIdentify()
Definition sshTask.h:63
void prependsibling_sub(treeitem *root, treeitem *sub)
Definition sshTask.h:166
void destroy()
Definition sshTask.h:137
treeitem()
Definition sshTask.h:50
treeitem * get_sibling()
Definition sshTask.h:93
void prependtask(treeitem *item)
Definition sshTask.h:209
void setIdentify(const char *_ident)
Definition sshTask.h:69
void set_my_auto_destroy(bool flag)
Definition sshTask.h:86
void appendsibling(treeitem *item)
Definition sshTask.h:108
void appendchild(treeitem *item)
Definition sshTask.h:96
Definition ISsEffectRender.h:5
treeitem< task_imp > task_base
Definition sshTask.h:246
task_base * task_getroot()
Definition sshTask.h:305
void task_manager_draw()
Definition sshTask.h:324
void task_manager_destroy()
Definition sshTask.h:329
void task_manager_exec(double delta_time)
Definition sshTask.h:319
void task_unresist_task(task_base *parent, task_base *reg_task)
Definition sshTask.h:301
task_manager_singleton * get_rstaskmanager()
Definition sshTask.h:295
void task_resist_task(task_base *parent, task_base *reg_task)
Definition sshTask.h:310
#define SPRITESTUDIO6SDK_NOUSE_ARGUMENT(_name_)
Definition sshTask.h:15