1 // Copyright (C) 2007, 2008 Ben Asselstine
3 // This program is free software; you can redistribute it and/or modify
4 // it under the terms of the GNU General Public License as published by
5 // the Free Software Foundation; either version 3 of the License, or
6 // (at your option) any later version.
8 // This program is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 // GNU Library General Public License for more details.
13 // You should have received a copy of the GNU General Public License
14 // along with this program; if not, write to the Free Software
15 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 #include <sigc++/functors/mem_fun.h>
21 #include "rewardlist.h"
23 #include "xmlhelper.h"
25 std::string Rewardlist::d_tag = "rewardlist";
29 //#define debug(x) {cerr<<__FILE__<<": "<<__LINE__<<": "<<x<<endl<<flush;}
32 Rewardlist* Rewardlist::s_instance = 0;
34 Rewardlist* Rewardlist::getInstance()
37 s_instance = new Rewardlist();
42 Rewardlist* Rewardlist::getInstance(XML_Helper* helper)
47 s_instance = new Rewardlist(helper);
51 void Rewardlist::deleteInstance()
59 void Rewardlist::deleteReward(Reward* s)
61 for (const_iterator it = this->begin(); it != this->end(); it++)
69 Rewardlist::Rewardlist()
73 Rewardlist::Rewardlist(Rewardlist *rewardlist)
75 for (iterator it = rewardlist->begin(); it != rewardlist->end(); it++)
81 Rewardlist::Rewardlist(XML_Helper* helper)
83 helper->registerTag(Reward::d_tag, sigc::mem_fun((*this), &Rewardlist::load));
84 load(Rewardlist::d_tag, helper);
87 Rewardlist::~Rewardlist()
91 void Rewardlist::flClear()
93 for (iterator it = begin(); it != end(); it++)
101 Rewardlist::iterator Rewardlist::flErase(iterator object)
104 return erase(object);
107 bool Rewardlist::flRemove(Reward* object)
109 debug("removing reward with id " << object->getId() << endl);
110 iterator rewardit = find(begin(), end(), object);
111 if (rewardit != end())
120 bool Rewardlist::save(XML_Helper* helper) const
124 retval &= helper->openTag(Rewardlist::d_tag);
127 for (const_iterator it = begin(); it != end(); it++)
129 if ((*it)->getType() == Reward::GOLD)
130 static_cast<Reward_Gold*>(*it)->save(helper);
131 else if ((*it)->getType() == Reward::ALLIES)
132 static_cast<Reward_Allies*>(*it)->save(helper);
133 else if ((*it)->getType() == Reward::ITEM)
134 static_cast<Reward_Item*>(*it)->save(helper);
135 else if ((*it)->getType() == Reward::RUIN)
136 static_cast<Reward_Ruin*>(*it)->save(helper);
137 else if ((*it)->getType() == Reward::MAP)
138 static_cast<Reward_Map*>(*it)->save(helper);
141 retval &= helper->closeTag();
146 bool Rewardlist::load(string tag, XML_Helper* helper)
148 if (tag == Reward::d_tag)
150 Reward *s = Reward::handle_load(helper);
158 Reward *Rewardlist::popRandomReward(Reward::Type type)
160 Rewardlist::iterator iter;
161 std::vector<Reward*> rewards;
162 for (iter = begin(); iter != end(); iter++)
164 if ((*iter)->getType() == type)
165 rewards.push_back(*iter);
169 Reward *newReward = rewards[rand() % rewards.size()];
176 Reward *Rewardlist::popRandomItemReward()
178 return popRandomReward(Reward::ITEM);
181 Reward *Rewardlist::popRandomMapReward()
183 return popRandomReward(Reward::MAP);
186 Reward *Rewardlist::popRandomRuinReward()
188 return popRandomReward(Reward::RUIN);