added morphs, fix some bugs, new images
added onAlienInRadius trigger but it not work right((
This commit is contained in:
250
base_types.h
250
base_types.h
@@ -15,180 +15,230 @@
|
||||
#include <QRectF>
|
||||
#include <QImage>
|
||||
#include <QStringList>
|
||||
#include <QPainter>
|
||||
#include "aditem.h"
|
||||
|
||||
const float cellSize = 20.f;
|
||||
|
||||
struct srcAlienType;
|
||||
struct srcTowerType;
|
||||
struct srcSplashType;
|
||||
struct srcTriggerType;
|
||||
|
||||
struct srcAlienType
|
||||
{
|
||||
QString name;
|
||||
float speed;
|
||||
float health;
|
||||
float armor;
|
||||
float regeneration;
|
||||
bool isFlying;
|
||||
unsigned int score;
|
||||
int imgType;
|
||||
QList<QImage *> * images;
|
||||
unsigned int prise;
|
||||
QString name;
|
||||
float speed;
|
||||
float health;
|
||||
float armor;
|
||||
float regeneration;
|
||||
bool isFlying;
|
||||
unsigned int score;
|
||||
int imgType;
|
||||
QList<QImage *> * images;
|
||||
unsigned int prise;
|
||||
};
|
||||
|
||||
|
||||
struct AlienType
|
||||
{
|
||||
int id; // uses for QHash
|
||||
srcAlienType * src;
|
||||
QPointF pos;
|
||||
float angle; // -180 .. 180
|
||||
float speed; // cells per tick (speed=1 is 60cells by 1 sec for 60fps e.g.)
|
||||
float health;
|
||||
QPoint finish;
|
||||
QVector <QPointF> path;
|
||||
int pathIndex;
|
||||
ADItem * item;
|
||||
int id; // uses for QHash
|
||||
srcAlienType * src;
|
||||
QPointF pos;
|
||||
float angle; // -180 .. 180
|
||||
float speed; // cells per tick (speed=1 is 60cells by 1 sec for 60fps e.g.)
|
||||
float health;
|
||||
QPoint finish;
|
||||
QVector <QPointF> path;
|
||||
int pathIndex;
|
||||
ADItem * item;
|
||||
};
|
||||
|
||||
|
||||
struct srcTriggerType
|
||||
{
|
||||
enum triggerType
|
||||
{
|
||||
onDestination,
|
||||
onTimer,
|
||||
onAlienInRadius
|
||||
};
|
||||
enum triggerType
|
||||
{
|
||||
onDestination,
|
||||
onTimer,
|
||||
onAlienInRadius
|
||||
};
|
||||
|
||||
enum aimType
|
||||
{
|
||||
noAim,
|
||||
parentAim,
|
||||
allSide,
|
||||
nearlestAlien
|
||||
};
|
||||
int childId; // =-1 for none birth splash (e.q. only damage)
|
||||
aimType childAim;
|
||||
bool delParent;
|
||||
float damage;
|
||||
float radius;
|
||||
triggerType type;
|
||||
unsigned int timer;
|
||||
int count;
|
||||
float randomPosRadius;
|
||||
enum aimType
|
||||
{
|
||||
noAim,
|
||||
parentAim,
|
||||
allSide,
|
||||
nearestAlien
|
||||
};
|
||||
int childId; // =-1 for none birth splash (e.q. only damage)
|
||||
aimType childAim;
|
||||
bool delParent;
|
||||
float damage;
|
||||
float radius;
|
||||
triggerType type;
|
||||
unsigned int timer;
|
||||
int count;
|
||||
float randomPosRadius;
|
||||
};
|
||||
|
||||
|
||||
struct TriggerOnDest
|
||||
{
|
||||
srcTriggerType * src;
|
||||
srcTriggerType * src;
|
||||
};
|
||||
|
||||
|
||||
struct TriggerOnTimer
|
||||
{
|
||||
srcTriggerType * src;
|
||||
unsigned int timer;
|
||||
srcTriggerType * src;
|
||||
unsigned int timer;
|
||||
};
|
||||
|
||||
|
||||
struct TriggerOnAlien
|
||||
{
|
||||
srcTriggerType * src;
|
||||
QList <int> triggerAliens;
|
||||
srcTriggerType * src;
|
||||
QList <int> triggerAliens;
|
||||
};
|
||||
|
||||
|
||||
struct srcSplashType;
|
||||
struct MorphType
|
||||
{
|
||||
srcTowerType * morph;
|
||||
float expRequired;
|
||||
unsigned int cost;
|
||||
};
|
||||
|
||||
|
||||
struct srcTowerType
|
||||
{
|
||||
QString name;
|
||||
QImage * image;
|
||||
int imgType;
|
||||
int PlayerId; // tower's owner
|
||||
unsigned int cost;
|
||||
unsigned int reload;
|
||||
unsigned int buildTime;
|
||||
float radius; // in cells
|
||||
float expByShot;
|
||||
float expByKill;
|
||||
float expByDamage;
|
||||
QList <srcTriggerType> triggers;
|
||||
QList <srcSplashType> splashes;
|
||||
QString name;
|
||||
QImage * image;
|
||||
int imgType;
|
||||
int PlayerId; // tower's owner
|
||||
unsigned int cost;
|
||||
unsigned int reload;
|
||||
unsigned int buildTime;
|
||||
float radius; // in cells
|
||||
float expByShot;
|
||||
float expByKill;
|
||||
float expByDamage;
|
||||
bool isRoot;
|
||||
QList <srcTriggerType> triggers;
|
||||
QList <srcSplashType> splashes;
|
||||
QList<MorphType> morphs;
|
||||
};
|
||||
|
||||
|
||||
struct TowerType
|
||||
{
|
||||
srcTowerType * src;
|
||||
int aim; // aim alien Id
|
||||
int PlayerId; // tower's owner
|
||||
QPoint pos; // same as Id; not QPointF because tower fixed on grid
|
||||
float angle; // -180 .. 180
|
||||
unsigned int reload; // time for reload in ticks
|
||||
unsigned int build;
|
||||
float experience;
|
||||
ADItem * item;
|
||||
bool isBilding;
|
||||
srcTowerType * src;
|
||||
int aim; // aim alien Id
|
||||
int PlayerId; // tower's owner
|
||||
QPoint pos; // same as Id; not QPointF because tower fixed on grid
|
||||
float angle; // -180 .. 180
|
||||
unsigned int reload; // time for reload in ticks
|
||||
unsigned int build;
|
||||
float experience;
|
||||
ADItem * item;
|
||||
bool isBilding;
|
||||
};
|
||||
|
||||
|
||||
struct srcSplashType
|
||||
{
|
||||
QString name;
|
||||
int imgType;
|
||||
float speed; // in cells
|
||||
int lifetime;
|
||||
bool autoControl;
|
||||
QList <int> triggerIndexes;
|
||||
QList<QImage *> * images;
|
||||
QString name;
|
||||
int imgType;
|
||||
float speed; // in cells
|
||||
int lifetime;
|
||||
bool autoControl;
|
||||
bool keepOnAlien;
|
||||
float animSpeed;
|
||||
float ZValue;
|
||||
QPainter::CompositionMode compositionMode;
|
||||
QList <int> triggerIndexes;
|
||||
QList<QImage *> * images;
|
||||
};
|
||||
|
||||
|
||||
struct SplashType
|
||||
{
|
||||
int id;
|
||||
srcSplashType * src;
|
||||
srcTowerType * srcTow;
|
||||
int id;
|
||||
srcSplashType * src;
|
||||
srcTowerType * srcTow;
|
||||
QPoint towerId; // parent tower, (0,0) or null for non parent
|
||||
int PlayerId;
|
||||
int AlienId; // aim alien (different from tower.AlienId)
|
||||
QPointF destination;
|
||||
int life; // in ticks
|
||||
float angle; // -180 .. 180
|
||||
QPointF pos;
|
||||
QList <TriggerOnAlien> trigsOnAlien;
|
||||
QList <TriggerOnDest> trigsOnDest;
|
||||
QList <TriggerOnTimer> trigsOnTimer;
|
||||
ADItem * item;
|
||||
int PlayerId;
|
||||
int AlienId; // aim alien (different from tower.AlienId)
|
||||
QPointF destination;
|
||||
int life; // in ticks
|
||||
float angle; // -180 .. 180
|
||||
QPointF pos;
|
||||
QList <TriggerOnAlien> trigsOnAlien;
|
||||
QList <TriggerOnDest> trigsOnDest;
|
||||
QList <TriggerOnTimer> trigsOnTimer;
|
||||
ADItem * item;
|
||||
};
|
||||
|
||||
/// DEPRECATED !!!
|
||||
|
||||
struct AnimationType
|
||||
{
|
||||
QList<QImage * > * images;
|
||||
QList<QImage * > * images;
|
||||
};
|
||||
/// DEPRECATED !!!
|
||||
|
||||
|
||||
struct WaveType
|
||||
{
|
||||
QList <int> types; // some types of aliens (e.g. 2 fly and 3 grount in one wave)
|
||||
QList <unsigned int> counts; // count aliens of each type
|
||||
unsigned int timeout; // time in ticks
|
||||
unsigned int prise;
|
||||
QList <int> types; // some types of aliens (e.g. 2 fly and 3 grount in one wave)
|
||||
QList <unsigned int> counts; // count aliens of each type
|
||||
unsigned int timeout; // time in ticks
|
||||
unsigned int prise;
|
||||
};
|
||||
|
||||
|
||||
inline uint qHash(const QPoint &pos)
|
||||
{
|
||||
return qHash(pos.x() + (pos.y() << 16));
|
||||
return qHash(pos.x() + (pos.y() << 16));
|
||||
}
|
||||
|
||||
|
||||
inline float distance2(const QPointF &p1, const QPointF &p2)
|
||||
{
|
||||
return (p1.x()-p2.x())*(p1.x()-p2.x())+(p1.y()-p2.y())*(p1.y()-p2.y());
|
||||
return (p1.x()-p2.x())*(p1.x()-p2.x())+(p1.y()-p2.y())*(p1.y()-p2.y());
|
||||
}
|
||||
|
||||
|
||||
template<typename Type>
|
||||
class _PIForeachC {
|
||||
public:
|
||||
_PIForeachC(const Type & t): _t(t) {_it = _t.begin(); _break = false;}
|
||||
typename Type::value_type _var;
|
||||
typename Type::const_iterator _it;
|
||||
const Type & _t;
|
||||
bool _break, _inv;
|
||||
inline bool isEnd() {return _it == _t.end();}
|
||||
inline void operator ++() {_it++; _break = false;}
|
||||
};
|
||||
|
||||
template<typename Type>
|
||||
class _PIForeach {
|
||||
public:
|
||||
_PIForeach(Type & t): _t(t) {_it = _t.begin(); _break = false;}
|
||||
typename Type::value_type _var;
|
||||
typename Type::iterator _it;
|
||||
Type & _t;
|
||||
bool _break, _inv;
|
||||
inline bool isEnd() {return _it == _t.end();}
|
||||
inline void operator ++() {_it++; _break = false;}
|
||||
};
|
||||
|
||||
#define piForTimes(c) for(int i = 0; i < c; ++i)
|
||||
|
||||
#define piForeach(i,c) for(_PIForeach<typeof(c)> _for(c); !_for.isEnd(); ++_for) for(i = *_for._it; !_for._break; _for._break = true)
|
||||
#define piForeachA(i,c) for(_PIForeach<typeof(c)> _for(c); !_for.isEnd(); ++_for) for(typeof(_for._var) & i(*_for._it); !_for._break; _for._break = true)
|
||||
#define piForeachC(i,c) for(_PIForeachC<typeof(c)> _for(c); !_for.isEnd(); ++_for) for(const i = *_for._it; !_for._break; _for._break = true)
|
||||
#define piForeachCA(i,c) for(_PIForeachC<typeof(c)> _for(c); !_for.isEnd(); ++_for) for(const typeof(_for._var) & i(*_for._it); !_for._break; _for._break = true)
|
||||
|
||||
#define piForeachAC piForeachCA
|
||||
|
||||
#endif // BASE_TYPES_H
|
||||
|
||||
Reference in New Issue
Block a user