use of eidolons.game.battlecraft.rules.combat.attack.Attack in project Eidolons by IDemiurge.
the class ActionAnimation method drawDamageFormulaBonuses.
// TODO include RESISTANCE; add EXTENDED MAP that will update things like
// SIDE_MOD, CLOSE_QUARTERS...
protected boolean drawDamageFormulaBonuses(AnimPhase phase) {
Attack attack = (Attack) phase.getArgs()[0];
Map<MOD_IDENTIFIER, Integer> modsMap = (Map<MOD_IDENTIFIER, Integer>) phase.getArgs()[1];
Map<MOD_IDENTIFIER, Integer> bonusesMap = (Map<MOD_IDENTIFIER, Integer>) phase.getArgs()[2];
drawIconMap(getImageMapFromIds(attack, new ListMaster<MOD_IDENTIFIER>().getStringMap(bonusesMap)));
Integer totalMod = 0;
for (Integer mod : modsMap.values()) {
totalMod += mod;
}
if (totalMod == 0) {
return true;
}
String text = StringMaster.getModifierString(totalMod);
int y = (h - fontHeight) / 2;
drawTextOnTarget(text, font, w, y, getColorForModifier(totalMod));
addMouseItem(false, w, y, FontMaster.getStringWidth(font, text), fontHeight, new MouseItemImpl(MOUSE_ITEM.SUB_PHASE, PHASE_TYPE.DAMAGE_FORMULA_MODS));
return true;
}
use of eidolons.game.battlecraft.rules.combat.attack.Attack in project Eidolons by IDemiurge.
the class FutureBuilder method getDamage.
public static int getDamage(DC_ActiveObj active, Obj targetObj, Effect e, Boolean min_max_normal) {
Integer damage;
Ref ref = active.getOwnerObj().getRef().getCopy();
ref.setTarget(targetObj.getId());
ref.setID(KEYS.ACTIVE, active.getId());
e.setRef(ref);
if (e instanceof DealDamageEffect) {
ref.setAmount(e.getFormula().getInt(ref));
if (((DealDamageEffect) e).getDamageType() != null) {
ref.setValue(KEYS.DAMAGE_TYPE, ((DealDamageEffect) e).getDamageType().toString());
}
damage = DamageCalculator.precalculateDamage(ref);
} else {
Attack attack = ((AttackEffect) e).initAttack();
// attack.setAttacked((DC_HeroObj) targetObj);
Map<String, Integer> _cache = getCache(min_max_normal);
damage = _cache.get(getCacheKey(active, targetObj));
if (damage == null) {
damage = DamageCalculator.precalculateDamage(attack, min_max_normal);
_cache.put(getCacheKey(active, targetObj), damage);
}
}
// active.toBase();
LogMaster.log(1, active.getName() + " on " + targetObj.getName() + " - damage precalculated: " + damage);
return damage;
}
use of eidolons.game.battlecraft.rules.combat.attack.Attack in project Eidolons by IDemiurge.
the class AttackDamageTest method testDamageCalc.
@Test
public void testDamageCalc() {
DC_ActiveObj action = entity.getAttack().getSubActions().get(0);
// setAveraged(true);
action.activateOn(entity2);
Attack attack = DC_AttackMaster.getAttackFromAction(action);
int precalc = DamageCalculator.precalculateDamage(attack);
// DamageFactory.getDamageFromAttack(attack);
printingAsserts.assertEqualAndLog(action.getDamageDealt().getAmount(), precalc, action + " dmg precalc", action + " Damage Dealt");
}
use of eidolons.game.battlecraft.rules.combat.attack.Attack in project Eidolons by IDemiurge.
the class InstantAttackRule method getInterruptChance.
private static int getInterruptChance(INSTANT_ATTACK_TYPE type, DC_ActiveObj attackAction, Unit attacked) {
Unit attacker = attackAction.getOwnerObj();
Attack a = DC_AttackMaster.getAttackFromAction(attackAction);
int damage = a.getDamageDealt();
if (damage == 0) {
return 0;
}
// attackAction.getIntParam(PARAMS.DAMAGE_LAST_DEALT);
int chance = damage * 100 / attacked.getIntParam(PARAMS.TOUGHNESS);
// TODO force vs weight?
// if (InterruptRule.isDamageInterrupting(damage, attacked))
PARAMS stopChanceMod = null;
PARAMS passChanceMod = null;
// ContentManager.getPARAM(valueName)
switch(type) {
case DISENGAGEMENT:
stopChanceMod = PARAMS.STOP_DISENGAGEMENT_CHANCE_MOD;
passChanceMod = PARAMS.PASS_DISENGAGEMENT_CHANCE_MOD;
break;
case ENGAGEMENT:
stopChanceMod = PARAMS.STOP_ENGAGEMENT_CHANCE_MOD;
passChanceMod = PARAMS.PASS_ENGAGEMENT_CHANCE_MOD;
break;
case FLIGHT:
stopChanceMod = PARAMS.STOP_FLIGHT_CHANCE_MOD;
passChanceMod = PARAMS.PASS_FLIGHT_CHANCE_MOD;
break;
case PASSAGE:
stopChanceMod = PARAMS.STOP_PASSAGE_CHANCE_MOD;
passChanceMod = PARAMS.PASS_PASSAGE_CHANCE_MOD;
break;
case STUMBLE:
// also apply Interrupt effect on sta/foc?
return chance;
}
// String tip = "Chance: " + StringMaster.wrapInParenthesis(value)
int stop = chance * 100 * attacker.getIntParam(stopChanceMod);
int pass = chance * 100 * attacked.getIntParam(passChanceMod);
return chance - pass + stop;
}
use of eidolons.game.battlecraft.rules.combat.attack.Attack in project Eidolons by IDemiurge.
the class DC_ImageMaster method getImageDynamic.
// units - by status
public static Image getImageDynamic(MOD_IDENTIFIER mod, Object... values) {
Image image = null;
int value = StringMaster.getInteger((values.length == 0 ? 0 : values[0]).toString());
Attack attack = (Attack) (values.length < 2 ? null : values[1]);
switch(mod) {
case AMMO:
return getProcessedImage(attack.getWeapon().getRef().getObj(KEYS.AMMO).getImage());
case ATK_DEF:
return // ACCURACY
value > 0 ? // ACCURACY
ImageManager.getValueIcon(PARAMS.ATTACK) : ImageManager.getValueIcon(PARAMS.DEFENSE);
case RANDOM:
int n = attack.getWeapon().getIntParam(PARAMS.DIE_SIZE) * attack.getWeapon().getIntParam(PARAMS.DICE) / 2;
Boolean luck = RollMaster.getLuck(value, n);
return ImageManager.getDiceIcon(luck, true);
case WEAPON:
image = attack.getWeapon().getIcon().getImage();
return getProcessedImage(image);
case ACTION:
image = attack.getAction().getIcon().getImage();
return getProcessedImage(image);
case UNIT:
image = attack.getAttacker().getIcon().getImage();
return getProcessedImage(image);
case EXTRA_ATTACK:
if (attack.isAttackOfOpportunity()) {
image = STD_IMAGES.ATTACK_OF_OPPORTUNITY.getImage();
} else if (attack.isCounter()) {
image = STD_IMAGES.COUNTER_ATTACK.getImage();
} else if (attack.isInstant()) {
image = STD_IMAGES.INSTANT_ATTACK.getImage();
}
image = ImageManager.applyBorder(image, BORDER.CIRCLE_GLOW_32);
return image;
case RESISTANCE:
if (value > 0) {
return ImageManager.getValueIcon(PARAMS.RESISTANCE);
}
return ImageManager.getValueIcon(PARAMS.RESISTANCE_PENETRATION);
case ARMOR:
if (value > 0) {
return ImageManager.getValueIcon(PARAMS.ARMOR);
}
return ImageManager.getValueIcon(PARAMS.ARMOR_PENETRATION);
}
return ImageManager.getEmptyEmblem().getImage();
}
Aggregations