annotate example/scenegraph/xml/task/collision.cpp @ 351:10c1f6970f6a draft

add move,collision task
author admin@mcbk.cr.ie.u-ryukyu.ac.jp
date Fri, 10 Jul 2009 18:20:26 +0900
parents 628cb162be88
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
350
628cb162be88 add tasts.xml renderer.xml
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
1 /**
351
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
2 * 前もって collision する対象を task の global に登録しておく task が必要
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
3 * SceneGraph を読み込んで
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
4 * 衝突判定を行う node を確保する
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
5 * node の型に対応する collision 関数を呼び出す
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
6 * 新しい SceneGraoh を生成する
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
7 * 登録してある global を解放する task を用意する
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
8 *
350
628cb162be88 add tasts.xml renderer.xml
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
9 */
628cb162be88 add tasts.xml renderer.xml
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
10
628cb162be88 add tasts.xml renderer.xml
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
11 // #define DEBUG
628cb162be88 add tasts.xml renderer.xml
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
12 #include "error.h"
628cb162be88 add tasts.xml renderer.xml
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
13 #include "scene_graph_pack.h"
628cb162be88 add tasts.xml renderer.xml
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
14
351
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
15 // 本来は tasks.xml に書く
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
16 SchedDefineTask(SceneGraphCollision);
350
628cb162be88 add tasts.xml renderer.xml
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
17
351
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
18 int
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
19 move::run(void *rbuf, void *wbuf)
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
20 {
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
21 __debug_spe("SceneGraphCollision\n");
350
628cb162be88 add tasts.xml renderer.xml
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
22
351
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
23 SceneGraphPackPtr cur = (SceneGraphPack*) rbuf;
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
24 int collision_task_id = cur->collision_task;
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
25 // next は Mainmemory 上のアドレス
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
26 SceneGraphPackPtr next =
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
27 (SceneGraphPackPtr)smanager->allocate(sizeof(SceneGraphPack));
350
628cb162be88 add tasts.xml renderer.xml
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
28
351
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
29 if (smanager->call_task(collision_task_id, (void*)cur, (void*)next)) {
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
30 // 次の状態があって、新しく node を確保してそこを確保する
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
31 smanager->write(cur, next, sizeof(SceneGraphPack));
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
32 } else {
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
33 // この node は消滅
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
34 smanager->free(next);
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
35 }
350
628cb162be88 add tasts.xml renderer.xml
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
36
628cb162be88 add tasts.xml renderer.xml
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
37 return 0;
351
10c1f6970f6a add move,collision task
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 350
diff changeset
38 }