summaryrefslogtreecommitdiffstats
path: root/kspaceduel/sprites.h
blob: 0d0b1fb37588963c97fd9a69214414305806ad49 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#ifndef __SPRITE_OBJECTS_H
#define __SPRITE_OBJECTS_H

#include <qcanvas.h>
#include "defines.h"

#ifdef sun
#undef sun
#endif

struct AiSprite
{
   double x,y,dx,dy;
   bool sun, border;
};

class SunSprite:public QCanvasSprite
{
public:
   SunSprite(QCanvasPixmapArray* seq, QCanvas* canvas);
   virtual int rtti() const {return S_SUN;}
};


class PowerupSprite:public QCanvasSprite
{
public:
   enum {PowerupMine=0, PowerupBullet, PowerupShield, PowerupEnergy,
         PowerupNum};
   PowerupSprite(QCanvasPixmapArray* seq, QCanvas* canvas, int t, double lifetime);
   virtual int rtti() const {return S_POWERUP;}

   double getLifetime() {return time;}
   void setLifetime(double t) {time=t;}
   int getType() {return type;}
private:
   double time;
   int type;
};

class MobileSprite:public QCanvasSprite
{
public:
   MobileSprite(QCanvasPixmapArray* array, QCanvas* canvas, int pn);

   virtual void forward(double mult,int frame);
   virtual void forward(double mult);
   virtual void calculateGravity(double gravity,double mult);
   int spriteFieldWidth(){return canvas()->width();}
   int spriteFieldHeight(){return canvas()->height();}
   AiSprite toAiSprite();

   bool isStopped() {return stopped;}
   void stop(bool s=true) {stopped=s;}
   int getPlayerNumber() {return playerNumber;}
protected:
   void checkBounds();
   bool stopped;
   int playerNumber;
};


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

class BulletSprite:public MobileSprite
{
public:
   BulletSprite(QCanvasPixmapArray* seq, QCanvas* canvas, int pn,double lifetime);
   virtual int rtti() const {return S_BULLET;}
   virtual void forward(double mult);
   virtual void forward(double mult,int fr);
   bool timeOut() {return time<=0;}
private:
   double time;
};

class MineSprite:public MobileSprite
{
public:
   MineSprite(QCanvasPixmapArray* seq, QCanvas* canvas, int pn,double atime,double f);
   virtual int rtti() const {return S_MINE;}
   bool isActive() {return active;}
   double getFuel() {return fuel;}
   void setFuel(double f) {fuel=(f<0.0?0.0:f);}
   virtual void forward(double mult);
   void explode(QCanvasPixmapArray* s);
   bool explodes() {return expl;}
   bool over() {return (expl&&(explosiontime>(timeToGo-0.1)));}
   virtual void calculateGravity(double gravity,double mult);
private:
   bool expl,active;
   double activateTime,fuel,timeToGo,explosiontime;
};

class ExplosionSprite:public QCanvasSprite
{
public:
   ExplosionSprite(QCanvasPixmapArray *seq, QCanvas* field, MobileSprite *sp);
   virtual int rtti() const {return S_EXPLOSION;}
   bool isOver() {return over;}
   virtual void forward(double mult);
   void setSequence(QCanvasPixmapArray *seq);
private:
   double timeToGo,time;
   bool over;
   MobileSprite *obj;
};

#endif