aboutsummaryrefslogtreecommitdiff
path: root/towernbullet.h
diff options
context:
space:
mode:
authorGravatar chirs241097@gmail.com <chirs241097@gmail.com@c17bf020-1265-9734-9302-a83f62007ddb> 2014-06-19 11:51:22 +0000
committerGravatar chirs241097@gmail.com <chirs241097@gmail.com@c17bf020-1265-9734-9302-a83f62007ddb> 2014-06-19 11:51:22 +0000
commit7495d8ca26cdb25056667ae8a8d860005ee2a68f (patch)
treeb23b678105d9a6b61d8867b60a9497e40833862d /towernbullet.h
parentd747c360427071a329bed01b1fb33aab6b87c568 (diff)
downloadbullet-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.h46
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