40
45
Reward::Reward(XML_Helper *helper)
43
helper->getData(t, "type");
44
d_type = static_cast<Reward::Type>(t);
48
helper->getData(type_str, "type");
49
d_type = rewardTypeFromString(type_str);
45
50
helper->getData(d_name, "name");
48
53
Reward::Reward (const Reward& orig)
49
54
:d_type(orig.d_type), d_name(orig.d_name)
53
bool Reward::save(XML_Helper* helper) const
56
retval &= helper->saveData("type", d_type);
57
retval &= helper->saveData("name", d_name);
103
bool Reward_Gold::save(XML_Helper* helper) const
102
bool Reward_Gold::save(XML_Helper* helper)
105
104
bool retval = true;
106
retval &= helper->openTag("reward");
107
retval &= Reward::save(helper);
105
retval &= helper->openTag(Reward::d_tag);
106
std::string type_str = rewardTypeToString(Reward::Type(d_type));
107
retval &= helper->saveData("type", type_str);
108
retval &= helper->saveData("name", d_name);
108
109
retval &= helper->saveData("gold", d_gold);
109
110
retval &= helper->closeTag();
128
129
d_army = al->getArmy (army_set, army_type);
131
Reward_Allies::Reward_Allies(const Army *army, Uint32 count)
132
Reward_Allies::Reward_Allies(const ArmyProto *army, Uint32 count)
132
133
:Reward(Reward::ALLIES), d_count(count)
134
d_army_type = army->getType();
135
d_army_type = army->getTypeId();
135
136
d_army_set = army->getArmyset();
155
bool Reward_Allies::save(XML_Helper* helper) const
156
bool Reward_Allies::save(XML_Helper* helper)
157
158
bool retval = true;
158
retval &= helper->openTag("reward");
159
retval &= Reward::save(helper);
159
retval &= helper->openTag(Reward::d_tag);
160
std::string type_str = rewardTypeToString(Reward::Type(d_type));
161
retval &= helper->saveData("type", type_str);
162
retval &= helper->saveData("name", d_name);
160
163
retval &= helper->saveData("num_allies", d_count);
161
164
retval &= helper->saveData("ally_type", d_army_type);
162
165
retval &= helper->saveData("ally_armyset", d_army_set);
169
172
return (rand() % MAX_STACK_SIZE) + 1;
172
const Army* Reward_Allies::randomArmyAlly()
175
const ArmyProto* Reward_Allies::randomArmyAlly()
175
178
// list all the army types that can be allies.
176
std::vector<const Army*> allytypes;
179
std::vector<const ArmyProto*> allytypes;
177
180
Armysetlist *al = Armysetlist::getInstance();
178
181
Player *p = Playerlist::getInstance()->getActiveplayer();
180
183
p = Playerlist::getInstance()->getNeutral();
181
184
for (unsigned int j = 0; j < al->getSize(p->getArmyset()); j++)
183
const Army *a = al->getArmy (p->getArmyset(), j);
186
const ArmyProto *a = al->getArmy (p->getArmyset(), j);
184
187
if (a->getAwardable())
185
188
allytypes.push_back(a);
191
194
return allytypes[allytype];
194
bool Reward_Allies::addAllies(Player *p, Vector<int> pos, const Army *army, Uint32 alliesCount)
197
bool Reward_Allies::addAllies(Player *p, Vector<int> pos, const ArmyProto *army, Uint32 alliesCount)
196
199
for (unsigned int i = 0; i < alliesCount; i++)
239
242
Reward_Item::Reward_Item(XML_Helper* helper)
242
helper->registerTag("item", sigc::mem_fun(this, &Reward_Item::loadItem));
245
helper->registerTag(Item::d_tag, sigc::mem_fun(this, &Reward_Item::loadItem));
245
248
Reward_Item::Reward_Item (const Reward_Item& orig)
250
bool Reward_Item::save(XML_Helper* helper) const
253
bool Reward_Item::save(XML_Helper* helper)
252
255
bool retval = true;
253
retval &= helper->openTag("reward");
254
retval &= Reward::save(helper);
256
retval &= helper->openTag(Reward::d_tag);
257
std::string type_str = rewardTypeToString(Reward::Type(d_type));
258
retval &= helper->saveData("type", type_str);
259
retval &= helper->saveData("name", d_name);
255
260
retval &= d_item->save(helper);
256
261
retval &= helper->closeTag();
291
296
:Reward(orig), d_ruin_pos(orig.d_ruin_pos)
294
bool Reward_Ruin::save(XML_Helper* helper) const
299
bool Reward_Ruin::save(XML_Helper* helper)
296
301
bool retval = true;
297
retval &= helper->openTag("reward");
298
retval &= Reward::save(helper);
302
retval &= helper->openTag(Reward::d_tag);
303
std::string type_str = rewardTypeToString(Reward::Type(d_type));
304
retval &= helper->saveData("type", type_str);
305
retval &= helper->saveData("name", d_name);
299
306
retval &= helper->saveData("x", getRuin()->getPos().x);
300
307
retval &= helper->saveData("y", getRuin()->getPos().y);
301
308
retval &= helper->closeTag();
309
316
Rewardlist *rw = Rewardlist::getInstance();
310
317
for (Ruinlist::iterator it = rl->begin(); it != rl->end(); it++)
312
if ((*it).isHidden())
313
if ((*it).getOwner() == NULL ||
314
(*it).getOwner() == Playerlist::getInstance()->getNeutral())
319
if ((*it)->isHidden())
320
if ((*it)->getOwner() == NULL ||
321
(*it)->getOwner() == Playerlist::getInstance()->getNeutral())
316
323
//is it already being pointed to by a reward in the rewardlist?
317
324
bool found = false;
346
353
Reward_Map::Reward_Map(Vector<int> pos, std::string name,
347
354
Uint32 height, Uint32 width)
348
:Reward(Reward::MAP, name), Location(pos), d_height(height), d_width(width)
355
:Reward(Reward::MAP, name)
357
d_sightmap = new SightMap(name, pos, height, width);
360
bool Reward_Map::loadMap(std::string tag, XML_Helper* helper)
362
if (tag == SightMap::d_tag)
364
d_sightmap = new SightMap(helper);
352
372
Reward_Map::Reward_Map(XML_Helper* helper)
353
:Reward(helper), Location(helper)
355
helper->getData(d_height, "height");
356
helper->getData(d_width, "width");
375
helper->registerTag(SightMap::d_tag, sigc::mem_fun(this, &Reward_Map::loadMap));
359
378
Reward_Map::Reward_Map (const Reward_Map& orig)
360
:Reward(orig), Location(orig),
361
d_height(orig.d_height), d_width(orig.d_width)
381
d_sightmap = new SightMap(*orig.d_sightmap);
365
bool Reward_Map::save(XML_Helper* helper) const
384
bool Reward_Map::save(XML_Helper* helper)
367
386
bool retval = true;
368
retval &= helper->openTag("reward");
369
retval &= Reward::save(helper);
370
retval &= helper->saveData("id", getId());
371
retval &= helper->saveData("x", getPos().x);
372
retval &= helper->saveData("y", getPos().y);
373
retval &= helper->saveData("name", getName());
374
retval &= helper->saveData("height", d_height);
375
retval &= helper->saveData("width", d_width);
387
retval &= helper->openTag(Reward::d_tag);
388
std::string type_str = rewardTypeToString(Reward::Type(d_type));
389
retval &= helper->saveData("type", type_str);
390
retval &= helper->saveData("name", d_sightmap->getName());
391
retval &= d_sightmap->save(helper);
376
392
retval &= helper->closeTag();
460
std::string Reward::rewardTypeToString(const Reward::Type type)
465
return "Reward::GOLD";
468
return "Reward::ALLIES";
471
return "Reward::ITEM";
474
return "Reward::RUIN";
477
return "Reward::MAP";
480
return "Reward::GOLD";
483
Reward::Type Reward::rewardTypeFromString(const std::string str)
485
if (str.size() > 0 && isdigit(str.c_str()[0]))
486
return Reward::Type(atoi(str.c_str()));
487
if (str == "Reward::GOLD")
489
else if (str == "Reward::ALLIES")
490
return Reward::ALLIES;
491
else if (str == "Reward::ITEM")
493
else if (str == "Reward::RUIN")
495
else if (str == "Reward::MAP")
500
Reward* Reward::copy(const Reward* r)
505
return (new Reward_Gold(*dynamic_cast<const Reward_Gold*>(r)));
507
return (new Reward_Allies(*dynamic_cast<const Reward_Allies*>(r)));
509
return (new Reward_Item(*dynamic_cast<const Reward_Item*>(r)));
511
return (new Reward_Ruin(*dynamic_cast<const Reward_Ruin*>(r)));
513
return (new Reward_Map(*dynamic_cast<const Reward_Map*>(r)));