You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdegames/kspaceduel/sprites.h

144 lines
4.2 KiB

#ifndef __SPRITE_OBJECTS_H
#define __SPRITE_OBJECTS_H
#include <tqcanvas.h>
#include "defines.h"
#ifdef sun
#undef sun
#endif
struct AiSprite
{
double x,y,dx,dy;
bool sun, border;
};
class SunSprite:public TQCanvasSprite
{
public:
SunSprite(TQCanvasPixmapArray* seq, TQCanvas* canvas);
virtual int rtti() const {return S_SUN;}
};
class PowerupSprite:public TQCanvasSprite
{
public:
enum {PowerupMine=0, PowerupBullet, PowerupShield, PowerupEnergy,
PowerupNum};
PowerupSprite(TQCanvasPixmapArray* seq, TQCanvas* 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 TQCanvasSprite
{
public:
MobileSprite(TQCanvasPixmapArray* array, TQCanvas* 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(TQCanvasPixmapArray* seq, TQCanvas* 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(TQCanvasPixmapArray* seq, TQCanvas* 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(TQCanvasPixmapArray* seq, TQCanvas* 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(TQCanvasPixmapArray* 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 TQCanvasSprite
{
public:
ExplosionSprite(TQCanvasPixmapArray *seq, TQCanvas* field, MobileSprite *sp);
virtual int rtti() const {return S_EXPLOSION;}
bool isOver() {return over;}
virtual void forward(double mult);
void setSequence(TQCanvasPixmapArray *seq);
private:
double timeToGo,time;
bool over;
MobileSprite *obj;
};
#endif