damage particlesystem / new glest.ini / ingame option to switch of particles

This commit is contained in:
Titus Tscharntke
2010-03-01 00:30:51 +00:00
parent a76e4aaec9
commit b6b54f1001
10 changed files with 157 additions and 43 deletions

View File

@@ -43,4 +43,5 @@ SoundVolumeFx=80
SoundVolumeMusic=90 SoundVolumeMusic=90
StencilBits=0 StencilBits=0
Textures3D=1 Textures3D=1
UnitParticles=1
Windowed=0 Windowed=0

View File

@@ -22,7 +22,7 @@ using namespace Shared::Util;
namespace Glest{ namespace Game{ namespace Glest{ namespace Game{
const string mailString= "contact_game@glest.org"; const string mailString= "contact_game@glest.org";
const string glestVersionString= "v3.2.4-1-beta4"; const string glestVersionString= "v3.2.4-2-beta4";
string getCrashDumpFileName(){ string getCrashDumpFileName(){
return "glest"+glestVersionString+".dmp"; return "glest"+glestVersionString+".dmp";
@@ -43,7 +43,7 @@ string getAboutString1(int i){
string getAboutString2(int i){ string getAboutString2(int i){
switch(i){ switch(i){
case 0: return "Web: http://glest.org"; case 0: return "Web: http://sourceforge.net/projects/megaglest http://glest.org";
case 1: return "Mail: " + mailString; case 1: return "Mail: " + mailString;
case 2: return "Irc: irc://irc.freenode.net/glest"; case 2: return "Irc: irc://irc.freenode.net/glest";
} }
@@ -59,6 +59,8 @@ string getTeammateName(int i){
case 4: return "F<EFBFBD>lix Men<65>ndez"; case 4: return "F<EFBFBD>lix Men<65>ndez";
case 5: return "Marcos Caruncho"; case 5: return "Marcos Caruncho";
case 6: return "Matthias Braun"; case 6: return "Matthias Braun";
case 7: return "Titus Tscharntke";
case 8: return "Mark Vejvoda";
} }
return ""; return "";
} }
@@ -74,6 +76,8 @@ string getTeammateRole(int i){
case 4: return l.get("Animation"); case 4: return l.get("Animation");
case 5: return l.get("3dArt"); case 5: return l.get("3dArt");
case 6: return l.get("LinuxPort"); case 6: return l.get("LinuxPort");
case 7: return l.get("Megaglest3d2dProgramming");
case 8: return l.get("MegaglestProgramming");
} }
return ""; return "";
} }

View File

@@ -1,7 +1,7 @@
// ============================================================== // ==============================================================
// This file is part of Glest (www.glest.org) // This file is part of Glest (www.glest.org)
// //
// Copyright (C) 2001-2005 Marti<74>o Figueroa // Copyright (C) 2001-2005 Marti<74>o Figueroa
// //
// You can redistribute this code and/or modify it under // You can redistribute this code and/or modify it under
// the terms of the GNU General Public License as published // the terms of the GNU General Public License as published
@@ -51,10 +51,14 @@ MenuStateAbout::MenuStateAbout(Program *program, MainMenu *mainMenu):
labelTeammateRole[i].setText(getTeammateRole(i)); labelTeammateRole[i].setText(getTeammateRole(i));
} }
labelTeammateName[5].init(360, 160); labelTeammateName[5].init(180, 160);
labelTeammateRole[5].init(360, 180); labelTeammateRole[5].init(180, 180);
labelTeammateName[6].init(540, 160); labelTeammateName[6].init(360, 160);
labelTeammateRole[6].init(540, 180); labelTeammateRole[6].init(360, 180);
labelTeammateName[7].init(540, 160);
labelTeammateRole[7].init(540, 180);
labelTeammateName[8].init(720, 160);
labelTeammateRole[8].init(720, 180);
} }
void MenuStateAbout::mouseClick(int x, int y, MouseButton mouseButton){ void MenuStateAbout::mouseClick(int x, int y, MouseButton mouseButton){

View File

@@ -1,7 +1,7 @@
// ============================================================== // ==============================================================
// This file is part of Glest (www.glest.org) // This file is part of Glest (www.glest.org)
// //
// Copyright (C) 2001-2005 Marti<74>o Figueroa // Copyright (C) 2001-2005 Marti<74>o Figueroa
// //
// You can redistribute this code and/or modify it under // You can redistribute this code and/or modify it under
// the terms of the GNU General Public License as published // the terms of the GNU General Public License as published
@@ -24,7 +24,7 @@ class MenuStateAbout: public MenuState{
public: public:
static const int aboutStringCount1= 3; static const int aboutStringCount1= 3;
static const int aboutStringCount2= 3; static const int aboutStringCount2= 3;
static const int teammateCount= 7; static const int teammateCount= 9;
private: private:
GraphicButton buttonReturn; GraphicButton buttonReturn;

View File

@@ -1,7 +1,7 @@
// ============================================================== // ==============================================================
// This file is part of Glest (www.glest.org) // This file is part of Glest (www.glest.org)
// //
// Copyright (C) 2001-2005 Marti<74>o Figueroa // Copyright (C) 2001-2005 Marti<74>o Figueroa
// //
// You can redistribute this code and/or modify it under // You can redistribute this code and/or modify it under
// the terms of the GNU General Public License as published // the terms of the GNU General Public License as published
@@ -49,6 +49,7 @@ MenuStateOptions::MenuStateOptions(Program *program, MainMenu *mainMenu):
labelShadows.init(200, 310); labelShadows.init(200, 310);
labelTextures3D.init(200, 280); labelTextures3D.init(200, 280);
labelLights.init(200, 250); labelLights.init(200, 250);
labelUnitParticles.init(200,220);
//list boxes //list boxes
listBoxVolumeFx.init(350, 530, 80); listBoxVolumeFx.init(350, 530, 80);
@@ -62,7 +63,8 @@ MenuStateOptions::MenuStateOptions(Program *program, MainMenu *mainMenu):
listBoxShadows.init(350, 310, 170); listBoxShadows.init(350, 310, 170);
listBoxTextures3D.init(350, 280, 80); listBoxTextures3D.init(350, 280, 80);
listBoxLights.init(350, 250, 80); listBoxLights.init(350, 250, 80);
listBoxUnitParticles.init(350,220,80);
//set text //set text
buttonReturn.setText(lang.get("Return")); buttonReturn.setText(lang.get("Return"));
buttonAutoConfig.setText(lang.get("AutoConfig")); buttonAutoConfig.setText(lang.get("AutoConfig"));
@@ -71,6 +73,7 @@ MenuStateOptions::MenuStateOptions(Program *program, MainMenu *mainMenu):
labelFilter.setText(lang.get("Filter")); labelFilter.setText(lang.get("Filter"));
labelTextures3D.setText(lang.get("Textures3D")); labelTextures3D.setText(lang.get("Textures3D"));
labelLights.setText(lang.get("MaxLights")); labelLights.setText(lang.get("MaxLights"));
labelUnitParticles.setText(lang.get("ShowUnitParticles"));
labelVolumeFx.setText(lang.get("FxVolume")); labelVolumeFx.setText(lang.get("FxVolume"));
labelVolumeAmbient.setText(lang.get("AmbientVolume")); labelVolumeAmbient.setText(lang.get("AmbientVolume"));
labelVolumeMusic.setText(lang.get("MusicVolume")); labelVolumeMusic.setText(lang.get("MusicVolume"));
@@ -103,6 +106,11 @@ MenuStateOptions::MenuStateOptions(Program *program, MainMenu *mainMenu):
listBoxTextures3D.pushBackItem(lang.get("No")); listBoxTextures3D.pushBackItem(lang.get("No"));
listBoxTextures3D.pushBackItem(lang.get("Yes")); listBoxTextures3D.pushBackItem(lang.get("Yes"));
listBoxTextures3D.setSelectedItemIndex(clamp(config.getInt("Textures3D"), 0, 1)); listBoxTextures3D.setSelectedItemIndex(clamp(config.getInt("Textures3D"), 0, 1));
//textures 3d
listBoxUnitParticles.pushBackItem(lang.get("No"));
listBoxUnitParticles.pushBackItem(lang.get("Yes"));
listBoxUnitParticles.setSelectedItemIndex(clamp(config.getInt("UnitParticles"), 0, 1));
//lights //lights
for(int i= 1; i<=8; ++i){ for(int i= 1; i<=8; ++i){
@@ -158,6 +166,10 @@ void MenuStateOptions::mouseClick(int x, int y, MouseButton mouseButton){
config.setInt("Textures3D", listBoxTextures3D.getSelectedItemIndex()); config.setInt("Textures3D", listBoxTextures3D.getSelectedItemIndex());
saveConfig(); saveConfig();
} }
else if(listBoxUnitParticles.mouseClick(x, y)){
config.setInt("UnitParticles", listBoxUnitParticles.getSelectedItemIndex());
saveConfig();
}
else if(listBoxLights.mouseClick(x, y)){ else if(listBoxLights.mouseClick(x, y)){
config.setInt("MaxLights", listBoxLights.getSelectedItemIndex()+1); config.setInt("MaxLights", listBoxLights.getSelectedItemIndex()+1);
saveConfig(); saveConfig();
@@ -190,6 +202,7 @@ void MenuStateOptions::mouseMove(int x, int y, const MouseState *ms){
listBoxFilter.mouseMove(x, y); listBoxFilter.mouseMove(x, y);
listBoxShadows.mouseMove(x, y); listBoxShadows.mouseMove(x, y);
listBoxTextures3D.mouseMove(x, y); listBoxTextures3D.mouseMove(x, y);
listBoxUnitParticles.mouseMove(x, y);
listBoxLights.mouseMove(x, y); listBoxLights.mouseMove(x, y);
} }
@@ -201,6 +214,7 @@ void MenuStateOptions::render(){
renderer.renderListBox(&listBoxLang); renderer.renderListBox(&listBoxLang);
renderer.renderListBox(&listBoxShadows); renderer.renderListBox(&listBoxShadows);
renderer.renderListBox(&listBoxTextures3D); renderer.renderListBox(&listBoxTextures3D);
renderer.renderListBox(&listBoxUnitParticles);
renderer.renderListBox(&listBoxLights); renderer.renderListBox(&listBoxLights);
renderer.renderListBox(&listBoxFilter); renderer.renderListBox(&listBoxFilter);
renderer.renderListBox(&listBoxVolumeFx); renderer.renderListBox(&listBoxVolumeFx);
@@ -209,6 +223,7 @@ void MenuStateOptions::render(){
renderer.renderLabel(&labelLang); renderer.renderLabel(&labelLang);
renderer.renderLabel(&labelShadows); renderer.renderLabel(&labelShadows);
renderer.renderLabel(&labelTextures3D); renderer.renderLabel(&labelTextures3D);
renderer.renderLabel(&labelUnitParticles);
renderer.renderLabel(&labelLights); renderer.renderLabel(&labelLights);
renderer.renderLabel(&labelFilter); renderer.renderLabel(&labelFilter);
renderer.renderLabel(&labelVolumeFx); renderer.renderLabel(&labelVolumeFx);

View File

@@ -1,7 +1,7 @@
// ============================================================== // ==============================================================
// This file is part of Glest (www.glest.org) // This file is part of Glest (www.glest.org)
// //
// Copyright (C) 2001-2005 Marti<74>o Figueroa // Copyright (C) 2001-2005 Marti<74>o Figueroa
// //
// You can redistribute this code and/or modify it under // You can redistribute this code and/or modify it under
// the terms of the GNU General Public License as published // the terms of the GNU General Public License as published
@@ -30,6 +30,7 @@ private:
GraphicLabel labelFilter; GraphicLabel labelFilter;
GraphicLabel labelTextures3D; GraphicLabel labelTextures3D;
GraphicLabel labelLights; GraphicLabel labelLights;
GraphicLabel labelUnitParticles;
GraphicLabel labelVolumeFx; GraphicLabel labelVolumeFx;
GraphicLabel labelVolumeAmbient; GraphicLabel labelVolumeAmbient;
GraphicLabel labelVolumeMusic; GraphicLabel labelVolumeMusic;
@@ -38,6 +39,7 @@ private:
GraphicListBox listBoxFilter; GraphicListBox listBoxFilter;
GraphicListBox listBoxTextures3D; GraphicListBox listBoxTextures3D;
GraphicListBox listBoxLights; GraphicListBox listBoxLights;
GraphicListBox listBoxUnitParticles;
GraphicListBox listBoxVolumeFx; GraphicListBox listBoxVolumeFx;
GraphicListBox listBoxVolumeAmbient; GraphicListBox listBoxVolumeAmbient;
GraphicListBox listBoxVolumeMusic; GraphicListBox listBoxVolumeMusic;

View File

@@ -110,8 +110,11 @@ Unit::Unit(int id, const Vec2i &pos, const UnitType *type, Faction *faction, Map
this->type=type; this->type=type;
this->faction=faction; this->faction=faction;
this->map= map; this->map= map;
this->id= id; this->id= id;
Config &config= Config::getInstance();
showUnitParticles= config.getBool("UnitParticles");
lastPos= pos; lastPos= pos;
progress= 0; progress= 0;
lastAnimProgress= 0; lastAnimProgress= 0;
@@ -159,6 +162,7 @@ Unit::~Unit(){
unitParticleSystems.back()->fade(); unitParticleSystems.back()->fade();
unitParticleSystems.pop_back(); unitParticleSystems.pop_back();
} }
stopDamageParticles();
} }
// ====================================== get ====================================== // ====================================== get ======================================
@@ -324,8 +328,8 @@ void Unit::setCurrSkill(const SkillType *currSkill){
unitParticleSystems.pop_back(); unitParticleSystems.pop_back();
} }
} }
if((!currSkill->unitParticleSystemTypes.empty()) if(showUnitParticles && (!currSkill->unitParticleSystemTypes.empty()) &&
&& (unitParticleSystems.empty()) ){ (unitParticleSystems.empty()) ){
for(UnitParticleSystemTypes::const_iterator it= currSkill->unitParticleSystemTypes.begin(); it!=currSkill->unitParticleSystemTypes.end(); ++it){ for(UnitParticleSystemTypes::const_iterator it= currSkill->unitParticleSystemTypes.begin(); it!=currSkill->unitParticleSystemTypes.end(); ++it){
UnitParticleSystem *ups; UnitParticleSystem *ups;
ups= new UnitParticleSystem(200); ups= new UnitParticleSystem(200);
@@ -375,6 +379,9 @@ void Unit::setVisible(const bool visible){
for(UnitParticleSystems::iterator it= unitParticleSystems.begin(); it!=unitParticleSystems.end(); ++it){ for(UnitParticleSystems::iterator it= unitParticleSystems.begin(); it!=unitParticleSystems.end(); ++it){
(*it)->setVisible(visible); (*it)->setVisible(visible);
} }
for(UnitParticleSystems::iterator it= damageParticleSystems.begin(); it!=damageParticleSystems.end(); ++it){
(*it)->setVisible(visible);
}
} }
// =============================== Render related ================================== // =============================== Render related ==================================
@@ -651,6 +658,10 @@ bool Unit::update(){
(*it)->setPos(getCurrVector()); (*it)->setPos(getCurrVector());
(*it)->setRotation(getRotation()); (*it)->setRotation(getRotation());
} }
for(UnitParticleSystems::iterator it= damageParticleSystems.begin(); it!=damageParticleSystems.end(); ++it){
(*it)->setPos(getCurrVector());
(*it)->setRotation(getRotation());
}
//checks //checks
if(animProgress>1.f){ if(animProgress>1.f){
animProgress= currSkill->getClass()==scDie? 1.f: 0.f; animProgress= currSkill->getClass()==scDie? 1.f: 0.f;
@@ -684,10 +695,9 @@ void Unit::tick(){
if(hp>type->getTotalMaxHp(&totalUpgrade)){ if(hp>type->getTotalMaxHp(&totalUpgrade)){
hp= type->getTotalMaxHp(&totalUpgrade); hp= type->getTotalMaxHp(&totalUpgrade);
} }
//stop fire //stop DamageParticles
if(hp>type->getTotalMaxHp(&totalUpgrade)/2 && fire!=NULL){ if(hp>type->getTotalMaxHp(&totalUpgrade)/2 ){
fire->fade(); stopDamageParticles();
fire= NULL;
} }
//regenerate ep //regenerate ep
ep+= type->getEpRegeneration(); ep+= type->getEpRegeneration();
@@ -727,10 +737,9 @@ bool Unit::repair(){
return true; return true;
} }
//stop fire //stop DamageParticles
if(hp>type->getTotalMaxHp(&totalUpgrade)/2 && fire!=NULL){ if(hp>type->getTotalMaxHp(&totalUpgrade)/2 ){
fire->fade(); stopDamageParticles();
fire= NULL;
} }
return false; return false;
} }
@@ -743,27 +752,16 @@ bool Unit::decHp(int i){
hp-=i; hp-=i;
//fire //startDamageParticles
if(type->getProperty(UnitType::pBurnable) && hp<type->getMaxHp()/2 && fire==NULL){ if(hp<type->getMaxHp()/2 ){
FireParticleSystem *fps; startDamageParticles();
fps= new FireParticleSystem(200);
fps->setSpeed(2.5f/GameConstants::updateFps);
fps->setPos(getCurrVector());
fps->setRadius(type->getSize()/3.f);
fps->setTexture(CoreData::getInstance().getFireTexture());
fps->setParticleSize(type->getSize()/3.f);
fire= fps;
Renderer::getInstance().manageParticleSystem(fps, rsGame);
} }
//stop fire on death //stop DamageParticles on death
if(hp<=0){ if(hp<=0){
alive= false; alive= false;
hp=0; hp=0;
if(fire!=NULL){ stopDamageParticles();
fire->fade();
fire= NULL;
}
return true; return true;
} }
return false; return false;
@@ -1021,5 +1019,67 @@ CommandResult Unit::undoCommand(Command *command){
return crSuccess; return crSuccess;
} }
void Unit::stopDamageParticles(){
// stop fire
if(fire!=NULL){
fire->fade();
fire= NULL;
}
// stop additional particles
while(!damageParticleSystems.empty()){
damageParticleSystems.back()->fade();
damageParticleSystems.pop_back();
}
}
void Unit::startDamageParticles(){
//start additional particles
if( showUnitParticles && (!type->damageParticleSystemTypes.empty())
&& (damageParticleSystems.empty()) ){
for(UnitParticleSystemTypes::const_iterator it= type->damageParticleSystemTypes.begin(); it!=type->damageParticleSystemTypes.end(); ++it){
UnitParticleSystem *ups;
ups= new UnitParticleSystem(200);
(*it)->setValues(ups);
ups->setPos(getCurrVector());
ups->setFactionColor(getFaction()->getTexture()->getPixmap()->getPixel3f(0,0));
damageParticleSystems.push_back(ups);
Renderer::getInstance().manageParticleSystem(ups, rsGame);
}
}
// start fire
if(type->getProperty(UnitType::pBurnable) && fire==NULL){
FireParticleSystem *fps;
fps= new FireParticleSystem(200);
fps->setSpeed(2.5f/GameConstants::updateFps);
fps->setPos(getCurrVector());
fps->setRadius(type->getSize()/3.f);
fps->setTexture(CoreData::getInstance().getFireTexture());
fps->setParticleSize(type->getSize()/3.f);
fire= fps;
Renderer::getInstance().manageParticleSystem(fps, rsGame);
if(showUnitParticles){
// smoke
UnitParticleSystem *ups= new UnitParticleSystem(400);
ups->setColorNoEnergy(Vec4f(0.0f, 0.0f, 0.0f, 0.13f));
ups->setColor(Vec4f(0.115f, 0.115f, 0.115f, 0.22f));
ups->setPos(getCurrVector());
ups->setBlendMode(ups->strToBlendMode("black"));
ups->setOffset(Vec3f(0,2,0));
ups->setDirection(Vec3f(0,1,-0.2f));
ups->setRadius(type->getSize()/3.f);
ups->setTexture(CoreData::getInstance().getFireTexture());
ups->setSpeed(2.0f/GameConstants::updateFps);
ups->setGravity(0.0004f);
ups->setEmissionRate(1);
ups->setMaxParticleEnergy(150);
ups->setSizeNoEnergy(type->getSize()*0.6f);
ups->setParticleSize(type->getSize()*0.8f);
damageParticleSystems.push_back(ups);
Renderer::getInstance().manageParticleSystem(ups, rsGame);
}
}
}
}}//end namespace }}//end namespace

View File

@@ -129,7 +129,7 @@ public:
static const int maxDeadCount; static const int maxDeadCount;
static const float highlightTime; static const float highlightTime;
static const int invalidId; static const int invalidId;
//UnitParticleSystem *skillParticleSystem;
private: private:
int id; int id;
@@ -166,6 +166,7 @@ private:
bool toBeUndertaken; bool toBeUndertaken;
bool alive; bool alive;
bool showUnitParticles;
Faction *faction; Faction *faction;
ParticleSystem *fire; ParticleSystem *fire;
@@ -177,6 +178,7 @@ private:
Commands commands; Commands commands;
Observers observers; Observers observers;
UnitParticleSystems unitParticleSystems; UnitParticleSystems unitParticleSystems;
UnitParticleSystems damageParticleSystems;
public: public:
Unit(int id, const Vec2i &pos, const UnitType *type, Faction *faction, Map *map); Unit(int id, const Vec2i &pos, const UnitType *type, Faction *faction, Map *map);
@@ -297,6 +299,8 @@ private:
void updateTarget(); void updateTarget();
void clearCommands(); void clearCommands();
CommandResult undoCommand(Command *command); CommandResult undoCommand(Command *command);
void stopDamageParticles();
void startDamageParticles();
}; };
}}// end namespace }}// end namespace

View File

@@ -1,7 +1,7 @@
// ============================================================== // ==============================================================
// This file is part of Glest (www.glest.org) // This file is part of Glest (www.glest.org)
// //
// Copyright (C) 2001-2008 Marti<74>o Figueroa // Copyright (C) 2001-2008 Marti<74>o Figueroa
// //
// You can redistribute this code and/or modify it under // You can redistribute this code and/or modify it under
// the terms of the GNU General Public License as published // the terms of the GNU General Public License as published
@@ -24,6 +24,7 @@
#include "renderer.h" #include "renderer.h"
#include "game_util.h" #include "game_util.h"
#include "leak_dumper.h" #include "leak_dumper.h"
#include "unit_particle_type.h"
using namespace Shared::Xml; using namespace Shared::Xml;
using namespace Shared::Graphics; using namespace Shared::Graphics;
@@ -76,6 +77,12 @@ UnitType::~UnitType(){
deleteValues(selectionSounds.getSounds().begin(), selectionSounds.getSounds().end()); deleteValues(selectionSounds.getSounds().begin(), selectionSounds.getSounds().end());
deleteValues(commandSounds.getSounds().begin(), commandSounds.getSounds().end()); deleteValues(commandSounds.getSounds().begin(), commandSounds.getSounds().end());
delete [] cellMap; delete [] cellMap;
//remove damageParticleSystemTypes
while(!damageParticleSystemTypes.empty()){
delete damageParticleSystemTypes.back();
damageParticleSystemTypes.pop_back();
}
} }
void UnitType::preLoad(const string &dir){ void UnitType::preLoad(const string &dir){
@@ -208,6 +215,20 @@ void UnitType::load(int id,const string &dir, const TechTree *techTree, const Fa
throw runtime_error("Unknown property: " + propertyName); throw runtime_error("Unknown property: " + propertyName);
} }
} }
//damage-particles
if(parametersNode->hasChild("damage-particles")){
const XmlNode *particleNode= parametersNode->getChild("damage-particles");
bool particleEnabled= particleNode->getAttribute("value")->getBoolValue();
if(particleEnabled){
for(int i=0; i<particleNode->getChildCount(); ++i){
const XmlNode *particleFileNode= particleNode->getChild("particle-file", i);
string path= particleFileNode->getAttribute("path")->getRestrictedValue();
UnitParticleSystemType *unitParticleSystemType= new UnitParticleSystemType();
unitParticleSystemType->load(dir, dir + "/" + path);
damageParticleSystemTypes.push_back(unitParticleSystemType);
}
}
}
//light //light
const XmlNode *lightNode= parametersNode->getChild("light"); const XmlNode *lightNode= parametersNode->getChild("light");

View File

@@ -1,7 +1,7 @@
// ============================================================== // ==============================================================
// This file is part of Glest (www.glest.org) // This file is part of Glest (www.glest.org)
// //
// Copyright (C) 2001-2008 Marti<74>o Figueroa // Copyright (C) 2001-2008 Marti<74>o Figueroa
// //
// You can redistribute this code and/or modify it under // You can redistribute this code and/or modify it under
// the terms of the GNU General Public License as published // the terms of the GNU General Public License as published
@@ -25,6 +25,7 @@ using Shared::Util::Checksum;
class UpgradeType; class UpgradeType;
class UnitType; class UnitType;
class UnitParticleSystemType;
class ResourceType; class ResourceType;
class TechTree; class TechTree;
class FactionType; class FactionType;
@@ -58,6 +59,8 @@ enum UnitClass{
ucBuilding ucBuilding
}; };
typedef list<UnitParticleSystemType*> DamageParticleSystemTypes;
class UnitType: public ProducibleType{ class UnitType: public ProducibleType{
public: public:
enum Property{ enum Property{
@@ -68,7 +71,7 @@ public:
}; };
static const char *propertyNames[]; static const char *propertyNames[];
DamageParticleSystemTypes damageParticleSystemTypes;
private: private:
typedef vector<SkillType*> SkillTypes; typedef vector<SkillType*> SkillTypes;
typedef vector<CommandType*> CommandTypes; typedef vector<CommandType*> CommandTypes;