#ifndef _MTGPACK_H_ #define _MTGPACK_H_ class ShopBooster; class MTGPackEntry { public: virtual ~MTGPackEntry() { } ; virtual int addCard(WSrcCards * pool, MTGDeck * to) = 0; int copies; }; class MTGPackEntryRandom: public MTGPackEntry { public: MTGPackEntryRandom() { filter = ""; copies = 1; } ; MTGPackEntryRandom(string f, int c = 1) { filter = f; copies = c; } ; int addCard(WSrcCards * pool, MTGDeck * to); string filter; }; class MTGPackEntrySpecific: public MTGPackEntry { public: int addCard(WSrcCards * pool, MTGDeck * to); MTGCard * card; }; class MTGPackEntryNothing: public MTGPackEntry { public: int addCard(WSrcCards *, MTGDeck *) { return 0; } ; }; class MTGPackSlot { public: ~MTGPackSlot(); int add(WSrcCards * ocean, MTGDeck * to, int carryover); void addEntry(MTGPackEntry*item); int copies; string pool; vector entries; }; class MTGPack { public: friend class MTGPacks; friend class ShopBooster; friend class MTGSetInfo; bool meetsRequirements(); //Check if pool contains locked cards. bool isUnlocked(); bool isValid() { return bValid; } ; void load(string filename); int assemblePack(MTGDeck * to); MTGPack() { bValid = false; unlockStatus = 0; price = Constants::PRICE_BOOSTER; } ; MTGPack(string s) { bValid = false; load(s); unlockStatus = 0; } ; ~MTGPack(); string getName(); string getSort() { return sort; } ; int getPrice() { return price; } ; static WSrcCards * getPool(string poolstr); protected: void countCards(); string name; //Name of the pack. string type; //"Booster", "Deck", "Whatever" string pool; //The starting pool. string sort; //The sorting method. string check; //Unlock requirements. string desc; //Big card description. bool bValid; int unlockStatus; int price; //Base price. int minCards, maxCards; vector slotss; }; class MTGPacks { public: ~MTGPacks(); MTGPack * randomPack(int key = 0); void loadAll(); int size() { return (int) packs.size(); } ; void refreshUnlocked(); static MTGPack * getDefault(); private: static MTGPack defaultBooster; vector packs; }; #endif