use of eidolons.ability.conditions.FacingCondition in project Eidolons by IDemiurge.
the class TurnSequenceConstructor method getTurnSequence.
public List<Action> getTurnSequence(Action action) {
Conditions conditions = (action.getTargeting().getFilter().getConditions());
FacingCondition condition = null;
FACING_SINGLE template = null;
DC_Obj target = action.getTarget();
Unit source = (Unit) action.getRef().getSourceObj();
for (Condition c : conditions) {
if (c instanceof FacingCondition) {
condition = (FacingCondition) c;
break;
}
List<Object> list = ClassMaster.getInstances(c, FacingCondition.class);
if (!list.isEmpty()) {
List<Action> front_sequence = getTurnSequence(FACING_SINGLE.IN_FRONT, source, target.getCoordinates());
List<Action> side_sequence = null;
if (action.getSource().hasBroadReach() || action.getActive().checkPassive(UnitEnums.STANDARD_PASSIVES.BROAD_REACH)) // front_sequence.remove(front_sequence.size() - 1);
{
side_sequence = getTurnSequence(FACING_SINGLE.TO_THE_SIDE, source, target.getCoordinates());
}
List<Action> hind_sequence = null;
if (action.getSource().hasHindReach() || action.getActive().checkPassive(UnitEnums.STANDARD_PASSIVES.HIND_REACH)) {
hind_sequence = getTurnSequence(FACING_SINGLE.BEHIND, source, target.getCoordinates());
}
return new ListMaster<Action>().getSmallest(front_sequence, hind_sequence, side_sequence);
}
}
// }
if (condition == null) {
return new ArrayList<>();
}
if (ArrayMaster.isNotEmpty(condition.getTemplate())) {
template = condition.getTemplate()[0];
}
return getTurnSequence(template, source, target.getCoordinates());
}
use of eidolons.ability.conditions.FacingCondition in project Eidolons by IDemiurge.
the class DC_ConditionMaster method getSelectiveTargetingTemplateConditions.
public static Conditions getSelectiveTargetingTemplateConditions(SELECTIVE_TARGETING_TEMPLATES template) {
Conditions c = new Conditions();
if ((template.isDependentOnZ())) {
// source and match?
c.add(new ZLevelCondition(true));
}
switch(template) {
case ANY_ARMOR:
{
c.add(new ObjTypeComparison(DC_TYPE.ARMOR));
break;
}
case ANY_WEAPON:
{
c.add(new NotCondition(new PropCondition(G_PROPS.WEAPON_TYPE, ItemEnums.WEAPON_TYPE.NATURAL.toString())));
c.add(new OrConditions(new ObjTypeComparison(DC_TYPE.WEAPONS), new Conditions(new PropCondition(G_PROPS.STD_BOOLS, GenericEnums.STD_BOOLS.WRAPPED_ITEM), new ObjTypeComparison(DC_TYPE.ITEMS))));
break;
}
case ANY_ITEM:
{
c.add(new ObjTypeComparison(DC_TYPE.ITEMS));
break;
}
case ENEMY_ARMOR:
{
c.add(new ObjTypeComparison(DC_TYPE.ARMOR));
c.add(ConditionMaster.getEnemyCondition());
break;
}
case ENEMY_ITEM:
{
c.add(new ObjTypeComparison(DC_TYPE.ITEMS));
c.add(ConditionMaster.getEnemyCondition());
break;
}
case ENEMY_WEAPON:
{
c.add(new NotCondition(new PropCondition(G_PROPS.WEAPON_TYPE, ItemEnums.WEAPON_TYPE.NATURAL.toString())));
c.add(new OrConditions(new ObjTypeComparison(DC_TYPE.ITEMS), new ObjTypeComparison(DC_TYPE.WEAPONS)));
c.add(ConditionMaster.getEnemyCondition());
break;
}
case MY_ITEM:
{
c.add(new ObjTypeComparison(DC_TYPE.ITEMS));
break;
}
case MY_SPELLBOOK:
c.add(ConditionMaster.getTYPECondition(DC_TYPE.SPELLS));
c.add(new SpellCondition(SPELL_CHECK.ACTIVE));
c.add(new RefCondition(KEYS.MATCH_SOURCE, KEYS.SOURCE));
break;
case MY_ARMOR:
{
// c.add(new ObjTypeComparison(OBJ_TYPES.ARMOR));
c.add(new RefCondition(KEYS.ARMOR, KEYS.MATCH));
break;
}
case MY_WEAPON:
{
c.add(new NotCondition(new PropCondition(G_PROPS.WEAPON_TYPE, ItemEnums.WEAPON_TYPE.NATURAL.toString())));
c.add(new OrConditions(new ObjTypeComparison(DC_TYPE.WEAPONS), new Conditions(new PropCondition(G_PROPS.STD_BOOLS, GenericEnums.STD_BOOLS.WRAPPED_ITEM), new ObjTypeComparison(DC_TYPE.ITEMS))));
// c.add(new RefCondition(KEYS.WEAPON, KEYS.MATCH));
break;
}
case CELL:
{
c.add(ConditionMaster.getTYPECondition(DC_TYPE.TERRAIN));
c.add(getRangeCondition());
c.add(new CellCondition(true));
break;
}
case BLAST:
{
c.add(ConditionMaster.getUnit_Char_BfObj_TerrainTypeCondition());
c.add(getRangeCondition());
c.add(new FacingCondition(UnitEnums.FACING_SINGLE.IN_FRONT));
c.add(new NotCondition(ConditionMaster.getSelfFilterCondition()));
break;
}
case BLIND_SHOT:
case SHOT:
c.add(ConditionMaster.getUnit_Char_BfObjTypeCondition());
c.add(new NotCondition(ConditionMaster.getSelfFilterCondition()));
c.add(new FacingCondition(UnitEnums.FACING_SINGLE.IN_FRONT));
c.add(getRangeCondition());
c.add(new OrConditions(new StdPassiveCondition(UnitEnums.STANDARD_PASSIVES.DARKVISION), new NotCondition(new VisibilityCondition(UNIT_VISION.CONCEALED))));
//
c.add(getClearShotCondition(KEYS.MATCH.name()));
// ALL SHOT LIKE THIS!
break;
case PRECISE_SHOT:
c.add(new VisibilityCondition(UNIT_VISION.IN_PLAIN_SIGHT));
break;
case UNOBSTRUCTED_SHOT:
c.add(new NotCondition(ConditionMaster.getSelfFilterCondition()));
c.add(getRangeCondition());
break;
case RAY:
c.add(ConditionMaster.getDistanceFilterCondition(Ref.KEYS.SOURCE.name(), 1));
break;
case MOVE:
c.add(DC_ConditionMaster.getMoveFilterCondition());
break;
case BF_OBJ:
c.add(ConditionMaster.getTYPECondition(DC_TYPE.BF_OBJ));
break;
case ANY_ALLY:
c.add(ConditionMaster.getUnit_CharTypeCondition());
c.add(ConditionMaster.getOwnershipFilterCondition(Ref.KEYS.SOURCE.name(), true));
break;
case ANY_ENEMY:
c.add(ConditionMaster.getUnit_CharTypeCondition());
c.add(ConditionMaster.getOwnershipFilterCondition(Ref.KEYS.SOURCE.name(), false));
break;
case ANY_UNIT:
c.add(ConditionMaster.getUnit_CharTypeCondition());
break;
case KEY:
c.add(new OrConditions(new PropCondition(G_PROPS.BF_OBJECT_GROUP, BF_OBJECT_GROUP.LOCK.toString(), true), new PropCondition(G_PROPS.BF_OBJECT_GROUP, BF_OBJECT_GROUP.DOOR.toString(), true)));
case ATTACK:
c.add(new VisibilityCondition(UNIT_VISION.IN_SIGHT));
List<FACING_SINGLE> list = new ArrayList<>();
list.add(UnitEnums.FACING_SINGLE.IN_FRONT);
c.add(new OrConditions(new FacingCondition(UnitEnums.FACING_SINGLE.IN_FRONT), new Conditions(new FacingCondition(UnitEnums.FACING_SINGLE.IN_FRONT, UnitEnums.FACING_SINGLE.BEHIND), new StringComparison(StringMaster.getValueRef(KEYS.SOURCE, G_PROPS.STANDARD_PASSIVES), UnitEnums.STANDARD_PASSIVES.HIND_REACH + "", false)), new Conditions(new FacingCondition(UnitEnums.FACING_SINGLE.IN_FRONT, UnitEnums.FACING_SINGLE.TO_THE_SIDE), new StringComparison(StringMaster.getValueRef(KEYS.SOURCE, G_PROPS.STANDARD_PASSIVES), UnitEnums.STANDARD_PASSIVES.BROAD_REACH + "", false))));
c.add(ConditionMaster.getAttackConditions());
c.add(getClearShotCondition(KEYS.MATCH.name()));
// c.add(AirborneRule.getMeleeAttackCondition()); TODO
break;
case GRAVE_CELL:
c.add(new GraveCondition());
break;
case CLAIM:
{
c.add(new NotCondition(new StatusCheckCondition(UnitEnums.STATUS.CHANNELED)));
c.add(new NotCondition(new OwnershipCondition(KEYS.SOURCE, KEYS.MATCH)));
c.add(ConditionMaster.getTYPECondition(DC_TYPE.BF_OBJ));
c.add(ConditionMaster.getDistanceFilterCondition(Ref.KEYS.SOURCE.name(), "{ACTIVE_RANGE}"));
break;
}
case ENEMY_SPELLBOOK:
break;
default:
break;
}
return c;
}
use of eidolons.ability.conditions.FacingCondition in project Eidolons by IDemiurge.
the class DungeonObjMaster method createAction.
public DC_UnitAction createAction(T sub, Unit unit, String typeName, DungeonObj obj) {
// TODO CACHE
DC_UnitAction action = unit.getGame().getActionManager().getOrCreateAction(typeName, unit);
action.setTargeting(new SelectiveTargeting(new Conditions(new DistanceCondition("1", true), new FacingCondition(FACING_SINGLE.IN_FRONT))));
action.setConstructed(true);
action.getTargeter().setTargetingInitialized(true);
action.setTargetingCachingOff(true);
action.setActionTypeGroup(ACTION_TYPE_GROUPS.STANDARD);
action.setAbilities(null);
List<ActiveObj> actives = new ArrayList<>();
actives.add(new ActiveAbilityObj((AbilityType) DataManager.getType("Dummy Ability", DC_TYPE.ABILS), unit.getRef(), unit.getOwner(), unit.getGame()) {
@Override
public boolean activatedOn(Ref ref) {
return actionActivated(sub, unit, obj);
}
});
action.setActives(actives);
action.setActionTypeGroup(ACTION_TYPE_GROUPS.DUNGEON);
return action;
}
Aggregations