本文整理汇总了C++中SavedBattleGame::getTile方法的典型用法代码示例。如果您正苦于以下问题:C++ SavedBattleGame::getTile方法的具体用法?C++ SavedBattleGame::getTile怎么用?C++ SavedBattleGame::getTile使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SavedBattleGame
的用法示例。
在下文中一共展示了SavedBattleGame::getTile方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: explode
/**
* Calculates the effects of the explosion.
*/
void ExplosionBState::explode()
{
bool terrainExplosion = false;
SavedBattleGame *save = _parent->getSave();
// last minute adjustment: determine if we actually
if (_hit)
{
save->getBattleGame()->getCurrentAction()->type = BA_NONE;
BattleUnit *targetUnit = save->getTile(_center / Position(16, 16, 24))->getUnit();
if (_unit && !_unit->isOut())
{
_unit->aim(false);
_unit->setCache(0);
}
if (!RNG::percent(_unit->getFiringAccuracy(BA_HIT, _item)))
{
_parent->getMap()->cacheUnits();
_parent->popState();
return;
}
else if (targetUnit && targetUnit->getOriginalFaction() == FACTION_HOSTILE &&
_unit->getOriginalFaction() == FACTION_PLAYER)
{
_unit->addMeleeExp();
}
if (_item->getRules()->getMeleeHitSound() != -1)
{
_parent->getResourcePack()->getSoundByDepth(_parent->getDepth(), _item->getRules()->getMeleeHitSound())->play();
}
}
// after the animation is done, the real explosion/hit takes place
if (_item)
{
if (!_unit && _item->getPreviousOwner())
{
_unit = _item->getPreviousOwner();
}
if (_areaOfEffect)
{
save->getTileEngine()->explode(_center, _power, _item->getRules()->getDamageType(), _item->getRules()->getExplosionRadius(), _unit);
}
else
{
ItemDamageType type = _item->getRules()->getDamageType();
if (_pistolWhip)
{
type = DT_STUN;
}
BattleUnit *victim = save->getTileEngine()->hit(_center, _power, type, _unit);
// check if this unit turns others into zombies
if (!_item->getRules()->getZombieUnit().empty()
&& victim
&& victim->getArmor()->getSize() == 1
&& victim->getSpawnUnit().empty()
&& victim->getOriginalFaction() != FACTION_HOSTILE)
{
// converts the victim to a zombie on death
victim->setSpecialAbility(SPECAB_RESPAWN);
victim->setSpawnUnit(_item->getRules()->getZombieUnit());
}
}
}
if (_tile)
{
save->getTileEngine()->explode(_center, _power, DT_HE, _power/10);
terrainExplosion = true;
}
if (!_tile && !_item)
{
int radius = 6;
// explosion not caused by terrain or an item, must be by a unit (cyberdisc)
if (_unit && _unit->getSpecialAbility() == SPECAB_EXPLODEONDEATH)
{
radius = _parent->getRuleset()->getItem(_unit->getArmor()->getCorpseGeoscape())->getExplosionRadius();
}
save->getTileEngine()->explode(_center, _power, DT_HE, radius);
terrainExplosion = true;
}
// now check for new casualties
_parent->checkForCasualties(_item, _unit, false, terrainExplosion);
// if this explosion was caused by a unit shooting, now it's the time to put the gun down
if (_unit && !_unit->isOut() && _lowerWeapon)
{
_unit->aim(false);
_unit->setCache(0);
}
_parent->getMap()->cacheUnits();
_parent->popState();
// check for terrain explosions
Tile *t = save->getTileEngine()->checkForTerrainExplosions();
if (t)
{
Position p = Position(t->getPosition().x * 16, t->getPosition().y * 16, t->getPosition().z * 24);
//.........这里部分代码省略.........
示例2: explode
/**
* Calculates the effects of the explosion.
*/
void ExplosionBState::explode()
{
bool terrainExplosion = false;
SavedBattleGame *save = _parent->getSave();
// last minute adjustment: determine if we actually
if (_hit)
{
if (_attack.attacker && !_attack.attacker->isOut())
{
_attack.attacker->aim(false);
}
if (_power <= 0)
{
_parent->popState();
return;
}
int sound = _attack.weapon_item->getRules()->getMeleeHitSound();
if (_attack.weapon_item != _attack.damage_item)
{
// melee weapon with ammo
optValue(sound, _attack.damage_item->getRules()->getMeleeHitSound());
}
_parent->playSound(sound, _center.toTile());
}
bool range = !(_hit || (_attack.weapon_item && _attack.weapon_item->getRules()->getBattleType() == BT_PSIAMP));
// after the animation is done, the real explosion/hit takes place
/*if (_item)
{
if (!_unit && _item->getPreviousOwner())
{
_unit = _item->getPreviousOwner();
}*/
if (_areaOfEffect)
{
save->getTileEngine()->explode(_attack, _center, _power, _damageType, _radius, range);
}
else //if (!_cosmetic)
{
if (_damageType->ResistType == DT_TELEPORT)
{
Tile *destination = _tile ? _tile : save->getTile(Position(_center.x / 16, _center.y / 16, _center.z / 24));
if (_attack.attacker && destination && !destination->getUnit())
{
save->getTile(_attack.attacker->getPosition())->setUnit(0);
const Position& oldPosition = _attack.attacker->getPosition();
_attack.attacker->setPosition(destination->getPosition());
destination->setUnit(_attack.attacker);
save->getTileEngine()->calculateFOV(oldPosition);
save->getTileEngine()->calculateFOV(destination->getPosition());
}
}
else
{
BattleUnit *victim = save->getTileEngine()->hit(_attack, _center, _power, _action.type, _damageType, range);
const RuleItem *hitItem = _attack.damage_item->getRules();
// check if this unit turns others into zombies
if (!hitItem->getZombieUnit().empty()
&& RNG::percent(hitItem->getSpecialChance())
&& victim
&& victim->getArmor()->getZombiImmune() == false
&& victim->getSpawnUnit().empty()
&& victim->getOriginalFaction() != FACTION_HOSTILE)
{
// converts the victim to a zombie on death
victim->setRespawn(true);
victim->setSpawnUnit(hitItem->getZombieUnit());
}
}
}
//}
if (_tile)
{
/*ItemDamageType DT;
switch (_tile->getExplosiveType())
{
case 0:
DT = DT_HE;
break;
case 5:
DT = DT_IN;
break;
case 6:
DT = DT_STUN;
break;
default:
DT = DT_SMOKE;
break;
}
//.........这里部分代码省略.........