Mercurial > hg > Game > Cerium
view example/scenegraph/xml/task/collision.cpp @ 539:3bc98f6d31ff draft
Reorganization..
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 12 Oct 2009 09:39:35 +0900 |
parents | 10c1f6970f6a |
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; }