Source Code (Use browser search to find items of interest.)

Class Index

kspaceduel'ShipSprite (./kdegames/kspaceduel/sprites.h:63)

class ShipSprite:public MobileSprite
{
public:
   ShipSprite(QCanvasPixmapArray* seq, QCanvas* canvas, int pn);
   virtual int rtti() const {return S_SHIP;}
   int getHitPoints() {return hitpoints;}
   void setHitPoints(int hp) {hitpoints=(hp<0?0:hp);}
   double getEnergy() {return energy;}
   void setEnergy(double e) {energy=(e<0?0:e);}
   void setWins(int w) {wins=w;}
   int getWins() {return wins;}
   void setExplosion(int f) {explosion=f;}
   int getExplosion() {return explosion;}
   void setRotation(double r);
   double getRotation() {return rotation;}
   void rotateRight(double rotationEnergyNeed,double rotationSpeed);
   void rotateLeft(double rotationEnergyNeed,double rotationSpeed);
   void bullet(double reloadTime) {reloadBulletTime=reloadTime;}
   bool reloadsBullet(double t=0.0) {return reloadBulletTime>t;}
   void mine(double reloadTime) {reloadMineTime=reloadTime;}
   bool reloadsMine(double t=0.0) {return reloadMineTime>t;}
   bool explodes() {return explosion>=0;}
   void setMinePowerups(int m) {minePowerups=m;}
   int getMinePowerups() {return minePowerups;}
   void setBulletPowerups(int b) {bulletPowerups=b;}
   int getBulletPowerups() {return bulletPowerups;}
   virtual void forward(double mult);
   virtual void forward(double mult,int fr);
   virtual void calculateGravityAndEnergy(double gravity,double sunEnergy,
                                          double mult);
private:
   int hitpoints, wins, explosion;
   double energy,rotation,reloadBulletTime,reloadMineTime;
   int bulletPowerups,minePowerups;
};


kspaceduel'ShipSprite::ShipSprite() (./kdegames/kspaceduel/sprites.cpp:109)

ShipSprite::ShipSprite(QCanvasPixmapArray* seq, QCanvas* canvas, int pn)
      :MobileSprite(seq,canvas,pn)
{
   hitpoints=99;
   energy=99.9;
   explosion=-1;
   setZ(-20);
   rotation=0;
   bulletPowerups=0;
   minePowerups=0;
}


kspaceduel'ShipSprite::setRotation() (./kdegames/kspaceduel/sprites.cpp:121)

void ShipSprite::setRotation(double r)
{
   int nf,of=frame();
   rotation=r;
   if(rotation<0)
      rotation-=((int)(rotation/(2*M_PI))-1)*2*M_PI;
   if(rotation>=2*M_PI)
      rotation-=(int)(rotation/(2*M_PI))*2*M_PI;
   nf=(int)(rotation/(2*M_PI)*ROTNUM)%ROTNUM;
   if(nf!=of)
      setFrame(nf);
}


kspaceduel'ShipSprite::forward() (./kdegames/kspaceduel/sprites.cpp:134)

void ShipSprite::forward(double mult)
{
   MobileSprite::forward(mult);
   if(explosion>0)
   {
      explosion--;
      if(explosion==0)
         hide();
   }
   if(reloadBulletTime>0)
      reloadBulletTime-=mult;
   if(reloadMineTime>0)
      reloadMineTime-=mult;
}


kspaceduel'ShipSprite::forward() (./kdegames/kspaceduel/sprites.cpp:149)

void ShipSprite::forward(double mult,int fr)
{
   MobileSprite::forward(mult,fr);
   rotation=fr/ROTNUM*M_PI*2;
   if(explosion>0)
   {
      explosion--;
      if(explosion==0)
         hide();
   }
   if(reloadBulletTime>0)
      reloadBulletTime-=mult;
   if(reloadMineTime>0)
      reloadMineTime-=mult;
}


kspaceduel'ShipSprite::calculateGravityAndEnergy() (./kdegames/kspaceduel/sprites.cpp:165)

void ShipSprite::calculateGravityAndEnergy(double gravity,double sunEnergy,
                                           double mult)
{
   double nx,ny,ex,ey,abs_2,phi,sq,eg;

   if(!stopped)
   {
      ex=x()-canvas()->width()/2.0;
      ey=y()-canvas()->height()/2.0;
   
      abs_2=ex*ex+ey*ey;
      sq=sqrt(abs_2);

      if ( explodes() && (sq<20) )
         stopped = true;
      else
      {
         nx=ex/sq;
         ny=ey/sq;
         eg=gravity*mult;
         setVelocity(xVelocity()-eg*nx/abs_2,
                     yVelocity()-eg*ny/abs_2);
         if(hitpoints!=0)
         {
            if(energy<99.8)
            {
               phi=rectToAngle(nx,ny);
               energy+=fabs(sunEnergy*mult/(abs_2)*cos(phi+rotation));
            }
         }
      }
   }
}


kspaceduel'ShipSprite::rotateRight() (./kdegames/kspaceduel/sprites.cpp:199)

void ShipSprite::rotateRight(double rotationEnergyNeed,double rotationSpeed)
{
   if(energy>rotationEnergyNeed)
   {
      energy-=rotationEnergyNeed;
      setRotation(rotation-rotationSpeed);
   }
}


kspaceduel'ShipSprite::rotateLeft() (./kdegames/kspaceduel/sprites.cpp:208)

void ShipSprite::rotateLeft(double rotationEnergyNeed,double rotationSpeed)
{
   if(energy>rotationEnergyNeed)
   {
      energy-=rotationEnergyNeed;
      setRotation(rotation+rotationSpeed);
   }
}