Mercurial > hg > Members > kono > Cerium
view example/scenegraph/xml/task/collision.cpp @ 351:852d7ba57be2
add move,collision task
author | admin@mcbk.cr.ie.u-ryukyu.ac.jp |
---|---|
date | Fri, 10 Jul 2009 18:20:26 +0900 |
parents | dd3888980738 |
children |
line wrap: on
line source
/** * 前もって collision する対象を task の global に登録しておく task が必要 * SceneGraph を読み込んで * 衝突判定を行う node を確保する * node の型に対応する collision 関数を呼び出す * 新しい SceneGraoh を生成する * 登録してある global を解放する task を用意する * */ // #define DEBUG #include "error.h" #include "scene_graph_pack.h" // 本来は tasks.xml に書く SchedDefineTask(SceneGraphCollision); int move::run(void *rbuf, void *wbuf) { __debug_spe("SceneGraphCollision\n"); SceneGraphPackPtr cur = (SceneGraphPack*) rbuf; int collision_task_id = cur->collision_task; // next は Mainmemory 上のアドレス SceneGraphPackPtr next = (SceneGraphPackPtr)smanager->allocate(sizeof(SceneGraphPack)); if (smanager->call_task(collision_task_id, (void*)cur, (void*)next)) { // 次の状態があって、新しく node を確保してそこを確保する smanager->write(cur, next, sizeof(SceneGraphPack)); } else { // この node は消滅 smanager->free(next); } return 0; }