本文整理汇总了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();
}
示例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();
}
示例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" : "";
//.........这里部分代码省略.........
示例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
示例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 =
//.........这里部分代码省略.........