00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00030 #if !defined(Stack_h)
00031 #define Stack_h
00032
00033 #include <deque>
00034 using namespace std;
00035
00036 class Ship;
00037
00042 class Stack {
00043 public:
00044 Stack() : mShip(NULL), mShips(0), mDamage(0), mDamaged(0), mFleetIn(NULL), bIsBase(false), bRandInit(0) {}
00045 ~Stack();
00046 bool ParseNode(const TiXmlNode * node, Player * owner);
00047 void WriteNode(TiXmlNode * node, const Player * owner, const Player * viewer) const;
00048 void WriteNode(TiXmlNode * node) const;
00049
00050 const Ship * GetDesign() const { return mShip; }
00051 long GetCount() const { return mShips; }
00052 long GetDamaged() const { return mDamaged; }
00053 int GetDamage() const { return mDamage; }
00054
00055 void SetDesign(const Ship * s) { mShip = s; }
00056 void SetCount(long count) { mShips = count; }
00057 void SetDamaged(long d) { mDamaged = d; }
00058 void SetDamage(int d) { mDamage = d; }
00059
00060 long DamageAllShips(long damage);
00061 bool KillShips(long count, bool salvage);
00062
00063 void AddFromFleet(long fleet, long ships, long damaged);
00064 const Fleet * GetFleetIn() const { return mFleetIn; }
00065 Fleet * GetFleetIn() { return mFleetIn; }
00066 void SetFleetIn(Fleet * fin) { mFleetIn = fin; }
00067 bool operator ==(const Stack& s) const {return mShip == s.GetDesign() && mFleetIn == s.GetFleetIn();}
00068
00069 private:
00070 const Ship * mShip;
00071 long mShips;
00072 long mDamage;
00073 long mDamaged;
00074 Fleet * mFleetIn;
00075
00076 class Origin {
00077 public:
00078 long fleet;
00079 long ships;
00080 long damaged;
00081 };
00082
00083 deque<Origin> mOrigins;
00084
00085 friend class Fleet;
00086 friend class Battle;
00087 friend class Bombing;
00088
00089
00090 long bArmor;
00091 long bShield;
00092 int bSpeed;
00093 long bx, by;
00094 long bMass;
00095 long bShips;
00096 bool bIsBase;
00097 long bRandInit;
00098 long bPlan;
00099 long bFlee;
00100 const Stack * bMAT;
00101
00102 bool IsBase() const { return bIsBase; }
00103 void SetupShips(const Player * owner, long cargo);
00104 void SetupBase(const Planet * planet);
00105 long DP() const { return bArmor + bShield; }
00106
00107 friend inline bool StackLighter(Stack * s1, Stack * s2)
00108 {
00109 if (s1->bMass < s2->bMass)
00110 return true;
00111 else if (s1->bMass == s2->bMass)
00112 return Random(2) == 0 ? true : false;
00113 else
00114 return false;
00115 }
00116 };
00117
00118 #endif // !defined(Stack_h)