Mercurial > hg > Members > koba > t_dandy
diff collision_task.cc @ 5:c9e9b605f08e
rename tcollision.cc
author | koba <koba@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 14 Dec 2010 15:29:13 +0900 |
parents | |
children | 23d54565aa7b |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/collision_task.cc Tue Dec 14 15:29:13 2010 +0900 @@ -0,0 +1,103 @@ +#include <stdio.h> +#include <stdlib.h> +#include <SDL.h> +#include "SDL_opengl.h" +#include "object.h" +#include "Character.h" +#include "Character_state.h" +#include "tokuten.h" +#include "collision.h" +#include "bom.h" +#include "count2.h" +#include "sgoex.h" +#include "TaskManager.h" +#include "Func.h" +#include "property.h" + +extern SpriteTable sptable[DEFOBJ]; +extern TaskManager *tmanager; + +CollisionPropertyPtr +get_property(CHARACTER *p) +{ + CollisionPropertyPtr property = new(CollisionProperty); + + property->infg_level = infg_level; + property->enemycount = 0; + + property->jiki = jiki; + property->p = *p; + property->tlv3 = tlv3[0]; + property->lg = lg; + property->infg = infg; + + + memcpy(property->tama_lv1, &tama_lv1, sizeof(tama1)*20); + memcpy(property->tama_lv2, &tama_lv2, sizeof(tama2)*20); + memcpy(property->laser_lv1, &laser_lv1, sizeof(laser)*20); + memcpy(property->laser_lv2, &laser_lv2, sizeof(laser)*20); + memcpy(property->laser_lv3, &laser_lv3, sizeof(laser)*128); + memcpy(property->bchar, &bchar, sizeof(bomchar)*100); + + return property; +} + +void +free_property(SchedTask *s, void *prop, void *chara) +{ + CollisionPropertyPtr property = (CollisionPropertyPtr)prop; + CHARACTER *character = (CHARACTER *)chara; + + if(infg_level <= property->infg_level||infg_level != 0) { + infg_level--; + } + if(lg.stg <= property->lg.stg) { + lg.stg -= 26; + } + enemycount += property->enemycount; + + jiki = property->jiki; + *character = property->p; + tlv3[0] = property->tlv3; + infg = property->infg; + + memcpy(tama_lv1, property->tama_lv1, sizeof(tama1)*20); + memcpy(tama_lv2, property->tama_lv2, sizeof(tama2)*20); + memcpy(laser_lv1, property->laser_lv1, sizeof(laser)*20); + memcpy(laser_lv2, property->laser_lv2, sizeof(laser)*20); + memcpy(laser_lv3, property->laser_lv3, sizeof(laser)*128); + memcpy(bchar, property->bchar, sizeof(bomchar)*100); + + delete property; +} + + +CHARACTER * atari(CHARACTER *p) +{ + int w, h, charno; + CollisionPropertyPtr property = get_property(p); + + charno = p->charano; + w = sptable[charno].w; + h = sptable[charno].h; + + HTaskPtr collision_task = tmanager->create_task(ATARI); + + collision_task->set_param(0,(memaddr)w); + collision_task->set_param(1,(memaddr)h); + collision_task->set_param(2,(memaddr)enemycount); + collision_task->set_param(3,(memaddr)bomend); + collision_task->set_param(4,(memaddr)tama_lv1_end); + collision_task->set_param(5,(memaddr)tama_lv2_end); + collision_task->set_param(6,(memaddr)laser_lv1_end); + collision_task->set_param(7,(memaddr)infg_level); + + collision_task->add_inData(property, sizeof(CollisionProperty)); + collision_task->add_outData(property, sizeof(CollisionProperty)); + collision_task->set_post(free_property, property, p); + + collision_task->set_cpu(SPE_ANY); + collision_task->spawn(); + + return p; +}