Ejemplo n.º 1
0
 MoveInfo getThrowMove(Vec2 enemyDir) {
   if (enemyDir.x != 0 && enemyDir.y != 0 && abs(enemyDir.x) != abs(enemyDir.y))
     return NoMove;
   if (checkFriendlyFire(enemyDir))
     return NoMove;
   Vec2 dir = enemyDir.shorten();
   Item* best = nullptr;
   int damage = 0;
   auto items = creature->getEquipment().getItems([this](Item* item) {
       return !creature->getEquipment().isEquiped(item);});
   for (Item* item : items)
     if (getThrowValue(item) > damage) {
       damage = getThrowValue(item);
       best = item;
     }
   if (best)
     if (auto action = creature->throwItem(best, dir)) {
       creature->setInCombat();
       return {1.0, action };
     }
   return NoMove;
 }
Ejemplo n.º 2
0
 MoveInfo getThrowMove(Vec2 enemyDir) {
   if (enemyDir.x != 0 && enemyDir.y != 0 && abs(enemyDir.x) != abs(enemyDir.y))
     return {0, nullptr};
   if (checkFriendlyFire(enemyDir))
     return {0, nullptr};
   Vec2 dir = enemyDir.shorten();
   Item* best = nullptr;
   int damage = 0;
   auto items = creature->getEquipment().getItems([this](Item* item) {
       return !creature->getEquipment().isEquiped(item);});
   for (Item* item : items)
     if (getThrowValue(item) > damage) {
       damage = getThrowValue(item);
       best = item;
     }
   if (best && creature->canThrowItem(best))
     return {1.0, [this, dir, best]() {
       EventListener::addCombatEvent(creature);
       creature->globalMessage(creature->getTheName() + " throws " + best->getAName());
       creature->throwItem(best, dir);
     }};
   else
     return NoMove;
 }