Mercurial > hg > Game > Cerium
diff TaskManager/Test/test_render/Application/chain.cc @ 453:574be19530a5 draft
Chain extends Application. add Application to Viewer.
author | kazz@henri.cr.ie.u-ryukyu.ac.jp |
---|---|
date | Fri, 25 Sep 2009 23:51:55 +0900 |
parents | 0bed2a9889f5 |
children | 60f44d3ea452 |
line wrap: on
line diff
--- a/TaskManager/Test/test_render/Application/chain.cc Fri Sep 25 22:51:39 2009 +0900 +++ b/TaskManager/Test/test_render/Application/chain.cc Fri Sep 25 23:51:55 2009 +0900 @@ -5,40 +5,31 @@ #include "SGList.h" #include "TaskManager.h" #include "Func.h" - +#include "Chain.h" #define FALSE 0 #define TRUE !FALSE #define CHAIN_LEN 50 static double chain_width = 10; -typedef struct { - double x, y, next_x, next_y; - double vx, vy, next_vx, next_vy; - double angle[3]; - int can_move; - SceneGraphPtr parent; - int id; - //int parent; -} CHAIN_VARS; /* SceneGraph の property */ -CHAIN_VARS* properties[2]; -CHAIN_VARS* property; +ChainPropertyPtr properties[2]; +ChainPropertyPtr property; -//void createSceneGraphFromProperty(CHAIN_VARS* p) ; +//void createSceneGraphFromProperty(ChainPropertyPtr p) ; void createSceneGraphFromProperty(void* p) ; void -init_chain_vars(CHAIN_VARS *cv) { +Chain::init_chain_vars(ChainPropertyPtr cv) { cv->x = 0, cv->y = 0, cv->next_x = 0, cv->next_y = 0; cv->vx = 0, cv->vy = 0, cv->next_vx = 0, cv->next_vy = 0; cv->can_move = TRUE; } void -set_vector(CHAIN_VARS *p, SceneGraphPtr sg) { +set_vector(ChainPropertyPtr p, SceneGraphPtr sg) { sg->xyz[0] = p->next_x; sg->xyz[1] = p->next_y; sg->xyz[2] = 0.0f; @@ -72,12 +63,12 @@ } void -chain_move(TaskManager *manager, SceneGraphPtr sg, int w, int h) +Chain::chain_move(TaskManager *manager, SceneGraphPtr sg, int w, int h) { int id = sg->id; - //CHAIN_VARS* p = (CHAIN_VARS*)sg->propertyptr; + //ChainPropertyPtr p = (ChainPropertyPtr)sg->propertyptr; HTaskPtr chain_cal; - CHAIN_VARS* output; + ChainPropertyPtr output; // SceneGraph の切り替えもここでやる if (property == properties[0]) { @@ -88,58 +79,59 @@ output = properties[1]; } chain_cal = manager->create_task(CHAINCAL_TASK); - chain_cal->add_inData(property, sizeof(CHAIN_VARS)*CHAIN_LEN); + chain_cal->add_inData(property, sizeof(ChainProperty)*CHAIN_LEN); chain_cal->add_param(id); - chain_cal->add_outData(output, sizeof(CHAIN_VARS)*CHAIN_LEN); - chain_cal->set_post(createSceneGraphFromProperty, (void*)id); + chain_cal->add_outData(output, sizeof(ChainProperty)*CHAIN_LEN); + chain_cal->set_post(createSceneGraphFromProperty, (void*)id); chain_cal->spawn(); } void -chain_collision(SceneGraphPtr sg, int w, int h, SceneGraphPtr osg) +Chain::chain_collision(SceneGraphPtr sg, int w, int h, SceneGraphPtr osg) { } void -createSceneGraphFromProperty(void* p) +createSceneGraphFromProperty(void* p) { - CHAIN_VARS* chain_p = (CHAIN_VARS*)p; + ChainPropertyPtr chain_p = (ChainPropertyPtr)p; SceneGraphPtr chain_copy = sgroot->createSceneGraph(CHAIN); chain_copy->propertyptr = (void*)chain_p; - chain_copy->property_size = sizeof(CHAIN_VARS); + chain_copy->property_size = sizeof(ChainProperty); set_vector(chain_p, chain_copy); chain_p->parent->addChild(chain_copy); } void -chain_init(TaskManager *manager, int w, int h) +Chain::init(TaskManager *manager, int w, int h) { SceneGraphPtr root_chain, chain; - CHAIN_VARS rcv; + ChainPropertyPtr rcv; + ChainProperty r; + HTaskPtr chain_init; - HTaskPtr chain_init; - + rcv = &r; sgroot->createFromXMLfile(manager, "xml_file/chain.xml"); /* SPE に送る property の配列の領域確保 */ - properties[0] = (CHAIN_VARS*)manager->allocate(sizeof(CHAIN_VARS)*CHAIN_LEN); - properties[1] = (CHAIN_VARS*)manager->allocate(sizeof(CHAIN_VARS)*CHAIN_LEN); + properties[0] = (ChainPropertyPtr)manager->allocate(sizeof(ChainProperty)*CHAIN_LEN); + properties[1] = (ChainPropertyPtr)manager->allocate(sizeof(ChainProperty)*CHAIN_LEN); property = properties[0]; root_chain = sgroot->createSceneGraph(CHAIN); // set_move_collision()ではだめ - root_chain->set_move_collision(chain_move_ope, chain_collision); - init_chain_vars(&rcv); - rcv.next_x = w / 2; - rcv.next_y = 0.0; - rcv.angle[0] = 0; - rcv.angle[1] = 0; - rcv.angle[2] = 0; +// root_chain->set_move_collision(chain_move_ope, chain_collision); + init_chain_vars(rcv); + rcv->next_x = w / 2; + rcv->next_y = 0.0; + rcv->angle[0] = 0; + rcv->angle[1] = 0; + rcv->angle[2] = 0; - set_vector(&rcv, root_chain); + set_vector(rcv, root_chain); for(int i = 0; i < CHAIN_LEN; i++) { chain = sgroot->createSceneGraph(CHAIN); @@ -150,16 +142,16 @@ set_vector(&property[i], chain); property->angle[1] = -90 * (i % 2); //chain->set_move_collision(chain_move, chain_collision); - chain->propertyptr = &property[i]; - chain->property_size = sizeof(CHAIN_VARS); + chain->propertyptr = &property[i]; + chain->property_size = sizeof(ChainProperty); root_chain->addChild(chain); - property[i].parent = root_chain; + property[i].parent = root_chain; } property[0].can_move = FALSE; // property を SPU の共有領域へコピーする chain_init = manager->create_task(CHAININIT_TASK); - chain_init->add_inData(property, sizeof(CHAIN_VARS)*CHAIN_LEN); + chain_init->add_inData(property, sizeof(ChainProperty)*CHAIN_LEN); chain_init->add_param(CHAIN_LEN); chain_init->set_cpu(SPE_0); chain_init->set_post(createSceneGraphFromProperty, (void*)property);