use of main.elements.targeting.FixedTargeting in project Eidolons by IDemiurge.
the class AuraEffect method init.
private void init() {
event_type = (continuous) ? STANDARD_EVENT_TYPE.UNIT_MOVED : STANDARD_EVENT_TYPE.UNIT_TURN_STARTED;
Targeting t = new FixedTargeting(KEYS.SOURCE);
Conditions conditions = new Conditions();
if (additionalConditions != null) {
conditions.add(additionalConditions);
}
if (!continuous) {
conditions.add(ConditionMaster.getSelfTriggerCondition());
} else {
// Condition retainCondition = ConditionMaster
// .getDistanceCondition("TARGET", "SOURCE", radius);
// effect = new AddBuffEffect(retainCondition, null, effect);
// conditions.add(ConditionMaster
// .getDistanceCondition("EVENT_SOURCE", "SOURCE", radius));
}
ZoneEffect zone_effect = new ZoneEffect(effect, radius, onlyEnemiesOrAllies, notSelf);
ActiveAbility ability = new ActiveAbility(t, zone_effect);
trigger = new AddTriggerEffect(event_type, conditions, ability);
}
use of main.elements.targeting.FixedTargeting in project Eidolons by IDemiurge.
the class CadenceRule method checkDualAttackCadence.
public static void checkDualAttackCadence(DC_UnitAction action, Unit unit) {
if (action.getActionGroup() != ActionEnums.ACTION_TYPE_GROUPS.ATTACK) {
return;
}
boolean singleCadence = checkSingleWeaponCadence(unit, action);
if (!UnitAnalyzer.checkDualWielding(unit) && !UnitAnalyzer.checkDualNaturalWeapons(unit) && !singleCadence) // || checkSingleCadence(action)
{
return;
}
Boolean offhand = null;
if (action.checkProperty(PROP, MAIN_HAND)) {
offhand = false;
} else if (action.checkProperty(PROP, OFF_HAND)) {
offhand = true;
} else if (singleCadence) // offhand = !action.isOffhand();
{
offhand = false;
}
if (offhand == null) {
return;
}
Ref ref = new Ref(unit.getGame(), unit.getId());
DC_WeaponObj weapon = unit.getActiveWeapon(offhand);
List<Obj> targets = new ArrayList<>();
if (unit.getWeapon(!offhand) != null) {
targets.add(unit.getWeapon(!offhand));
}
if (unit.getNaturalWeapon(!offhand) != null) {
targets.add(unit.getNaturalWeapon(!offhand));
}
GroupImpl group = new GroupImpl(targets);
LogMaster.log(LogMaster.RULES_DEBUG, "Cadence Rule applies to " + group);
ref.setGroup(group);
if (checkFocusBonusApplies(unit, action, singleCadence)) {
Integer amount = action.getOwnerObj().getIntParam(PARAMS.CADENCE_FOCUS_BOOST);
amount += action.getIntParam(PARAMS.CADENCE_FOCUS_BOOST);
amount += action.getOwnerObj().getActiveWeapon(!offhand).getIntParam(PARAMS.CADENCE_FOCUS_BOOST);
action.getOwnerObj().modifyParameter(PARAMS.C_FOCUS, amount, 100);
}
// INIT COST CADENCE EFFECTS
Effects effects = new Effects();
String cadence = unit.getParam(PARAMS.CADENCE_AP_MOD);
if (cadence.isEmpty()) {
cadence = DC_Formulas.DEFAULT_CADENCE_AP_MOD + "";
}
ModifyValueEffect valueEffect = new ModifyValueEffect(PARAMS.ATTACK_AP_PENALTY, MOD.MODIFY_BY_CONST, cadence);
valueEffect.appendFormulaByMod(100 + weapon.getIntParam(PARAMS.CADENCE_BONUS));
effects.add(valueEffect);
cadence = unit.getParam(PARAMS.CADENCE_STA_MOD);
if (cadence.isEmpty()) {
cadence = DC_Formulas.DEFAULT_CADENCE_STA_MOD + "";
}
valueEffect = new ModifyValueEffect(PARAMS.ATTACK_STA_PENALTY, MOD.MODIFY_BY_CONST, cadence);
valueEffect.appendFormulaByMod(100 + weapon.getIntParam(PARAMS.CADENCE_BONUS));
effects.add(valueEffect);
if (unit.getIntParam(PARAMS.CADENCE_DAMAGE_MOD) > 0) {
effects.add(new ModifyValueEffect(PARAMS.DAMAGE_MOD, MOD.MODIFY_BY_CONST, unit.getParam(PARAMS.CADENCE_DAMAGE_MOD)));
}
if (unit.getIntParam(PARAMS.CADENCE_ATTACK_MOD) > 0) {
effects.add(new ModifyValueEffect(PARAMS.ATTACK_MOD, MOD.MODIFY_BY_CONST, unit.getParam(PARAMS.CADENCE_ATTACK_MOD)));
}
String buffTypeName = (!offhand) ? buffTypeNameOffHand : buffTypeNameMainHand;
// ADD REMOVE TRIGGER
int percentage = 100 - unit.getIntParam(PARAMS.CADENCE_RETAINMENT_CHANCE) - action.getIntParam(PARAMS.CADENCE_RETAINMENT_CHANCE) - weapon.getIntParam(PARAMS.CADENCE_RETAINMENT_CHANCE);
Conditions conditions = new Conditions(new RefCondition(KEYS.EVENT_SOURCE, KEYS.SOURCE));
if (percentage != 100) {
conditions.add(new ChanceCondition(new Formula("" + percentage)));
}
effects.add(new AddTriggerEffect(STANDARD_EVENT_TYPE.UNIT_ACTION_COMPLETE, conditions, new ActiveAbility(new FixedTargeting(KEYS.BASIS), new RemoveBuffEffect(buffTypeName))));
// effect = new AddBuffEffect(buffTypeName, effects, DURATION);
// Condition condition = new StringComparison(StringMaster.getValueRef(KEYS.MATCH, PROP),
// (offhand) ? MAIN_HAND : OFF_HAND, false);
// retain condition - hero hasBuff()
// add remove trigger on attack? either off/main hand, so there is no
// stacking...
// linked buffs?
// effect.setIrresistible(false);
AddBuffEffect addBuffEffect = new AddBuffEffect(buffTypeName, // new TemplateAutoTargeting(AUTO_TARGETING_TEMPLATES.ACTIONS, condition),
effects, DURATION);
// preCheck perk
addBuffEffect.addEffect(new // what about
AddTriggerEffect(// counters/AoO?
STANDARD_EVENT_TYPE.UNIT_ACTION_COMPLETE, new RefCondition(KEYS.EVENT_SOURCE, KEYS.SOURCE), new ActiveAbility(new FixedTargeting(KEYS.SOURCE), new RemoveBuffEffect(buffTypeName))));
Integer param = unit.getIntParam(PARAMS.CADENCE_DEFENSE_MOD);
if (param != 0) {
addBuffEffect.addEffect(new ModifyValueEffect(PARAMS.DEFENSE_MOD, MOD.MODIFY_BY_CONST, "" + param));
}
addBuffEffect.setIrresistible(true);
addBuffEffect.apply(ref);
// TODO defense mod effect
}
use of main.elements.targeting.FixedTargeting in project Eidolons by IDemiurge.
the class DialogueSyntax method getAbilities.
public static Abilities getAbilities(String text) {
if (!text.contains(PARAM_MOD))
return null;
String parsedPart = text.substring(text.indexOf(PARAM_MOD), text.indexOf(PARAM_MOD_CLOSE));
// specify KEY
Targeting t = new FixedTargeting();
Effects paramModEffects = getParamModEffects(parsedPart);
if (!paramModEffects.getEffects().isEmpty()) {
return new Abilities(new ActiveAbility(t, paramModEffects));
}
return new Abilities(new ActiveAbility(t, new AbilityEffect(parsedPart)));
}
use of main.elements.targeting.FixedTargeting in project Eidolons by IDemiurge.
the class ActivesConstructor method getTargeting.
public static Targeting getTargeting(TARGETING_MODE mode, DC_ActiveObj obj) {
Targeting targeting = null;
switch(mode) {
case BF_OBJ:
targeting = new TemplateSelectiveTargeting(SELECTIVE_TARGETING_TEMPLATES.BF_OBJ);
break;
case CORPSE:
targeting = new TemplateSelectiveTargeting(SELECTIVE_TARGETING_TEMPLATES.GRAVE_CELL);
break;
case BOLT_ANY:
targeting = new TemplateSelectiveTargeting(SELECTIVE_TARGETING_TEMPLATES.SHOT);
break;
case BOLT_UNITS:
targeting = new TemplateSelectiveTargeting(SELECTIVE_TARGETING_TEMPLATES.SHOT, ConditionMaster.getBFObjTypesCondition());
break;
case SELF:
targeting = getSelfTargeting(obj);
break;
case SINGLE:
targeting = getSingleTargeting(obj);
break;
case RAY:
targeting = new TemplateSelectiveTargeting(SELECTIVE_TARGETING_TEMPLATES.RAY);
break;
case CELL:
// bolt-targeting?
targeting = new TemplateSelectiveTargeting(SELECTIVE_TARGETING_TEMPLATES.CELL);
break;
case BLAST:
// bolt-targeting?
targeting = new TemplateSelectiveTargeting(SELECTIVE_TARGETING_TEMPLATES.BLAST);
break;
case DOUBLE:
targeting = new MultiTargeting(getSingleTargeting(obj), getSingleTargeting(obj));
((MultiTargeting) targeting).setIgnoreGroupTargeting(false);
break;
case MULTI:
case TRIPPLE:
break;
case ALL_UNITS:
targeting = new TemplateAutoTargeting(AUTO_TARGETING_TEMPLATES.ALL_UNITS);
break;
case ANY_UNIT:
targeting = new TemplateSelectiveTargeting(SELECTIVE_TARGETING_TEMPLATES.ANY_UNIT);
break;
case ANY_ENEMY:
targeting = new TemplateSelectiveTargeting(SELECTIVE_TARGETING_TEMPLATES.ANY_ENEMY);
break;
case ANY_ALLY:
targeting = new TemplateSelectiveTargeting(SELECTIVE_TARGETING_TEMPLATES.ANY_ALLY);
break;
case ALL_ALLIES:
targeting = new TemplateAutoTargeting(AUTO_TARGETING_TEMPLATES.ALL_ALLIES);
break;
case ALL_ENEMIES:
targeting = new TemplateAutoTargeting(AUTO_TARGETING_TEMPLATES.ALL_ENEMIES);
break;
case ALL:
targeting = new TemplateAutoTargeting(AUTO_TARGETING_TEMPLATES.ALL);
break;
case NOVA:
targeting = new FixedTargeting(KEYS.SOURCE);
break;
case WAVE:
targeting = new FixedTargeting(KEYS.SOURCE);
break;
case SPRAY:
targeting = new FixedTargeting(KEYS.SOURCE);
break;
case TRAP:
break;
case ANY_ARMOR:
targeting = new TemplateSelectiveTargeting(SELECTIVE_TARGETING_TEMPLATES.ANY_ARMOR);
break;
case ANY_ITEM:
targeting = new TemplateSelectiveTargeting(SELECTIVE_TARGETING_TEMPLATES.ANY_ITEM);
break;
case ANY_WEAPON:
targeting = new TemplateSelectiveTargeting(SELECTIVE_TARGETING_TEMPLATES.ANY_WEAPON);
break;
case ENEMY_ARMOR:
targeting = new TemplateSelectiveTargeting(SELECTIVE_TARGETING_TEMPLATES.ENEMY_ARMOR);
break;
case ENEMY_ITEM:
targeting = new TemplateSelectiveTargeting(SELECTIVE_TARGETING_TEMPLATES.ENEMY_ITEM);
break;
case ENEMY_WEAPON:
targeting = new TemplateSelectiveTargeting(SELECTIVE_TARGETING_TEMPLATES.ENEMY_WEAPON);
break;
case MY_ARMOR:
targeting = new TemplateSelectiveTargeting(SELECTIVE_TARGETING_TEMPLATES.MY_ARMOR);
break;
case MY_ITEM:
targeting = new TemplateSelectiveTargeting(SELECTIVE_TARGETING_TEMPLATES.MY_ITEM);
break;
case MY_WEAPON:
targeting = new TemplateSelectiveTargeting(SELECTIVE_TARGETING_TEMPLATES.MY_WEAPON);
break;
default:
break;
}
if (targeting == null) {
targeting = getSingleTargeting(obj);
}
if (targeting != null) {
if (!targeting.isModsAdded()) {
addTargetingMods(targeting, obj);
}
}
return targeting;
}
use of main.elements.targeting.FixedTargeting in project Eidolons by IDemiurge.
the class VampirismEffect method applyThis.
@Override
public boolean applyThis() {
if (conditions == null) {
initConditions();
}
// TODO Auto-generated method stub
// endurance damage; modify endurance only? above base?
// if (triggerEffect!=null) triggerEffect.apply(ref); else {
Targeting targeting = new FixedTargeting(KEYS.SOURCE);
Effects effects = new Effects();
if (restoreEndurance) {
ModifyValueEffect effect = new ModifyValueEffect(PARAMS.C_ENDURANCE, code, formula.toString());
if (!restoreEnduranceAboveBase) {
effect.setMaxParam(PARAMS.ENDURANCE);
}
effects.add(effect);
}
if (restoreToughness) {
ModifyValueEffect effect = new ModifyValueEffect(PARAMS.C_TOUGHNESS, code, formula.toString());
if (!restoreToughnessAboveBase) {
effect.setMaxParam(PARAMS.TOUGHNESS);
}
effects.add(effect);
}
if (fromEnduranceDamage) {
ActiveAbility ability = new ActiveAbility(targeting, effects);
new AddTriggerEffect(// TODO
STANDARD_EVENT_TYPE.UNIT_IS_DEALT_ENDURANCE_DAMAGE, // damage?
conditions, ability).apply(ref);
}
if (fromToughnessDamage) {
}
return true;
}
Aggregations