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