~ubuntu-branches/ubuntu/maverick/lordsawar/maverick

« back to all changes in this revision

Viewing changes to src/army.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Barry deFreese
  • Date: 2010-04-10 09:29:33 UTC
  • mfrom: (1.1.9 upstream) (5.1.5 sid)
  • Revision ID: james.westby@ubuntu.com-20100410092933-23uq4dxig30kmtcw
Tags: 0.1.8-1
* New upstream release.
* Add misc:Depends for -data package.
* Bump Standards Version to 3.8.4. (No changes needed).

Show diffs side-by-side

added added

removed removed

Lines of Context:
47
47
     d_max_moves_multiplier(a.d_max_moves_multiplier),
48
48
     d_max_moves_rest_bonus(a.d_max_moves_rest_bonus),
49
49
     d_ship(a.d_ship), d_hp(a.d_hp), d_moves(a.d_moves), d_xp(a.d_xp),
50
 
     d_level(a.d_level), d_grouped(a.d_grouped),
51
 
     d_battles_number(a.d_battles_number), d_number_hashit(a.d_number_hashit),
 
50
     d_level(a.d_level), d_battles_number(a.d_battles_number), 
 
51
     d_number_hashit(a.d_number_hashit), 
52
52
     d_number_hasbeenhit(a.d_number_hasbeenhit), 
53
53
     d_visitedTemples(a.d_visitedTemples)
54
54
{
61
61
    d_type_id(a.getTypeId()), d_armyset(a.getArmyset()), 
62
62
    d_max_hp(2), d_max_moves_multiplier(1), d_max_moves_rest_bonus(0),
63
63
    d_ship(false), d_hp(2), d_moves(a.getMaxMoves()), d_xp(0), d_level(0),
64
 
    d_grouped(false), d_battles_number(0), d_number_hashit(0), 
65
 
    d_number_hasbeenhit(0)
 
64
    d_battles_number(0), d_number_hashit(0), d_number_hasbeenhit(0)
66
65
{
67
66
  for(int i = 0; i < 3; i++)
68
67
    d_medal_bonus[i] = 0;
74
73
    d_type_id(a.getTypeId()), d_armyset(a.getArmyset()), 
75
74
    d_max_hp(2), d_max_moves_multiplier(1), d_max_moves_rest_bonus(0),
76
75
    d_ship(false), d_hp(2), d_moves(a.getMaxMoves()), d_xp(0), d_level(0),
77
 
    d_grouped(false), d_battles_number(0), d_number_hashit(0), 
78
 
    d_number_hasbeenhit(0)
 
76
    d_battles_number(0), d_number_hashit(0), d_number_hasbeenhit(0)
79
77
{
80
78
  for(int i = 0; i < 3; i++)
81
79
    d_medal_bonus[i] = 0;
87
85
    d_type_id(a.getTypeId()), d_armyset(a.getArmyset()), 
88
86
    d_max_hp(2), d_max_moves_multiplier(1), d_max_moves_rest_bonus(0),
89
87
    d_ship(false), d_hp(2), d_moves(a.getMaxMoves()), d_xp(0), d_level(0),
90
 
    d_grouped(false), d_battles_number(0), d_number_hashit(0), 
91
 
    d_number_hasbeenhit(0)
 
88
    d_battles_number(0), d_number_hashit(0), d_number_hasbeenhit(0)
92
89
{
93
90
  for(int i = 0; i < 3; i++)
94
91
    d_medal_bonus[i] = 0;
110
107
    d_type_id(a.getTypeId()), d_armyset(a.getArmyset()), 
111
108
    d_max_hp(2), d_max_moves_multiplier(1), d_max_moves_rest_bonus(0),
112
109
    d_ship(false), d_hp(2), d_moves(a.getMaxMoves()), d_xp(0), d_level(0),
113
 
    d_grouped(false), d_battles_number(0), d_number_hashit(0), 
114
 
    d_number_hasbeenhit(0)
 
110
    d_battles_number(0), d_number_hashit(0), d_number_hasbeenhit(0)
115
111
{
116
112
  for(int i = 0; i < 3; i++)
117
113
    d_medal_bonus[i] = 0;
122
118
  :ArmyBase(), UniquelyIdentified(), Ownable((Player *)0),
123
119
    d_type_id(0), d_armyset(0), d_max_hp(2), d_max_moves_multiplier(1), 
124
120
    d_max_moves_rest_bonus(0), d_ship(false), d_hp(2), d_moves(0), d_xp(0),
125
 
    d_level(0), d_grouped(false), d_battles_number(0), d_number_hashit(0), 
126
 
    d_number_hasbeenhit(0)
 
121
    d_level(0), d_battles_number(0), d_number_hashit(0), d_number_hasbeenhit(0)
127
122
{
128
123
  d_visitedTemples.clear();
129
124
}
132
127
  :ArmyBase(helper), UniquelyIdentified(helper), Ownable((XML_Helper*) 0),
133
128
    d_type_id(0), d_armyset(0), d_max_hp(2), d_max_moves_multiplier(1), 
134
129
    d_max_moves_rest_bonus(0), d_ship(false), d_hp(2), d_moves(0), d_xp(0),
135
 
    d_level(0), d_grouped(false), d_battles_number(0), d_number_hashit(0), 
136
 
    d_number_hasbeenhit(0)
 
130
    d_level(0), d_battles_number(0), d_number_hashit(0), d_number_hasbeenhit(0)
137
131
{
138
132
  //d_owner is not read in here.  it is set to the owner of the stack
139
133
  //in stack.cpp
179
173
      if (ival != -1)
180
174
        d_visitedTemples.push_front(ival);
181
175
    }
182
 
  helper->getData(d_grouped, "grouped");
183
176
}
184
177
 
185
178
Army::~Army()
338
331
  d_xp += n;
339
332
}
340
333
 
341
 
bool Army::canGainLevel() const
342
 
{
343
 
  return getXP() >= getXpNeededForNextLevel();
344
 
}
345
 
 
346
 
guint32 Army::getXpNeededForNextLevel() const
347
 
{
348
 
  return xp_per_level * getLevel();
349
 
}
350
 
 
351
 
int Army::computeLevelGain(Stat stat)
352
 
{
353
 
  if (stat == MOVE_BONUS || stat == ARMY_BONUS || stat == SHIP)
354
 
    return -1;
355
 
 
356
 
  switch (stat)
357
 
    {
358
 
    case STRENGTH:
359
 
    case SIGHT:
360
 
      return 1;
361
 
    case HP:
362
 
    case MOVES:
363
 
      return 4;
364
 
    default:
365
 
      return -1;
366
 
    }
367
 
}
368
 
 
369
 
int Army::gainLevel(Stat stat)
370
 
{
371
 
  if (!canGainLevel())
372
 
    return -1;
373
 
 
374
 
  if (stat == MOVE_BONUS || stat == ARMY_BONUS || stat == SHIP ||
375
 
      stat == MOVES_MULTIPLIER)
376
 
    return -1;
377
 
 
378
 
  d_level++;
379
 
  d_xp_value *= 1.2;
380
 
 
381
 
  int delta = computeLevelGain(stat);
382
 
  switch (stat)
383
 
    {
384
 
    case STRENGTH:
385
 
      d_strength += delta;
386
 
      if (d_strength > MAX_ARMY_STRENGTH)
387
 
        d_strength = MAX_ARMY_STRENGTH;
388
 
      break;
389
 
    case HP:
390
 
      d_max_hp += delta;
391
 
      break;
392
 
    case MOVES:
393
 
      d_max_moves += delta;
394
 
      break;
395
 
    case SIGHT:
396
 
      d_sight += delta;
397
 
      break;
398
 
    default:
399
 
      break;
400
 
    }
401
 
 
402
 
  return delta;
403
 
}
404
 
 
405
334
bool Army::save(XML_Helper* helper) const
406
335
{
407
336
  bool retval = true;
443
372
  for(;tit != tend;++tit)
444
373
    temples << (*tit) << " ";
445
374
  retval &= helper->saveData("visited_temples", temples.str());
446
 
  retval &= helper->saveData("grouped", d_grouped);
447
375
 
448
376
  return retval;
449
377
}
467
395
  std::cerr << "type = "    << d_type_id    << std::endl;
468
396
  std::cerr << "level = "   << d_level   << std::endl;
469
397
  std::cerr << "xp = "      << d_xp      << std::endl;
470
 
  std::cerr << "grouped = " << d_grouped << std::endl;
471
398
 
472
399
  std::cerr << "medal[0] = " << d_medal_bonus[0] << std::endl;
473
400
  std::cerr << "medal[1] = " << d_medal_bonus[1] << std::endl;
503
430
}
504
431
 
505
432
//! get the fortify flag for this army
506
 
bool Army::getFortified ()
 
433
bool Army::getFortified () const
507
434
{
508
435
  return (d_army_bonus & Army::FORTIFY) == Army::FORTIFY;
509
436
}
510
437
 
511
 
bool Army::blessedAtTemple(guint32 temple_id)
 
438
bool Army::blessedAtTemple(guint32 temple_id) const
512
439
{
513
440
  unsigned int id = temple_id;
514
441
  if (std::find (d_visitedTemples.begin(), d_visitedTemples.end(), id) ==
545
472
    return "";
546
473
}
547
474
 
 
475
void Army::morph(const ArmyProto *army)
 
476
{
 
477
  setStat(Army::STRENGTH, army->getStrength());
 
478
  setStat(Army::MOVES, army->getMaxMoves());
 
479
  setStat(Army::MOVE_BONUS, army->getMoveBonus());
 
480
  setStat(Army::ARMY_BONUS, army->getArmyBonus());
 
481
  d_type_id = army->getTypeId();
 
482
  d_armyset = army->getArmyset();
 
483
}