当前位置: 首页>>代码示例>>C++>>正文


C++ Weapon::getData方法代码示例

本文整理汇总了C++中Weapon::getData方法的典型用法代码示例。如果您正苦于以下问题:C++ Weapon::getData方法的具体用法?C++ Weapon::getData怎么用?C++ Weapon::getData使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Weapon的用法示例。


在下文中一共展示了Weapon::getData方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: melee

void Attack::melee(Actor& attacker, const Weapon& wpn, Actor& defender) {
  MeleeAttackData data(attacker, wpn, defender, eng);

  printMeleeMsgAndPlaySfx(data, wpn);

  if(data.isEtherealDefenderMissed == false) {
    if(data.attackResult >= successSmall && data.isDefenderDodging == false) {
      const bool IS_DEFENDER_KILLED =
        data.curDefender->hit(data.dmg, wpn.getData().meleeDmgType, true);

      if(IS_DEFENDER_KILLED == false) {
        data.curDefender->getPropHandler().tryApplyPropFromWpn(wpn, true);
      }
      if(data.attackResult >= successNormal) {
        if(data.curDefender->getData().canBleed == true) {
          eng.gore->makeBlood(data.curDefender->pos);
        }
      }
      if(IS_DEFENDER_KILLED == false) {
        if(wpn.getData().meleeCausesKnockBack) {
          if(data.attackResult > successSmall) {
            eng.knockBack->tryKnockBack(
              *(data.curDefender), data.attacker->pos, false);
          }
        }
      }
      const ItemData& itemData = wpn.getData();
      if(
        itemData.itemWeight > itemWeight_light &&
        itemData.isIntrinsic == false) {
        Snd snd("", SfxId::endOfSfxId, IgnoreMsgIfOriginSeen::yes,
                data.curDefender->pos, NULL, SndVol::low, AlertsMonsters::yes);
        SndEmit::emitSnd(snd, eng);
      }
    }
  }

  if(data.curDefender == eng.player) {
    if(data.attackResult >= failSmall) {
      dynamic_cast<Monster*>(data.attacker)->isStealth = false;
    }
  } else {
    Monster* const monster = dynamic_cast<Monster*>(data.curDefender);
    monster->awareOfPlayerCounter_ = monster->getData().nrTurnsAwarePlayer;
  }
  eng.gameTime->actorDidAct();
}
开发者ID:jachamp,项目名称:ia,代码行数:47,代码来源:AttackMelee.cpp

示例2: melee

void Attack::melee(Actor& attacker, const Weapon& wpn, Actor& defender) {
  MeleeAttackData data(attacker, wpn, defender, eng);

  printMeleeMessages(data, wpn);
  eng->renderer->drawMapAndInterface();

  if(data.isEtherealDefenderMissed == false) {
    if(data.attackResult >= successSmall && data.isDefenderDodging == false) {
      const bool IS_DEFENDER_KILLED =
        data.currentDefender->hit(data.dmg, wpn.getData().meleeDmgType, true);

      if(IS_DEFENDER_KILLED == false) {
        data.currentDefender->getPropHandler()->tryApplyPropFromWpn(wpn, true);
      }
      if(data.attackResult >= successNormal) {
        if(data.currentDefender->getData()->canBleed == true) {
          eng->gore->makeBlood(data.currentDefender->pos);
        }
      }
      if(IS_DEFENDER_KILLED == false) {
        if(wpn.getData().meleeCausesKnockBack) {
          if(data.attackResult > successSmall) {
            eng->knockBack->tryKnockBack(
              data.currentDefender, data.attacker->pos, false);
          }
        }
      }
      const ItemData& itemData = wpn.getData();
      if(
        itemData.itemWeight > itemWeight_light &&
        itemData.isIntrinsic == false) {
        Sound snd("", endOfSfx, true, data.currentDefender->pos, false, true);
        eng->soundEmitter->emitSound(snd);
      }
    }
  }

  if(data.currentDefender == eng->player) {
    if(data.attackResult >= failSmall) {
      dynamic_cast<Monster*>(data.attacker)->isStealth = false;
    }
  } else {
    Monster* const monster = dynamic_cast<Monster*>(data.currentDefender);
    monster->playerAwarenessCounter = monster->getData()->nrTurnsAwarePlayer;
  }
  eng->gameTime->endTurnOfCurrentActor();
}
开发者ID:blinkkin,项目名称:ia,代码行数:47,代码来源:AttackMelee.cpp

示例3: printMeleeMsgAndPlaySfx

void Attack::printMeleeMsgAndPlaySfx(const MeleeAttackData& data,
                                     const Weapon& wpn) {
  string otherName = "";

  if(data.isDefenderDodging) {
    //----- DEFENDER DODGES --------
    if(data.attacker == eng.player) {
      if(eng.player->isSeeingActor(*data.curDefender, NULL)) {
        otherName = data.curDefender->getNameThe();
      } else {
        otherName = "It ";
      }
      eng.log->addMsg(otherName + " dodges my attack.");
    } else {
      if(eng.player->isSeeingActor(*data.attacker, NULL)) {
        otherName = data.attacker->getNameThe();
      } else {
        otherName = "It";
      }
      eng.log->addMsg("I dodge an attack from " + otherName + ".", clrMsgGood);
    }
  } else if(data.attackResult <= failSmall) {
    //----- BAD AIMING --------
    if(data.attacker == eng.player) {
      if(data.attackResult == failSmall) {
        eng.log->addMsg("I barely miss!");
      } else if(data.attackResult == failNormal) {
        eng.log->addMsg("I miss.");
      } else if(data.attackResult == failBig) {
        eng.log->addMsg("I miss completely.");
      }
      Audio::play(wpn.getData().meleeMissSfx);
    } else {
      if(eng.player->isSeeingActor(*data.attacker, NULL)) {
        otherName = data.attacker->getNameThe();
      } else {
        otherName = "It";
      }
      if(data.attackResult == failSmall) {
        eng.log->addMsg(otherName + " barely misses me!", clrWhite, true);
      } else if(data.attackResult == failNormal) {
        eng.log->addMsg(otherName + " misses me.", clrWhite, true);
      } else if(data.attackResult == failBig) {
        eng.log->addMsg(otherName + " misses me completely.", clrWhite, true);
      }
    }
  } else {
    //----- AIM IS CORRECT -------
    if(data.isEtherealDefenderMissed) {
      //----- ATTACK MISSED DUE TO ETHEREAL TARGET --------
      if(data.attacker == eng.player) {
        if(eng.player->isSeeingActor(*data.curDefender, NULL)) {
          otherName = data.curDefender->getNameThe();
        } else {
          otherName = "It ";
        }
        eng.log->addMsg(
          "My attack passes right through " + otherName + "!");
      } else {
        if(eng.player->isSeeingActor(*data.attacker, NULL)) {
          otherName = data.attacker->getNameThe();
        } else {
          otherName = "It";
        }
        eng.log->addMsg(
          "The attack of " + otherName + " passes right through me!",
          clrMsgGood);
      }
    } else {
      //----- ATTACK CONNECTS WITH DEFENDER --------
      //Determine the relative "size" of the hit
      MeleeHitSize hitSize = MeleeHitSize::small;
      const int MAX_DMG_ROLL = data.dmgRolls * data.dmgSides;
      if(MAX_DMG_ROLL >= 4) {
        if(data.dmgRoll > (MAX_DMG_ROLL * 5) / 6) {
          hitSize = MeleeHitSize::hard;
        } else if(data.dmgRoll >  MAX_DMG_ROLL / 2) {
          hitSize = MeleeHitSize::medium;
        }
      }

      //Punctuation depends on attack strength
      string dmgPunct = ".";
      switch(hitSize) {
        case MeleeHitSize::small:                     break;
        case MeleeHitSize::medium:  dmgPunct = "!";   break;
        case MeleeHitSize::hard:    dmgPunct = "!!!"; break;
      }

      if(data.attacker == eng.player) {
        const string wpnVerb = wpn.getData().meleeAttMsgs.player;

        if(eng.player->isSeeingActor(*data.curDefender, NULL)) {
          otherName = data.curDefender->getNameThe();
        } else {
          otherName = "it";
        }

        if(data.isIntrinsicAttack) {
          const string ATTACK_MOD_STR = data.isWeakAttack ? " feebly" : "";
//.........这里部分代码省略.........
开发者ID:jachamp,项目名称:ia,代码行数:101,代码来源:AttackMelee.cpp

示例4: handleKeyPress


//.........这里部分代码省略.........
//      } else {
//      }
//    }
//    clearEvents();
//    return;
//  }
  //----------------------------------------UNLOAD AMMO FROM GROUND
  else if(d.key_ == 'u') {
    clearLogMessages();
    if(eng->player->deadState == actorDeadState_alive) {
      eng->itemPickup->tryUnloadWeaponOrPickupAmmoFromGround();
    }
    clearEvents();
    return;
  }
  //----------------------------------------AIM/FIRE FIREARM
  else if(d.key_ == 'f') {
    clearLogMessages();
    if(eng->player->deadState == actorDeadState_alive) {

      if(eng->player->getPropHandler()->allowAttackRanged(true)) {

        Item* const item =
          eng->player->getInventory()->getItemInSlot(slot_wielded);

        Weapon* wpn = NULL;

        if(item == NULL) {
          eng->log->addMsg("I am not wielding a weapon.");
        } else {
          wpn = dynamic_cast<Weapon*>(item);
          if(
            wpn->nrAmmoLoaded >= 1 ||
            wpn->getData().rangedHasInfiniteAmmo
          ) {
            eng->marker->run(markerTask_aimRangedWeapon, NULL);
          } else if(eng->config->useRangedWpnAutoReload) {
            eng->reload->reloadWieldedWpn(*(eng->player));
          } else {
            eng->log->addMsg("There is no ammo loaded.");
          }
        }
      }
    }
    clearEvents();
    return;
  }
  //----------------------------------------GET
  else if(d.key_ == 'g') {
    clearLogMessages();
    if(eng->player->deadState == actorDeadState_alive) {
      Item* const itemAtPlayer = eng->map->items[eng->player->pos.x][eng->player->pos.y];
      if(itemAtPlayer != NULL) {
        if(itemAtPlayer->getData().id == item_trapezohedron) {
          eng->dungeonMaster->winGame();
          *quitToMainMenu_ = true;
        }
      }
      if(*quitToMainMenu_ == false) {
        eng->itemPickup->tryPick();
      }
    }
    clearEvents();
    return;
  }
  //----------------------------------------SLOTS SCREEN
开发者ID:blinkkin,项目名称:ia,代码行数:67,代码来源:Input.cpp

示例5: printMeleeMessages

void Attack::printMeleeMessages(const MeleeAttackData& data,
                                const Weapon& wpn) {
  string otherName = "";


  if(data.isDefenderDodging) {
    //----- DEFENDER DODGES --------
    if(data.attacker == eng->player) {
      if(eng->player->checkIfSeeActor(*data.currentDefender, NULL)) {
        otherName = data.currentDefender->getNameThe();
      } else {
        otherName = "It ";
      }
      eng->log->addMsg(otherName + " dodges my attack.");
    } else {
      if(eng->player->checkIfSeeActor(*data.attacker, NULL)) {
        otherName = data.attacker->getNameThe();
      } else {
        otherName = "It";
      }
      eng->log->addMsg(
        "I dodge an attack from " + otherName + ".", clrMessageGood);
    }
  } else if(data.attackResult <= failSmall) {
    //----- BAD AIMING --------
    if(data.attacker == eng->player) {
      if(data.attackResult == failSmall) {
        eng->log->addMsg("I barely miss!");
      } else if(data.attackResult == failNormal) {
        eng->log->addMsg("I miss.");
      } else if(data.attackResult == failBig) {
        eng->log->addMsg("I miss completely.");
      }
    } else {
      if(eng->player->checkIfSeeActor(*data.attacker, NULL)) {
        otherName = data.attacker->getNameThe();
      } else {
        otherName = "It";
      }
      if(data.attackResult == failSmall) {
        eng->log->addMsg(otherName + " barely misses me!", clrWhite, true);
      } else if(data.attackResult == failNormal) {
        eng->log->addMsg(otherName + " misses me.", clrWhite, true);
      } else if(data.attackResult == failBig) {
        eng->log->addMsg(otherName + " misses me completely.", clrWhite, true);
      }
    }
  } else {
    //----- AIM IS CORRECT -------
    if(data.isEtherealDefenderMissed) {
      //----- ATTACK MISSED DUE TO ETHEREAL TARGET --------
      if(data.attacker == eng->player) {
        if(eng->player->checkIfSeeActor(*data.currentDefender, NULL)) {
          otherName = data.currentDefender->getNameThe();
        } else {
          otherName = "It ";
        }
        eng->log->addMsg(
          "My attack passes right throuth " + otherName + "!");
      } else {
        if(eng->player->checkIfSeeActor(*data.attacker, NULL)) {
          otherName = data.attacker->getNameThe();
        } else {
          otherName = "It";
        }
        eng->log->addMsg(
          "The attack of " + otherName + " passes right through me!",
          clrMessageGood);
      }
    } else {
      //----- ATTACK CONNECTS WITH DEFENDER --------
      //Punctuation or exclamation marks depending on attack strength
      string dmgPunct = ".";
      const int MAX_DMG_ROLL = data.dmgRolls * data.dmgSides;
      if(MAX_DMG_ROLL >= 4) {
        dmgPunct =
          data.dmgRoll > MAX_DMG_ROLL * 5 / 6 ? "!!!" :
          data.dmgRoll > MAX_DMG_ROLL / 2 ? "!" :
          dmgPunct;
      }

      if(data.attacker == eng->player) {
        const string wpnVerb = wpn.getData().meleeAttackMessages.player;

        if(eng->player->checkIfSeeActor(*data.currentDefender, NULL)) {
          otherName = data.currentDefender->getNameThe();
        } else {
          otherName = "it";
        }

        if(data.isIntrinsicAttack) {
          const string ATTACK_MOD_STR = data.isWeakAttack ? " feebly" : "";
          eng->log->addMsg(
            "I " + wpnVerb + " " + otherName + ATTACK_MOD_STR + dmgPunct,
            clrMessageGood);
        } else {
          const string ATTACK_MOD_STR =
            data.isWeakAttack  ? "feebly "    :
            data.isBackstab    ? "covertly "  : "";
          const SDL_Color clr =
//.........这里部分代码省略.........
开发者ID:blinkkin,项目名称:ia,代码行数:101,代码来源:AttackMelee.cpp


注:本文中的Weapon::getData方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。