diff options
author | chirs241097@gmail.com <chirs241097@gmail.com@c17bf020-1265-9734-9302-a83f62007ddb> | 2014-06-19 11:51:22 +0000 |
---|---|---|
committer | chirs241097@gmail.com <chirs241097@gmail.com@c17bf020-1265-9734-9302-a83f62007ddb> | 2014-06-19 11:51:22 +0000 |
commit | 7495d8ca26cdb25056667ae8a8d860005ee2a68f (patch) | |
tree | b23b678105d9a6b61d8867b60a9497e40833862d /towernbullet.h | |
parent | d747c360427071a329bed01b1fb33aab6b87c568 (diff) | |
download | bullet-lab-remix-7495d8ca26cdb25056667ae8a8d860005ee2a68f.tar.xz |
Add player position display into debug display.
Rewrite pinball, adding collision between the balls...
The collision code is based on Kollision (a game included in KDE SC).
Diffstat (limited to 'towernbullet.h')
-rw-r--r-- | towernbullet.h | 46 |
1 files changed, 30 insertions, 16 deletions
diff --git a/towernbullet.h b/towernbullet.h index 6effdc4..e0998e8 100644 --- a/towernbullet.h +++ b/towernbullet.h @@ -2730,38 +2730,52 @@ class CPinBall private: int center; int circles[10][30]; - int layer;double rot,lifetime,drt; + int layer,lifetime;double rot,drt; + vector2d delta; public: + vector2d& Delta(){return delta;} + vector2d& Position(){return bullet[center].bulletpos;} + double Radius(){return layer*10.0-5;} void Init(vector2d pos,int _lay) { - center=0;memset(circles,0,sizeof(circles)); - center=CreateBullet2(pos.x,pos.y,3,re.NextInt(-pi,pi),true); - layer=_lay;rot=0;lifetime=0.01;drt=re.NextDouble(-0.5*pi,0.5*pi); + center=0;memset(circles,0,sizeof(circles));double speed=re.NextDouble(2,5); + center=CreateBullet2(pos.x,pos.y,speed,re.NextInt(-pi,pi),true); + delta=speed*bullet[center].bulletdir; + layer=_lay;rot=0;lifetime=1;drt=re.NextDouble(-0.5*pi,0.5*pi); for(int i=0;i<layer;++i) { for(int j=0;j<(i+1)*3;++j) { - circles[i][j]=CreateBullet2(pos.x,pos.y,3,0,true); + circles[i][j]=CreateBullet2(pos.x,pos.y,0,0,true); bullet[circles[i][j]].bulletpos=vector2d(pos.x+10*i*cos(rot+j*2*pi/((i+1)*3)),pos.y+10*i*sin(rot+j*2*pi/((i+1)*3))); } } } - double Getlifetime(){return lifetime;} + void Kill() + { + BulletEffect_Death(bullet[center],ColorToDWORD(blue)); + bullet[center].exist=bullet[center].bullettype=0; + for(int i=0;i<layer;++i) + for(int j=0;j<(i+1)*3;++j) + { + BulletEffect_Death(bullet[circles[i][j]],ColorToDWORD(blue)); + bullet[circles[i][j]].exist=bullet[circles[i][j]].bullettype=0; + } + lifetime=0; + } + int& Getlifetime(){return lifetime;} + void UpdateDelta() + { + vector2d tdt=ToUnitCircle(delta); + bullet[center].bulletdir=tdt;bullet[center].bulletspeed=delta.l(); + } void Update() { - lifetime+=hge->Timer_GetDelta(); vector2d pos=bullet[center].bulletpos; - if(pos.x<10*layer-5||pos.x>790-10*layer)bullet[center].bulletdir.x=-bullet[center].bulletdir.x; - if(pos.y<10*layer-5||pos.y>590-10*layer)bullet[center].bulletdir.y=-bullet[center].bulletdir.y; rot+=hge->Timer_GetDelta()*drt; for(int i=0;i<layer;++i) - { - for(int j=0;j<(i+1)*3;++j) - { - bullet[circles[i][j]].bulletpos=vector2d(pos.x+10*i*cos(rot+j*2*pi/((i+1)*3)),pos.y+10*i*sin(rot+j*2*pi/((i+1)*3))); - bullet[circles[i][j]].bulletdir=bullet[center].bulletdir; - } - } + for(int j=0;j<(i+1)*3;++j) + bullet[circles[i][j]].bulletpos=vector2d(pos.x+10*i*cos(rot+j*2*pi/((i+1)*3)),pos.y+10*i*sin(rot+j*2*pi/((i+1)*3))); } }; class LineLaser:public Laser |