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;
}