mirror of
https://github.com/Retera/WarsmashModEngine.git
synced 2022-07-31 17:38:59 +02:00
Working with jass abilities for fun
This commit is contained in:
parent
c5b61afa28
commit
0a6fdba9da
@ -208,7 +208,7 @@ public class WarsmashGdxMapScreen implements InputProcessor, Screen {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
this.commonEnv = Jass2.loadCommon(this.viewer.mapMpq, this.uiViewport, this.uiScene, this.viewer, this.meleeUI,
|
||||
"Scripts\\common.j", "Scripts\\Blizzard.j", "Scripts\\war3map.j");
|
||||
"Scripts\\common.j", "Scripts\\abilitiesCommon.j", "Scripts\\Blizzard.j", "Scripts\\war3map.j");
|
||||
this.commonEnv.main();
|
||||
}
|
||||
|
||||
|
@ -88,7 +88,12 @@ import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.inventory
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.mine.CAbilityBlightedGoldMine;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.targeting.AbilityPointTarget;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.CAbilityType;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.jass.BehaviorExpr;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.jass.CAbilityTypeJassDefinition;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.jass.CAbilityTypeJassDefinition.JassOrder;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.jass.CAbilityTypeJassDefinition.JassOrderCommandCardType;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.ai.AIDifficulty;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.behaviors.CBehaviorAttackListener;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.config.CPlayerAPI;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.config.War3MapConfig;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.item.CItemTypeJass;
|
||||
@ -605,6 +610,13 @@ public class Jass2 {
|
||||
final HandleJassType hashtableType = globals.registerHandleType("hashtable");
|
||||
final HandleJassType frameHandleType = globals.registerHandleType("framehandle");
|
||||
|
||||
// Warsmash Ability API
|
||||
final HandleJassType abilitytypeType = globals.registerHandleType("abilitytype");
|
||||
final HandleJassType ordercommandcardType = globals.registerHandleType("ordercommandcard");
|
||||
final HandleJassType ordercommandcardtypeType = globals.registerHandleType("ordercommandcardtype");
|
||||
final HandleJassType abilitybehaviorType = globals.registerHandleType("abilitybehavior");
|
||||
final HandleJassType behaviorexprType = globals.registerHandleType("behaviorexpr");
|
||||
|
||||
registerTypingNatives(jassProgramVisitor, raceType, alliancetypeType, racepreferenceType, igamestateType,
|
||||
fgamestateType, playerstateType, playerscoreType, playergameresultType, unitstateType,
|
||||
aidifficultyType, gameeventType, playereventType, playeruniteventType, uniteventType, limitopType,
|
||||
@ -613,6 +625,15 @@ public class Jass2 {
|
||||
volumegroupType, camerafieldType, playercolorType, placementType, startlocprioType,
|
||||
raritycontrolType, blendmodeType, texmapflagsType, effecttypeType, fogstateType, versionType,
|
||||
itemtypeType, attacktypeType, damagetypeType, weapontypeType, soundtypeType, pathingtypeType);
|
||||
jassProgramVisitor.getJassNativeManager().createNative("ConvertOrderCommandCardType", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final int i = arguments.get(0).visit(IntegerJassValueVisitor.getInstance());
|
||||
return new HandleJassValue(ordercommandcardtypeType, JassOrderCommandCardType.VALUES[i]);
|
||||
}
|
||||
});
|
||||
|
||||
jassProgramVisitor.getJassNativeManager().createNative("UnitId", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
@ -3377,6 +3398,7 @@ public class Jass2 {
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CUnit whichUnit = arguments.get(0).visit(ObjectJassValueVisitor.getInstance());
|
||||
CommonEnvironment.this.simulation.removeUnit(whichUnit);
|
||||
meleeUI.removedUnit(whichUnit);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
@ -3874,6 +3896,568 @@ public class Jass2 {
|
||||
return BooleanJassValue.FALSE;
|
||||
}
|
||||
});
|
||||
|
||||
// Warsmash Ability API
|
||||
jassProgramVisitor.getJassNativeManager().createNative("GetUnitMoveFollowBehavior", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CUnit unit = nullable(arguments, 0, ObjectJassValueVisitor.getInstance());
|
||||
final int highlightOrderId = arguments.get(1).visit(IntegerJassValueVisitor.getInstance());
|
||||
final CWidget whichFollowTarget = nullable(arguments, 2, ObjectJassValueVisitor.getInstance());
|
||||
if (unit == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return new HandleJassValue(abilitybehaviorType,
|
||||
unit.getFollowBehavior().reset(highlightOrderId, whichFollowTarget));
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("GetUnitMovePointBehavior", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CUnit unit = nullable(arguments, 0, ObjectJassValueVisitor.getInstance());
|
||||
final int highlightOrderId = arguments.get(1).visit(IntegerJassValueVisitor.getInstance());
|
||||
final double targetX = arguments.get(2).visit(RealJassValueVisitor.getInstance());
|
||||
final double targetY = arguments.get(3).visit(RealJassValueVisitor.getInstance());
|
||||
if (unit == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return new HandleJassValue(abilitybehaviorType, unit.getMoveBehavior().reset(highlightOrderId,
|
||||
new AbilityPointTarget((float) targetX, (float) targetY)));
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("GetUnitMovePointBehaviorLoc", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CUnit unit = nullable(arguments, 0, ObjectJassValueVisitor.getInstance());
|
||||
final int highlightOrderId = arguments.get(1).visit(IntegerJassValueVisitor.getInstance());
|
||||
final Point2D.Double target = arguments.get(2).visit(ObjectJassValueVisitor.getInstance());
|
||||
if (unit == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return new HandleJassValue(abilitybehaviorType, unit.getMoveBehavior().reset(highlightOrderId,
|
||||
new AbilityPointTarget((float) target.x, (float) target.y)));
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("GetUnitAttackMovePointBehavior",
|
||||
new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CUnit unit = nullable(arguments, 0, ObjectJassValueVisitor.getInstance());
|
||||
final double targetX = arguments.get(1).visit(RealJassValueVisitor.getInstance());
|
||||
final double targetY = arguments.get(2).visit(RealJassValueVisitor.getInstance());
|
||||
if (unit == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return new HandleJassValue(abilitybehaviorType, unit.getAttackMoveBehavior()
|
||||
.reset(new AbilityPointTarget((float) targetX, (float) targetY)));
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("GetUnitAttackMovePointBehaviorLoc",
|
||||
new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CUnit unit = nullable(arguments, 0, ObjectJassValueVisitor.getInstance());
|
||||
final Point2D.Double target = arguments.get(1).visit(ObjectJassValueVisitor.getInstance());
|
||||
if (unit == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return new HandleJassValue(abilitybehaviorType, unit.getAttackMoveBehavior()
|
||||
.reset(new AbilityPointTarget((float) target.x, (float) target.y)));
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("GetUnitAttackWidgetBehavior", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CUnit unit = nullable(arguments, 0, ObjectJassValueVisitor.getInstance());
|
||||
final int highlightOrderId = arguments.get(1).visit(IntegerJassValueVisitor.getInstance());
|
||||
final int whichUnitAttackIndex = arguments.get(2).visit(IntegerJassValueVisitor.getInstance());
|
||||
final CWidget target = nullable(arguments, 3, ObjectJassValueVisitor.getInstance());
|
||||
if (unit == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return new HandleJassValue(abilitybehaviorType,
|
||||
unit.getAttackBehavior().reset(highlightOrderId,
|
||||
unit.getAttacks().get(whichUnitAttackIndex), target, false,
|
||||
CBehaviorAttackListener.DO_NOTHING));
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("GetUnitAttackGroundBehavior", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CUnit unit = nullable(arguments, 0, ObjectJassValueVisitor.getInstance());
|
||||
final int highlightOrderId = arguments.get(1).visit(IntegerJassValueVisitor.getInstance());
|
||||
final int whichUnitAttackIndex = arguments.get(2).visit(IntegerJassValueVisitor.getInstance());
|
||||
final double targetX = arguments.get(3).visit(RealJassValueVisitor.getInstance());
|
||||
final double targetY = arguments.get(4).visit(RealJassValueVisitor.getInstance());
|
||||
if (unit == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return new HandleJassValue(abilitybehaviorType,
|
||||
unit.getAttackBehavior().reset(highlightOrderId,
|
||||
unit.getAttacks().get(whichUnitAttackIndex),
|
||||
new AbilityPointTarget((float) targetX, (float) targetY), false,
|
||||
CBehaviorAttackListener.DO_NOTHING));
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("GetUnitAttackGroundBehaviorLoc",
|
||||
new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CUnit unit = nullable(arguments, 0, ObjectJassValueVisitor.getInstance());
|
||||
final int highlightOrderId = arguments.get(1).visit(IntegerJassValueVisitor.getInstance());
|
||||
final int whichUnitAttackIndex = arguments.get(2)
|
||||
.visit(IntegerJassValueVisitor.getInstance());
|
||||
final Point2D.Double target = arguments.get(3).visit(ObjectJassValueVisitor.getInstance());
|
||||
if (unit == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return new HandleJassValue(abilitybehaviorType,
|
||||
unit.getAttackBehavior().reset(highlightOrderId,
|
||||
unit.getAttacks().get(whichUnitAttackIndex),
|
||||
new AbilityPointTarget((float) target.x, (float) target.y), false,
|
||||
CBehaviorAttackListener.DO_NOTHING));
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("CreateAbilityBehavior", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
throw new UnsupportedOperationException("NYI");
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("GetSpellAbilityOrderId", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
return new IntegerJassValue(((CommonTriggerExecutionScope) triggerScope).getSpellAbilityOrderId());
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("GetSpellAbilityOrderCommandCard",
|
||||
new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
return new IntegerJassValue(
|
||||
((CommonTriggerExecutionScope) triggerScope).getSpellAbilityOrderId());
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("GetSpellTargetType", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
return new HandleJassValue(ordercommandcardtypeType,
|
||||
((CommonTriggerExecutionScope) triggerScope).getSpellAbilityTargetType());
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("CreateAbilityType", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
return new HandleJassValue(abilitytypeType, new CAbilityTypeJassDefinition(globalScope));
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetAbilityTypeOnAddAction", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CAbilityTypeJassDefinition whichAbilityType = arguments.get(0)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
final JassFunction func = arguments.get(1).visit(JassFunctionJassValueVisitor.getInstance());
|
||||
whichAbilityType.setOnAddJass(func);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetAbilityTypeOnRemoveAction", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CAbilityTypeJassDefinition whichAbilityType = arguments.get(0)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
final JassFunction func = arguments.get(1).visit(JassFunctionJassValueVisitor.getInstance());
|
||||
whichAbilityType.setOnRemoveJass(func);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetAbilityTypeOnTickAction", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CAbilityTypeJassDefinition whichAbilityType = arguments.get(0)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
final JassFunction func = arguments.get(1).visit(JassFunctionJassValueVisitor.getInstance());
|
||||
whichAbilityType.setOnTickJass(func);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetAbilityTypeOnDeathAction", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CAbilityTypeJassDefinition whichAbilityType = arguments.get(0)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
final JassFunction func = arguments.get(1).visit(JassFunctionJassValueVisitor.getInstance());
|
||||
whichAbilityType.setOnDeathJass(func);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetAbilityTypeOnCancelFromQueueAction",
|
||||
new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CAbilityTypeJassDefinition whichAbilityType = arguments.get(0)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
final JassFunction func = arguments.get(1)
|
||||
.visit(JassFunctionJassValueVisitor.getInstance());
|
||||
whichAbilityType.setOnCancelFromQueueJass(func);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetAbilityTypeOnCheckBeforeQueueQueueCondition",
|
||||
new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CAbilityTypeJassDefinition whichAbilityType = arguments.get(0)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
final TriggerBooleanExpression boolExpr = arguments.get(1)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
whichAbilityType.setCheckBeforeQueueJass(boolExpr);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetAbilityTypeCheckTargetCondition",
|
||||
new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CAbilityTypeJassDefinition whichAbilityType = arguments.get(0)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
final TriggerBooleanExpression boolExpr = arguments.get(1)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
whichAbilityType.setCheckTargetCondition(boolExpr);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetAbilityTypeCheckUseCondition",
|
||||
new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CAbilityTypeJassDefinition whichAbilityType = arguments.get(0)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
final TriggerBooleanExpression boolExpr = arguments.get(1)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
whichAbilityType.setCheckUseCondition(boolExpr);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetAbilityTypeEnabledWhileUnderConstruction",
|
||||
new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CAbilityTypeJassDefinition whichAbilityType = arguments.get(0)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
final boolean enabled = arguments.get(1).visit(BooleanJassValueVisitor.getInstance());
|
||||
whichAbilityType.setEnabledWhileUnderConstruction(enabled);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetAbilityTypeEnabledWhileUpgrading",
|
||||
new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CAbilityTypeJassDefinition whichAbilityType = arguments.get(0)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
final boolean enabled = arguments.get(1).visit(BooleanJassValueVisitor.getInstance());
|
||||
whichAbilityType.setEnabledWhileUpgrading(enabled);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetAbilityTypeBehavior", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CAbilityTypeJassDefinition whichAbilityType = arguments.get(0)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
final BehaviorExpr expr = arguments.get(1).visit(ObjectJassValueVisitor.getInstance());
|
||||
whichAbilityType.setBeginJass(expr);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("RegisterAbilityType", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final int rawcode = arguments.get(0).visit(IntegerJassValueVisitor.getInstance());
|
||||
final CAbilityTypeJassDefinition whichAbilityType = nullable(arguments, 1,
|
||||
ObjectJassValueVisitor.getInstance());
|
||||
CommonEnvironment.this.simulation.getAbilityData().registerJassType(new War3ID(rawcode),
|
||||
whichAbilityType);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("CreateOrderCommandCard", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final JassOrderCommandCardType type = arguments.get(0).visit(ObjectJassValueVisitor.getInstance());
|
||||
final int orderId = arguments.get(1).visit(IntegerJassValueVisitor.getInstance());
|
||||
final int buttonPositionX = arguments.get(2).visit(IntegerJassValueVisitor.getInstance());
|
||||
final int buttonPositionY = arguments.get(3).visit(IntegerJassValueVisitor.getInstance());
|
||||
final JassOrder javaValue = new JassOrder(orderId, buttonPositionX, buttonPositionY);
|
||||
javaValue.setType(type);
|
||||
return new HandleJassValue(ordercommandcardType, javaValue);
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("AbilityTypeAddOrderCommandCard",
|
||||
new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CAbilityTypeJassDefinition abilityType = arguments.get(0)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
final JassOrder commandCard = arguments.get(1).visit(ObjectJassValueVisitor.getInstance());
|
||||
abilityType.addJassOrder(commandCard);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("AbilityTypeRemoveOrderCommandCard",
|
||||
new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final CAbilityTypeJassDefinition abilityType = arguments.get(0)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
final JassOrder commandCard = arguments.get(1).visit(ObjectJassValueVisitor.getInstance());
|
||||
abilityType.removeJassOrder(commandCard);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetOrderCommandCardAutoCastOrderId",
|
||||
new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final JassOrder orderCommandCard = arguments.get(0)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
final int autoCastOrderId = arguments.get(1).visit(IntegerJassValueVisitor.getInstance());
|
||||
orderCommandCard.setAutoCastOrderId(autoCastOrderId);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetOrderCommandCardUnAutoCastOrderId",
|
||||
new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final JassOrder orderCommandCard = arguments.get(0)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
final int autoCastUnOrderId = arguments.get(1).visit(IntegerJassValueVisitor.getInstance());
|
||||
orderCommandCard.setAutoCastUnOrderId(autoCastUnOrderId);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetOrderCommandCardContainerMenuOrderId",
|
||||
new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final JassOrder orderCommandCard = arguments.get(0)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
final int orderId = arguments.get(1).visit(IntegerJassValueVisitor.getInstance());
|
||||
orderCommandCard.setContainerMenuOrderId(orderId);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetOrderCommandCardDisabled", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final JassOrder orderCommandCard = arguments.get(0).visit(ObjectJassValueVisitor.getInstance());
|
||||
final boolean disabled = arguments.get(1).visit(BooleanJassValueVisitor.getInstance());
|
||||
orderCommandCard.setDisabled(disabled);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetOrderCommandCardManaCost", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final JassOrder orderCommandCard = arguments.get(0).visit(ObjectJassValueVisitor.getInstance());
|
||||
final int manaCost = arguments.get(1).visit(IntegerJassValueVisitor.getInstance());
|
||||
orderCommandCard.setManaCost(manaCost);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetOrderCommandCardGoldCost", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final JassOrder orderCommandCard = arguments.get(0).visit(ObjectJassValueVisitor.getInstance());
|
||||
final int goldCost = arguments.get(1).visit(IntegerJassValueVisitor.getInstance());
|
||||
orderCommandCard.setGoldCost(goldCost);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetOrderCommandCardLumberCost", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final JassOrder orderCommandCard = arguments.get(0).visit(ObjectJassValueVisitor.getInstance());
|
||||
final int lumberCost = arguments.get(1).visit(IntegerJassValueVisitor.getInstance());
|
||||
orderCommandCard.setLumberCost(lumberCost);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetOrderCommandCardFoodCostDisplayOnly",
|
||||
new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final JassOrder orderCommandCard = arguments.get(0)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
final int foodCost = arguments.get(1).visit(IntegerJassValueVisitor.getInstance());
|
||||
orderCommandCard.setFoodCostDisplayOnly(foodCost);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetOrderCommandCardCharges", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final JassOrder orderCommandCard = arguments.get(0).visit(ObjectJassValueVisitor.getInstance());
|
||||
final int charges = arguments.get(1).visit(IntegerJassValueVisitor.getInstance());
|
||||
orderCommandCard.setCharges(charges);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetOrderCommandCardAutoCastActive",
|
||||
new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final JassOrder orderCommandCard = arguments.get(0)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
final boolean active = arguments.get(1).visit(BooleanJassValueVisitor.getInstance());
|
||||
orderCommandCard.setAutoCastActive(active);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetOrderCommandCardHidden", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final JassOrder orderCommandCard = arguments.get(0).visit(ObjectJassValueVisitor.getInstance());
|
||||
final boolean hidden = arguments.get(1).visit(BooleanJassValueVisitor.getInstance());
|
||||
orderCommandCard.setHidden(hidden);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetOrderCommandCardIconPath", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final JassOrder orderCommandCard = arguments.get(0).visit(ObjectJassValueVisitor.getInstance());
|
||||
final String iconPath = arguments.get(1).visit(StringJassValueVisitor.getInstance());
|
||||
orderCommandCard.setIconPath(iconPath);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetOrderCommandCardButtonPositionX",
|
||||
new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final JassOrder orderCommandCard = arguments.get(0)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
final int buttonPosX = arguments.get(1).visit(IntegerJassValueVisitor.getInstance());
|
||||
orderCommandCard.setButtonPositionX(buttonPosX);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetOrderCommandCardButtonPositionY",
|
||||
new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final JassOrder orderCommandCard = arguments.get(0)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
final int buttonPosY = arguments.get(1).visit(IntegerJassValueVisitor.getInstance());
|
||||
orderCommandCard.setButtonPositionY(buttonPosY);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetOrderCommandCardToolTip", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final JassOrder orderCommandCard = arguments.get(0).visit(ObjectJassValueVisitor.getInstance());
|
||||
final String tip = arguments.get(1).visit(StringJassValueVisitor.getInstance());
|
||||
orderCommandCard.setTip(tip);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetOrderCommandCardUberTip", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final JassOrder orderCommandCard = arguments.get(0).visit(ObjectJassValueVisitor.getInstance());
|
||||
final String uberTip = arguments.get(1).visit(StringJassValueVisitor.getInstance());
|
||||
orderCommandCard.setUberTip(uberTip);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetOrderCommandCardHotKey", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final JassOrder orderCommandCard = arguments.get(0).visit(ObjectJassValueVisitor.getInstance());
|
||||
final String hotkeyString = arguments.get(1).visit(StringJassValueVisitor.getInstance());
|
||||
orderCommandCard.setHotkey(hotkeyString.charAt(0));
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetOrderCommandCardPreviewBuildUnitId",
|
||||
new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final JassOrder orderCommandCard = arguments.get(0)
|
||||
.visit(ObjectJassValueVisitor.getInstance());
|
||||
final int unitId = arguments.get(1).visit(IntegerJassValueVisitor.getInstance());
|
||||
orderCommandCard.setPreviewBuildUnitId(new War3ID(unitId));
|
||||
return null;
|
||||
}
|
||||
});
|
||||
jassProgramVisitor.getJassNativeManager().createNative("SetOrderCommandCardAOE", new JassFunction() {
|
||||
@Override
|
||||
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
|
||||
final TriggerExecutionScope triggerScope) {
|
||||
final JassOrder orderCommandCard = arguments.get(0).visit(ObjectJassValueVisitor.getInstance());
|
||||
final double radius = arguments.get(1).visit(RealJassValueVisitor.getInstance());
|
||||
orderCommandCard.setMouseTargetRadius((float) radius);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void config() {
|
||||
@ -4013,6 +4597,13 @@ public class Jass2 {
|
||||
final HandleJassType hashtableType = globals.registerHandleType("hashtable");
|
||||
final HandleJassType frameHandleType = globals.registerHandleType("framehandle");
|
||||
|
||||
// Warsmash Ability API
|
||||
final HandleJassType abilitytypeType = globals.registerHandleType("abilitytype");
|
||||
final HandleJassType ordercommandcardType = globals.registerHandleType("ordercommandcard");
|
||||
final HandleJassType ordercommandcardtypeType = globals.registerHandleType("ordercommandcardtype");
|
||||
final HandleJassType abilitybehaviorType = globals.registerHandleType("abilitybehavior");
|
||||
final HandleJassType behaviorexprType = globals.registerHandleType("behaviorexpr");
|
||||
|
||||
registerTypingNatives(jassProgramVisitor, raceType, alliancetypeType, racepreferenceType, igamestateType,
|
||||
fgamestateType, playerstateType, playerscoreType, playergameresultType, unitstateType,
|
||||
aidifficultyType, gameeventType, playereventType, playeruniteventType, uniteventType, limitopType,
|
||||
|
@ -7,7 +7,10 @@ import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CDestructable;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CItem;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CUnit;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CWidget;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.CAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.targeting.AbilityPointTarget;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.jass.CAbilityTypeJassDefinition.JassOrder;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.jass.CAbilityTypeJassDefinition.JassOrderCommandCardType;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.players.CPlayerJass;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.region.CRegion;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.timers.CTimerJass;
|
||||
@ -72,10 +75,17 @@ public class CommonTriggerExecutionScope extends TriggerExecutionScope {
|
||||
private CWidget triggerWidget;
|
||||
private CScriptDialog clickedDialog;
|
||||
private CScriptDialogButton clickedButton;
|
||||
private CAbility spellAbility;
|
||||
private CUnit spellAbilityUnit;
|
||||
private CUnit spellTargetUnit;
|
||||
private CDestructable spellTargetDestructable;
|
||||
private CItem spellTargetItem;
|
||||
private AbilityPointTarget spellTargetPoint;
|
||||
private War3ID spellAbilityId;
|
||||
private int spellAbilityOrderId; // Warsmash only
|
||||
private JassOrderCommandCardType spellAbilityTargetType; // Warsmash only
|
||||
private JassOrder spellAbilityOrderCommandCard; // Warsmash only
|
||||
|
||||
private JassGameEventsWar3 triggerEventId;
|
||||
|
||||
public CommonTriggerExecutionScope(final Trigger triggeringTrigger) {
|
||||
@ -397,6 +407,18 @@ public class CommonTriggerExecutionScope extends TriggerExecutionScope {
|
||||
return this.spellAbilityId;
|
||||
}
|
||||
|
||||
public int getSpellAbilityOrderId() {
|
||||
return this.spellAbilityOrderId;
|
||||
}
|
||||
|
||||
public JassOrderCommandCardType getSpellAbilityTargetType() {
|
||||
return this.spellAbilityTargetType;
|
||||
}
|
||||
|
||||
public JassOrder getSpellAbilityOrderCommandCard() {
|
||||
return this.spellAbilityOrderCommandCard;
|
||||
}
|
||||
|
||||
public static CommonTriggerExecutionScope filterScope(final TriggerExecutionScope parentScope,
|
||||
final CUnit filterUnit) {
|
||||
final CommonTriggerExecutionScope scope = new CommonTriggerExecutionScope(parentScope.getTriggeringTrigger(),
|
||||
@ -534,8 +556,10 @@ public class CommonTriggerExecutionScope extends TriggerExecutionScope {
|
||||
}
|
||||
|
||||
public static CommonTriggerExecutionScope unitSpellEffectTargetScope(final JassGameEventsWar3 triggerEventId,
|
||||
final Trigger trigger, final CUnit spellAbilityUnit, final CUnit targetUnit, final War3ID spellAbilityId) {
|
||||
final Trigger trigger, final CAbility spellAbility, final CUnit spellAbilityUnit, final CUnit targetUnit,
|
||||
final War3ID spellAbilityId) {
|
||||
final CommonTriggerExecutionScope scope = new CommonTriggerExecutionScope(trigger, TriggerExecutionScope.EMPTY);
|
||||
scope.spellAbility = spellAbility;
|
||||
scope.spellAbilityUnit = spellAbilityUnit;
|
||||
scope.triggeringUnit = spellAbilityUnit;
|
||||
scope.spellTargetUnit = targetUnit;
|
||||
@ -545,9 +569,10 @@ public class CommonTriggerExecutionScope extends TriggerExecutionScope {
|
||||
}
|
||||
|
||||
public static CommonTriggerExecutionScope unitSpellEffectPointScope(final JassGameEventsWar3 triggerEventId,
|
||||
final Trigger trigger, final CUnit spellAbilityUnit, final AbilityPointTarget targetPoint,
|
||||
final War3ID spellAbilityId) {
|
||||
final Trigger trigger, final CAbility spellAbility, final CUnit spellAbilityUnit,
|
||||
final AbilityPointTarget targetPoint, final War3ID spellAbilityId) {
|
||||
final CommonTriggerExecutionScope scope = new CommonTriggerExecutionScope(trigger, TriggerExecutionScope.EMPTY);
|
||||
scope.spellAbility = spellAbility;
|
||||
scope.spellAbilityUnit = spellAbilityUnit;
|
||||
scope.triggeringUnit = spellAbilityUnit;
|
||||
scope.spellTargetPoint = targetPoint;
|
||||
@ -556,6 +581,115 @@ public class CommonTriggerExecutionScope extends TriggerExecutionScope {
|
||||
return scope;
|
||||
}
|
||||
|
||||
public static CommonTriggerExecutionScope jassAbilityTargetScope(final CAbility spellAbility,
|
||||
final CUnit spellAbilityUnit, final CUnit targetUnit, final War3ID spellAbilityId,
|
||||
final int spellAbilityOrderId, final JassOrderCommandCardType spellAbilityTargetType,
|
||||
final JassOrder spellAbilityOrderCommandCard) {
|
||||
final CommonTriggerExecutionScope scope = new CommonTriggerExecutionScope(null, TriggerExecutionScope.EMPTY);
|
||||
scope.spellAbility = spellAbility;
|
||||
scope.spellAbilityUnit = spellAbilityUnit;
|
||||
scope.triggeringUnit = spellAbilityUnit;
|
||||
scope.spellTargetUnit = targetUnit;
|
||||
scope.spellAbilityId = spellAbilityId;
|
||||
scope.spellAbilityOrderId = spellAbilityOrderId;
|
||||
scope.spellAbilityTargetType = spellAbilityTargetType;
|
||||
return scope;
|
||||
}
|
||||
|
||||
public static CommonTriggerExecutionScope jassAbilityTargetScope(final CAbility spellAbility,
|
||||
final CUnit spellAbilityUnit, final CItem targetItem, final War3ID spellAbilityId,
|
||||
final int spellAbilityOrderId, final JassOrderCommandCardType spellAbilityTargetType,
|
||||
final JassOrder spellAbilityOrderCommandCard) {
|
||||
final CommonTriggerExecutionScope scope = new CommonTriggerExecutionScope(null, TriggerExecutionScope.EMPTY);
|
||||
scope.spellAbility = spellAbility;
|
||||
scope.spellAbilityUnit = spellAbilityUnit;
|
||||
scope.triggeringUnit = spellAbilityUnit;
|
||||
scope.spellTargetItem = targetItem;
|
||||
scope.spellAbilityId = spellAbilityId;
|
||||
scope.spellAbilityOrderId = spellAbilityOrderId;
|
||||
scope.spellAbilityTargetType = spellAbilityTargetType;
|
||||
return scope;
|
||||
}
|
||||
|
||||
public static CommonTriggerExecutionScope jassAbilityTargetScope(final CAbility spellAbility,
|
||||
final CUnit spellAbilityUnit, final CDestructable targetDestructable, final War3ID spellAbilityId,
|
||||
final int spellAbilityOrderId, final JassOrderCommandCardType spellAbilityTargetType,
|
||||
final JassOrder spellAbilityOrderCommandCard) {
|
||||
final CommonTriggerExecutionScope scope = new CommonTriggerExecutionScope(null, TriggerExecutionScope.EMPTY);
|
||||
scope.spellAbility = spellAbility;
|
||||
scope.spellAbilityUnit = spellAbilityUnit;
|
||||
scope.triggeringUnit = spellAbilityUnit;
|
||||
scope.spellTargetDestructable = targetDestructable;
|
||||
scope.spellAbilityId = spellAbilityId;
|
||||
scope.spellAbilityOrderId = spellAbilityOrderId;
|
||||
scope.spellAbilityTargetType = spellAbilityTargetType;
|
||||
return scope;
|
||||
}
|
||||
|
||||
public static CommonTriggerExecutionScope jassAbilityPointScope(final CAbility spellAbility,
|
||||
final CUnit spellAbilityUnit, final AbilityPointTarget targetPoint, final War3ID spellAbilityId,
|
||||
final int spellAbilityOrderId, final JassOrderCommandCardType spellAbilityTargetType,
|
||||
final JassOrder spellAbilityOrderCommandCard) {
|
||||
final CommonTriggerExecutionScope scope = new CommonTriggerExecutionScope(null, TriggerExecutionScope.EMPTY);
|
||||
scope.spellAbility = spellAbility;
|
||||
scope.spellAbilityUnit = spellAbilityUnit;
|
||||
scope.triggeringUnit = spellAbilityUnit;
|
||||
scope.spellTargetPoint = targetPoint;
|
||||
scope.spellAbilityId = spellAbilityId;
|
||||
scope.spellAbilityOrderId = spellAbilityOrderId;
|
||||
scope.spellAbilityTargetType = spellAbilityTargetType;
|
||||
return scope;
|
||||
}
|
||||
|
||||
public static CommonTriggerExecutionScope jassAbilityNoTargetScope(final CAbility spellAbility,
|
||||
final CUnit spellAbilityUnit, final War3ID spellAbilityId, final int spellAbilityOrderId,
|
||||
final JassOrderCommandCardType spellAbilityTargetType, final JassOrder spellAbilityOrderCommandCard) {
|
||||
final CommonTriggerExecutionScope scope = new CommonTriggerExecutionScope(null, TriggerExecutionScope.EMPTY);
|
||||
scope.spellAbility = spellAbility;
|
||||
scope.spellAbilityUnit = spellAbilityUnit;
|
||||
scope.triggeringUnit = spellAbilityUnit;
|
||||
scope.spellAbilityId = spellAbilityId;
|
||||
scope.spellAbilityOrderId = spellAbilityOrderId;
|
||||
scope.spellAbilityTargetType = spellAbilityTargetType;
|
||||
scope.spellAbilityOrderCommandCard = spellAbilityOrderCommandCard;
|
||||
return scope;
|
||||
}
|
||||
|
||||
public static CommonTriggerExecutionScope jassAbilityBasicScope(final CAbility spellAbility,
|
||||
final CUnit spellAbilityUnit, final War3ID spellAbilityId) {
|
||||
final CommonTriggerExecutionScope scope = new CommonTriggerExecutionScope(null, TriggerExecutionScope.EMPTY);
|
||||
scope.spellAbility = spellAbility;
|
||||
scope.spellAbilityUnit = spellAbilityUnit;
|
||||
scope.triggeringUnit = spellAbilityUnit;
|
||||
scope.spellAbilityId = spellAbilityId;
|
||||
return scope;
|
||||
}
|
||||
|
||||
public static CommonTriggerExecutionScope jassAbilityBasicScope(final CAbility spellAbility,
|
||||
final CUnit spellAbilityUnit, final War3ID spellAbilityId, final int spellAbilityOrderId) {
|
||||
final CommonTriggerExecutionScope scope = new CommonTriggerExecutionScope(null, TriggerExecutionScope.EMPTY);
|
||||
scope.spellAbility = spellAbility;
|
||||
scope.spellAbilityUnit = spellAbilityUnit;
|
||||
scope.triggeringUnit = spellAbilityUnit;
|
||||
scope.spellAbilityId = spellAbilityId;
|
||||
scope.spellAbilityOrderId = spellAbilityOrderId;
|
||||
return scope;
|
||||
}
|
||||
|
||||
public static CommonTriggerExecutionScope jassAbilityBasicScope(final CAbility spellAbility,
|
||||
final CUnit spellAbilityUnit, final War3ID spellAbilityId, final int spellAbilityOrderId,
|
||||
final JassOrderCommandCardType spellAbilityTargetType, final JassOrder spellAbilityOrderCommandCard) {
|
||||
final CommonTriggerExecutionScope scope = new CommonTriggerExecutionScope(null, TriggerExecutionScope.EMPTY);
|
||||
scope.spellAbility = spellAbility;
|
||||
scope.spellAbilityUnit = spellAbilityUnit;
|
||||
scope.triggeringUnit = spellAbilityUnit;
|
||||
scope.spellAbilityId = spellAbilityId;
|
||||
scope.spellAbilityOrderId = spellAbilityOrderId;
|
||||
scope.spellAbilityTargetType = spellAbilityTargetType;
|
||||
scope.spellAbilityOrderCommandCard = spellAbilityOrderCommandCard;
|
||||
return scope;
|
||||
}
|
||||
|
||||
public static interface UnitEventScopeBuilder {
|
||||
CommonTriggerExecutionScope create(JassGameEventsWar3 triggerEventId, Trigger trigger, CUnit unit);
|
||||
}
|
||||
|
@ -92,11 +92,12 @@ public class AbilityDataUI {
|
||||
private final IconUI cancelTrainUI;
|
||||
private final IconUI rallyUI;
|
||||
private final IconUI selectSkillUI;
|
||||
private final String disabledPrefix;
|
||||
|
||||
public AbilityDataUI(final MutableObjectData abilityData, final MutableObjectData unitData,
|
||||
final MutableObjectData itemData, final MutableObjectData upgradeData, final GameUI gameUI,
|
||||
final War3MapViewer viewer) {
|
||||
final String disabledPrefix = gameUI.getSkinField("CommandButtonDisabledArtPath");
|
||||
this.disabledPrefix = gameUI.getSkinField("CommandButtonDisabledArtPath");
|
||||
for (final War3ID alias : abilityData.keySet()) {
|
||||
final MutableGameObject abilityTypeData = abilityData.get(alias);
|
||||
final String iconResearchPath = gameUI.trySkinField(abilityTypeData.getFieldAsString(ICON_RESEARCH, 0));
|
||||
@ -118,11 +119,11 @@ public class AbilityDataUI {
|
||||
final int iconTurnOffX = abilityTypeData.getFieldAsInteger(ICON_TURN_OFF_X, 0);
|
||||
final int iconTurnOffY = abilityTypeData.getFieldAsInteger(ICON_TURN_OFF_Y, 0);
|
||||
final Texture iconResearch = gameUI.loadTexture(iconResearchPath);
|
||||
final Texture iconResearchDisabled = gameUI.loadTexture(disable(iconResearchPath, disabledPrefix));
|
||||
final Texture iconResearchDisabled = gameUI.loadTexture(disable(iconResearchPath, this.disabledPrefix));
|
||||
final Texture iconNormal = gameUI.loadTexture(iconNormalPath);
|
||||
final Texture iconNormalDisabled = gameUI.loadTexture(disable(iconNormalPath, disabledPrefix));
|
||||
final Texture iconNormalDisabled = gameUI.loadTexture(disable(iconNormalPath, this.disabledPrefix));
|
||||
final Texture iconTurnOff = gameUI.loadTexture(iconTurnOffPath);
|
||||
final Texture iconTurnOffDisabled = gameUI.loadTexture(disable(iconTurnOffPath, disabledPrefix));
|
||||
final Texture iconTurnOffDisabled = gameUI.loadTexture(disable(iconTurnOffPath, this.disabledPrefix));
|
||||
|
||||
final List<String> casterArt = Arrays.asList(abilityTypeData.getFieldAsString(CASTER_ART, 0).split(","));
|
||||
final List<String> targetArt = Arrays.asList(abilityTypeData.getFieldAsString(TARGET_ART, 0).split(","));
|
||||
@ -157,7 +158,7 @@ public class AbilityDataUI {
|
||||
final String iconUberTip = abilityTypeData.getFieldAsString(UNIT_UBER_TIP, 0);
|
||||
final char iconHotkey = getHotkey(abilityTypeData, UNIT_HOTKEY);
|
||||
final Texture iconNormal = gameUI.loadTexture(iconNormalPath);
|
||||
final Texture iconNormalDisabled = gameUI.loadTexture(disable(iconNormalPath, disabledPrefix));
|
||||
final Texture iconNormalDisabled = gameUI.loadTexture(disable(iconNormalPath, this.disabledPrefix));
|
||||
this.rawcodeToUnitUI.put(alias, new UnitIconUI(iconNormal, iconNormalDisabled, iconNormalX, iconNormalY,
|
||||
iconTip, iconUberTip, iconHotkey, reviveTip, awakenTip));
|
||||
}
|
||||
@ -171,7 +172,7 @@ public class AbilityDataUI {
|
||||
final String iconDescription = abilityTypeData.getFieldAsString(ITEM_DESCRIPTION, 0);
|
||||
final char iconHotkey = getHotkey(abilityTypeData, ITEM_HOTKEY);
|
||||
final Texture iconNormal = gameUI.loadTexture(iconNormalPath);
|
||||
final Texture iconNormalDisabled = gameUI.loadTexture(disable(iconNormalPath, disabledPrefix));
|
||||
final Texture iconNormalDisabled = gameUI.loadTexture(disable(iconNormalPath, this.disabledPrefix));
|
||||
this.rawcodeToItemUI
|
||||
.put(alias,
|
||||
new ItemUI(
|
||||
@ -192,29 +193,29 @@ public class AbilityDataUI {
|
||||
.trySkinField(upgradeTypeData.getFieldAsString(UPGRADE_ICON_NORMAL, i));
|
||||
final char iconHotkey = getHotkey(upgradeTypeData, UPGRADE_HOTKEY, i);
|
||||
final Texture iconNormal = gameUI.loadTexture(iconNormalPath);
|
||||
final Texture iconNormalDisabled = gameUI.loadTexture(disable(iconNormalPath, disabledPrefix));
|
||||
final Texture iconNormalDisabled = gameUI.loadTexture(disable(iconNormalPath, this.disabledPrefix));
|
||||
upgradeIconsByLevel.add(new IconUI(iconNormal, iconNormalDisabled, iconNormalX, iconNormalY, iconTip,
|
||||
iconUberTip, iconHotkey));
|
||||
}
|
||||
this.rawcodeToUpgradeUI.put(alias, upgradeIconsByLevel);
|
||||
}
|
||||
this.moveUI = createBuiltInIconUI(gameUI, "CmdMove", disabledPrefix);
|
||||
this.stopUI = createBuiltInIconUI(gameUI, "CmdStop", disabledPrefix);
|
||||
this.holdPosUI = createBuiltInIconUI(gameUI, "CmdHoldPos", disabledPrefix);
|
||||
this.patrolUI = createBuiltInIconUI(gameUI, "CmdPatrol", disabledPrefix);
|
||||
this.attackUI = createBuiltInIconUI(gameUI, "CmdAttack", disabledPrefix);
|
||||
this.buildHumanUI = createBuiltInIconUI(gameUI, "CmdBuildHuman", disabledPrefix);
|
||||
this.buildOrcUI = createBuiltInIconUI(gameUI, "CmdBuildOrc", disabledPrefix);
|
||||
this.buildNightElfUI = createBuiltInIconUI(gameUI, "CmdBuildNightElf", disabledPrefix);
|
||||
this.buildUndeadUI = createBuiltInIconUI(gameUI, "CmdBuildUndead", disabledPrefix);
|
||||
this.buildNagaUI = createBuiltInIconUI(gameUI, "CmdBuildNaga", disabledPrefix);
|
||||
this.buildNeutralUI = createBuiltInIconUI(gameUI, "CmdBuild", disabledPrefix);
|
||||
this.attackGroundUI = createBuiltInIconUI(gameUI, "CmdAttackGround", disabledPrefix);
|
||||
this.cancelUI = createBuiltInIconUI(gameUI, "CmdCancel", disabledPrefix);
|
||||
this.cancelBuildUI = createBuiltInIconUI(gameUI, "CmdCancelBuild", disabledPrefix);
|
||||
this.cancelTrainUI = createBuiltInIconUI(gameUI, "CmdCancelTrain", disabledPrefix);
|
||||
this.rallyUI = createBuiltInIconUI(gameUI, "CmdRally", disabledPrefix);
|
||||
this.selectSkillUI = createBuiltInIconUI(gameUI, "CmdSelectSkill", disabledPrefix);
|
||||
this.moveUI = createBuiltInIconUI(gameUI, "CmdMove", this.disabledPrefix);
|
||||
this.stopUI = createBuiltInIconUI(gameUI, "CmdStop", this.disabledPrefix);
|
||||
this.holdPosUI = createBuiltInIconUI(gameUI, "CmdHoldPos", this.disabledPrefix);
|
||||
this.patrolUI = createBuiltInIconUI(gameUI, "CmdPatrol", this.disabledPrefix);
|
||||
this.attackUI = createBuiltInIconUI(gameUI, "CmdAttack", this.disabledPrefix);
|
||||
this.buildHumanUI = createBuiltInIconUI(gameUI, "CmdBuildHuman", this.disabledPrefix);
|
||||
this.buildOrcUI = createBuiltInIconUI(gameUI, "CmdBuildOrc", this.disabledPrefix);
|
||||
this.buildNightElfUI = createBuiltInIconUI(gameUI, "CmdBuildNightElf", this.disabledPrefix);
|
||||
this.buildUndeadUI = createBuiltInIconUI(gameUI, "CmdBuildUndead", this.disabledPrefix);
|
||||
this.buildNagaUI = createBuiltInIconUI(gameUI, "CmdBuildNaga", this.disabledPrefix);
|
||||
this.buildNeutralUI = createBuiltInIconUI(gameUI, "CmdBuild", this.disabledPrefix);
|
||||
this.attackGroundUI = createBuiltInIconUI(gameUI, "CmdAttackGround", this.disabledPrefix);
|
||||
this.cancelUI = createBuiltInIconUI(gameUI, "CmdCancel", this.disabledPrefix);
|
||||
this.cancelBuildUI = createBuiltInIconUI(gameUI, "CmdCancelBuild", this.disabledPrefix);
|
||||
this.cancelTrainUI = createBuiltInIconUI(gameUI, "CmdCancelTrain", this.disabledPrefix);
|
||||
this.rallyUI = createBuiltInIconUI(gameUI, "CmdRally", this.disabledPrefix);
|
||||
this.selectSkillUI = createBuiltInIconUI(gameUI, "CmdSelectSkill", this.disabledPrefix);
|
||||
}
|
||||
|
||||
private char getHotkey(final MutableGameObject abilityTypeData, final War3ID abilityHotkeyNormal) {
|
||||
@ -277,7 +278,7 @@ public class AbilityDataUI {
|
||||
return null;
|
||||
}
|
||||
|
||||
private static String disable(final String path, final String disabledPrefix) {
|
||||
public static String disable(final String path, final String disabledPrefix) {
|
||||
final int slashIndex = path.lastIndexOf('\\');
|
||||
String name = path;
|
||||
if (slashIndex != -1) {
|
||||
@ -354,4 +355,7 @@ public class AbilityDataUI {
|
||||
return this.selectSkillUI;
|
||||
}
|
||||
|
||||
public String getDisabledPrefix() {
|
||||
return this.disabledPrefix;
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.rendersim.commandbuttons;
|
||||
|
||||
import com.badlogic.gdx.graphics.Texture;
|
||||
import com.etheller.warsmash.parsers.fdf.GameUI;
|
||||
import com.etheller.warsmash.util.War3ID;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.rendersim.ability.AbilityDataUI;
|
||||
@ -27,9 +28,12 @@ import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.G
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.GenericSingleIconActiveAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.harvest.CAbilityReturnResources;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.hero.CAbilityHero;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.jass.CAbilityJass;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityQueue;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityRally;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityReviveHero;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.jass.CAbilityTypeJassDefinition.JassOrder;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.jass.CAbilityTypeJassDefinition.JassOrderCommandCardType;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.upgrade.CAbilityUpgrade;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.combat.attacks.CUnitAttack;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.orders.OrderIds;
|
||||
@ -172,6 +176,26 @@ public class CommandCardPopulatingAbilityVisitor implements CAbilityVisitor<Void
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void accept(final CAbilityJass ability) {
|
||||
if (ability.isIconShowing()) {
|
||||
for (final JassOrder order : ability.getType().getJassOrders()) {
|
||||
if (this.menuBaseOrderId == order.getContainerMenuOrderId()) {
|
||||
addCommandButton(ability, this.gameUI.loadTexture(order.getIconPath()),
|
||||
this.gameUI.loadTexture(
|
||||
AbilityDataUI.disable(order.getIconPath(), this.abilityDataUI.getDisabledPrefix())),
|
||||
order.getTip(), order.getUberTip(), order.getButtonPositionX(), order.getButtonPositionY(),
|
||||
ability.getHandleId(), order.getOrderId(),
|
||||
order.isAutoCastActive() ? order.getAutoCastOrderId() : order.getAutoCastUnOrderId(),
|
||||
order.isAutoCastActive(), order.getType() == JassOrderCommandCardType.MENU,
|
||||
order.getGoldCost(), order.getLumberCost(), order.getFoodCostDisplayOnly(),
|
||||
order.getManaCost(), order.getCharges(), order.getHotkey());
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void accept(final CAbilityOrcBuild ability) {
|
||||
handleBuildMenu(ability, this.abilityDataUI.getBuildOrcUI());
|
||||
@ -244,8 +268,18 @@ public class CommandCardPopulatingAbilityVisitor implements CAbilityVisitor<Void
|
||||
|
||||
private void addCommandButton(final CAbility ability, final IconUI iconUI, final String toolTip,
|
||||
final int buttonPosX, final int buttonPosY, final int handleId, final int orderId,
|
||||
final int autoCastOrderId, final boolean autoCastActive, final boolean menuButton, int goldCost,
|
||||
int lumberCost, int foodCost, final int manaCost, final int numberOverlay) {
|
||||
final int autoCastOrderId, final boolean autoCastActive, final boolean menuButton, final int goldCost,
|
||||
final int lumberCost, final int foodCost, final int manaCost, final int numberOverlay) {
|
||||
addCommandButton(ability, iconUI.getIcon(), iconUI.getIconDisabled(), toolTip, iconUI.getUberTip(), buttonPosX,
|
||||
buttonPosY, handleId, orderId, autoCastOrderId, autoCastActive, menuButton, goldCost, lumberCost,
|
||||
foodCost, manaCost, numberOverlay, iconUI.getHotkey());
|
||||
}
|
||||
|
||||
private void addCommandButton(final CAbility ability, final Texture icon, final Texture iconDisabled,
|
||||
final String toolTip, String uberTip, final int buttonPosX, final int buttonPosY, final int handleId,
|
||||
final int orderId, final int autoCastOrderId, final boolean autoCastActive, final boolean menuButton,
|
||||
int goldCost, int lumberCost, int foodCost, final int manaCost, final int numberOverlay,
|
||||
final char hotkey) {
|
||||
ability.checkCanUse(this.game, this.unit, orderId, this.previewCallback.reset());
|
||||
if (!this.previewCallback.techtreeMaxReached) {
|
||||
final boolean active = ((this.unit.getCurrentBehavior() != null)
|
||||
@ -253,7 +287,6 @@ public class CommandCardPopulatingAbilityVisitor implements CAbilityVisitor<Void
|
||||
final boolean disabled = ((ability != null) && ability.isDisabled()) || this.previewCallback.disabled;
|
||||
final float cooldownRemaining = this.previewCallback.cooldownRemaining;
|
||||
final float cooldownMax = this.previewCallback.cooldownMax;
|
||||
String uberTip = iconUI.getUberTip();
|
||||
if (disabled) {
|
||||
// dont show these on disabled
|
||||
goldCost = 0;
|
||||
@ -263,10 +296,9 @@ public class CommandCardPopulatingAbilityVisitor implements CAbilityVisitor<Void
|
||||
if (this.previewCallback.isShowingRequirements()) {
|
||||
uberTip = this.previewCallback.getRequirementsText() + "|r" + uberTip;
|
||||
}
|
||||
this.commandButtonListener.commandButton(buttonPosX, buttonPosY,
|
||||
disabled ? iconUI.getIconDisabled() : iconUI.getIcon(), handleId, disabled ? 0 : orderId,
|
||||
autoCastOrderId, active, autoCastActive, menuButton, toolTip, uberTip, iconUI.getHotkey(), goldCost,
|
||||
lumberCost, foodCost, manaCost, cooldownRemaining, cooldownMax, numberOverlay);
|
||||
this.commandButtonListener.commandButton(buttonPosX, buttonPosY, disabled ? iconDisabled : icon, handleId,
|
||||
disabled ? 0 : orderId, autoCastOrderId, active, autoCastActive, menuButton, toolTip, uberTip,
|
||||
hotkey, goldCost, lumberCost, foodCost, manaCost, cooldownRemaining, cooldownMax, numberOverlay);
|
||||
}
|
||||
}
|
||||
|
||||
@ -411,6 +443,11 @@ public class CommandCardPopulatingAbilityVisitor implements CAbilityVisitor<Void
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unknownReasonUseNotOk() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notEnoughResources(final ResourceType resource) {
|
||||
if (resource == ResourceType.MANA) {
|
||||
@ -487,6 +524,11 @@ public class CommandCardPopulatingAbilityVisitor implements CAbilityVisitor<Void
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void noChargesRemaining() {
|
||||
|
||||
}
|
||||
|
||||
public boolean isShowingRequirements() {
|
||||
return this.requirementsTextBuilder.length() != 0;
|
||||
}
|
||||
@ -512,9 +554,11 @@ public class CommandCardPopulatingAbilityVisitor implements CAbilityVisitor<Void
|
||||
if (this.multiSelect) {
|
||||
return null;
|
||||
}
|
||||
if (this.menuBaseOrderId == 0) {
|
||||
final int skillPoints = ability.getSkillPoints();
|
||||
addCommandButton(ability, this.abilityDataUI.getSelectSkillUI(), ability.getHandleId(), OrderIds.skillmenu,
|
||||
0, false, true, 0, 0, 0, 0, skillPoints != 0 ? skillPoints : -1);
|
||||
addCommandButton(ability, this.abilityDataUI.getSelectSkillUI(), ability.getHandleId(),
|
||||
OrderIds.skillmenu, 0, false, true, 0, 0, 0, 0, skillPoints != 0 ? skillPoints : -1);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
@ -114,6 +114,11 @@ public class CDestructable extends CWidget {
|
||||
return visitor.accept(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T visit(final CWidgetVisitor<T> visitor) {
|
||||
return visitor.accept(this);
|
||||
}
|
||||
|
||||
public CDestructableType getDestType() {
|
||||
return this.destType;
|
||||
}
|
||||
|
@ -65,6 +65,11 @@ public class CItem extends CWidget {
|
||||
return visitor.accept(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T visit(final CWidgetVisitor<T> visitor) {
|
||||
return visitor.accept(this);
|
||||
}
|
||||
|
||||
public War3ID getTypeId() {
|
||||
return this.typeId;
|
||||
}
|
||||
|
@ -1229,6 +1229,9 @@ public class CUnit extends CWidget {
|
||||
|
||||
public boolean canReachToPathing(final float range, final float rotationForPathing,
|
||||
final BufferedImage buildingPathingPixelMap, final float targetX, final float targetY) {
|
||||
if (buildingPathingPixelMap == null) {
|
||||
return canReach(targetX, targetY, range);
|
||||
}
|
||||
final int rotation = ((int) rotationForPathing + 450) % 360;
|
||||
final float relativeOffsetX = getX() - targetX;
|
||||
final float relativeOffsetY = getY() - targetY;
|
||||
@ -1753,6 +1756,11 @@ public class CUnit extends CWidget {
|
||||
return visitor.accept(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T visit(final CWidgetVisitor<T> visitor) {
|
||||
return visitor.accept(this);
|
||||
}
|
||||
|
||||
private static final class UseAbilityOnTargetByIdVisitor implements AbilityTargetVisitor<Void> {
|
||||
private static final UseAbilityOnTargetByIdVisitor INSTANCE = new UseAbilityOnTargetByIdVisitor();
|
||||
private CSimulation game;
|
||||
|
@ -73,6 +73,8 @@ public abstract class CWidget implements AbilityTarget, CHandle {
|
||||
|
||||
public abstract float getImpactZ();
|
||||
|
||||
public abstract <T> T visit(CWidgetVisitor<T> visitor);
|
||||
|
||||
public boolean isDead() {
|
||||
return this.life <= 0;
|
||||
}
|
||||
|
@ -0,0 +1,9 @@
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.simulation;
|
||||
|
||||
public interface CWidgetVisitor<T> {
|
||||
T accept(CUnit target);
|
||||
|
||||
T accept(CDestructable target);
|
||||
|
||||
T accept(CItem target);
|
||||
}
|
@ -12,6 +12,7 @@ import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.G
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.GenericSingleIconActiveAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.harvest.CAbilityReturnResources;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.hero.CAbilityHero;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.jass.CAbilityJass;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityQueue;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityRally;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityReviveHero;
|
||||
@ -63,4 +64,6 @@ public interface CAbilityVisitor<T> {
|
||||
T accept(GenericNoIconAbility ability);
|
||||
|
||||
T accept(CAbilityHero ability);
|
||||
|
||||
T accept(CAbilityJass ability);
|
||||
}
|
||||
|
@ -14,6 +14,7 @@ import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.G
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.GenericSingleIconActiveAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.harvest.CAbilityReturnResources;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.hero.CAbilityHero;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.jass.CAbilityJass;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityQueue;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityRally;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityReviveHero;
|
||||
@ -147,4 +148,12 @@ public class GetAbilityByRawcodeVisitor implements CAbilityVisitor<CLevelingAbil
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CLevelingAbility accept(final CAbilityJass ability) {
|
||||
if (this.rawcode.equals(ability.getAlias())) {
|
||||
return ability;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,110 @@
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.jass;
|
||||
|
||||
import com.etheller.warsmash.parsers.jass.scope.CommonTriggerExecutionScope;
|
||||
import com.etheller.warsmash.util.War3ID;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CSimulation;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CUnit;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CWidget;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.CAbilityVisitor;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.AbstractGenericAliasedAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.targeting.AbilityPointTarget;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.targeting.AbilityTarget;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.jass.CAbilityTypeJassDefinition;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.behaviors.CBehavior;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.util.AbilityActivationReceiver;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.util.AbilityTargetCheckReceiver;
|
||||
|
||||
public class CAbilityJass extends AbstractGenericAliasedAbility {
|
||||
private final CAbilityTypeJassDefinition typeDefinition;
|
||||
private CommonTriggerExecutionScope jassAbilityBasicScope;
|
||||
|
||||
public CAbilityJass(final int handleId, final War3ID alias, final CAbilityTypeJassDefinition type) {
|
||||
super(handleId, alias);
|
||||
this.typeDefinition = type;
|
||||
}
|
||||
|
||||
public CommonTriggerExecutionScope getJassAbilityBasicScope() {
|
||||
return this.jassAbilityBasicScope;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAdd(final CSimulation game, final CUnit unit) {
|
||||
this.jassAbilityBasicScope = CommonTriggerExecutionScope.jassAbilityBasicScope(this, unit, getAlias());
|
||||
this.typeDefinition.onAdd(game, this, unit);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRemove(final CSimulation game, final CUnit unit) {
|
||||
this.typeDefinition.onRemove(game, this, unit);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTick(final CSimulation game, final CUnit unit) {
|
||||
this.typeDefinition.onTick(game, this, unit);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeath(final CSimulation game, final CUnit cUnit) {
|
||||
this.typeDefinition.onDeath(game, this, cUnit);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancelFromQueue(final CSimulation game, final CUnit unit, final int orderId) {
|
||||
this.typeDefinition.onCancelFromQueue(game, this, unit, orderId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CBehavior begin(final CSimulation game, final CUnit caster, final int orderId, final CWidget target) {
|
||||
return this.typeDefinition.begin(game, this, caster, orderId, target);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CBehavior begin(final CSimulation game, final CUnit caster, final int orderId,
|
||||
final AbilityPointTarget point) {
|
||||
return this.typeDefinition.begin(game, this, caster, orderId, point);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CBehavior beginNoTarget(final CSimulation game, final CUnit caster, final int orderId) {
|
||||
return this.typeDefinition.beginNoTarget(game, this, caster, orderId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkCanTarget(final CSimulation game, final CUnit unit, final int orderId, final CWidget target,
|
||||
final AbilityTargetCheckReceiver<CWidget> receiver) {
|
||||
this.typeDefinition.checkCanTarget(game, this, unit, orderId, target, receiver);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkCanTarget(final CSimulation game, final CUnit unit, final int orderId,
|
||||
final AbilityPointTarget target, final AbilityTargetCheckReceiver<AbilityPointTarget> receiver) {
|
||||
this.typeDefinition.checkCanTarget(game, this, unit, orderId, target, receiver);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkCanTargetNoTarget(final CSimulation game, final CUnit unit, final int orderId,
|
||||
final AbilityTargetCheckReceiver<Void> receiver) {
|
||||
this.typeDefinition.checkCanTargetNoTarget(game, this, unit, orderId, receiver);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T visit(final CAbilityVisitor<T> visitor) {
|
||||
return visitor.accept(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void innerCheckCanUse(final CSimulation game, final CUnit unit, final int orderId,
|
||||
final AbilityActivationReceiver receiver) {
|
||||
this.typeDefinition.checkCanUse(game, this, unit, orderId, receiver);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkBeforeQueue(final CSimulation game, final CUnit caster, final int orderId,
|
||||
final AbilityTarget target) {
|
||||
return this.typeDefinition.checkBeforeQueue(game, this, caster, orderId, target);
|
||||
}
|
||||
|
||||
public CAbilityTypeJassDefinition getType() {
|
||||
return this.typeDefinition;
|
||||
}
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.impl;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.etheller.interpreter.ast.scope.GlobalScope;
|
||||
import com.etheller.warsmash.util.War3ID;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CSimulation;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.CAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.CLevelingAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.jass.CAbilityJass;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.CAbilityType;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.CAbilityTypeLevelData;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.jass.CAbilityTypeJassDefinition;
|
||||
|
||||
public class CAbilityTypeJass extends CAbilityType<CAbilityTypeLevelData> {
|
||||
|
||||
private final CAbilityTypeJassDefinition abilityTypeJassDefinition;
|
||||
|
||||
public CAbilityTypeJass(final War3ID alias, final War3ID code, final List<CAbilityTypeLevelData> levelData,
|
||||
final GlobalScope jassGlobalScope, final CAbilityTypeJassDefinition abilityTypeJassDefinition) {
|
||||
super(alias, code, levelData);
|
||||
this.abilityTypeJassDefinition = abilityTypeJassDefinition;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CAbility createAbility(final int handleId) {
|
||||
return new CAbilityJass(handleId, getAlias(), this.abilityTypeJassDefinition);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLevel(final CSimulation game, final CLevelingAbility existingAbility, final int level) {
|
||||
existingAbility.setLevel(level);
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.jass;
|
||||
|
||||
import com.etheller.interpreter.ast.scope.GlobalScope;
|
||||
import com.etheller.interpreter.ast.scope.TriggerExecutionScope;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.behaviors.CBehavior;
|
||||
|
||||
public interface BehaviorExpr {
|
||||
CBehavior evaluate(GlobalScope globalScope, TriggerExecutionScope triggerScope);
|
||||
}
|
@ -0,0 +1,708 @@
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.jass;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
|
||||
import com.etheller.interpreter.ast.function.JassFunction;
|
||||
import com.etheller.interpreter.ast.scope.GlobalScope;
|
||||
import com.etheller.interpreter.ast.scope.TriggerExecutionScope;
|
||||
import com.etheller.interpreter.ast.scope.trigger.TriggerBooleanExpression;
|
||||
import com.etheller.interpreter.ast.value.JassValue;
|
||||
import com.etheller.interpreter.ast.value.visitor.BooleanJassValueVisitor;
|
||||
import com.etheller.interpreter.ast.value.visitor.ObjectJassValueVisitor;
|
||||
import com.etheller.warsmash.parsers.jass.scope.CommonTriggerExecutionScope;
|
||||
import com.etheller.warsmash.units.manager.MutableObjectData.MutableGameObject;
|
||||
import com.etheller.warsmash.util.War3ID;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CDestructable;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CItem;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CSimulation;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CUnit;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CWidget;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CWidgetVisitor;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.jass.CAbilityJass;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.targeting.AbilityPointTarget;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.targeting.AbilityTarget;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.CAbilityType;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.CAbilityTypeLevelData;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.definitions.CAbilityTypeDefinition;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.definitions.impl.AbstractCAbilityTypeDefinition;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.impl.CAbilityTypeJass;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.behaviors.CBehavior;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.combat.CTargetType;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.players.CPlayer;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.util.AbilityActivationReceiver;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.util.AbilityTargetCheckReceiver;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.util.ResourceType;
|
||||
|
||||
public class CAbilityTypeJassDefinition extends AbstractCAbilityTypeDefinition<CAbilityTypeLevelData>
|
||||
implements CAbilityTypeDefinition {
|
||||
private JassFunction onAddJass;
|
||||
private JassFunction onRemoveJass;
|
||||
private JassFunction onTickJass;
|
||||
private JassFunction onDeathJass;
|
||||
private JassFunction onCancelFromQueueJass;
|
||||
private BehaviorExpr beginJass;
|
||||
private TriggerBooleanExpression checkBeforeQueueJass;
|
||||
private TriggerBooleanExpression checkTargetJass;
|
||||
private TriggerBooleanExpression checkUseJass;
|
||||
|
||||
private final List<JassOrder> jassOrders;
|
||||
|
||||
private final GlobalScope jassGlobalScope;
|
||||
|
||||
private boolean enabledWhileUnderConstruction;
|
||||
private boolean enabledWhileUpgrading;
|
||||
|
||||
private War3ID code;
|
||||
|
||||
public CAbilityTypeJassDefinition(final GlobalScope jassGlobalScope) {
|
||||
this.jassGlobalScope = jassGlobalScope;
|
||||
this.jassOrders = new ArrayList<>();
|
||||
}
|
||||
|
||||
public void setCode(final War3ID code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CAbilityTypeLevelData createLevelData(final MutableGameObject abilityEditorData, final int level) {
|
||||
final String targetsAllowedAtLevelString = abilityEditorData.getFieldAsString(TARGETS_ALLOWED, level);
|
||||
final EnumSet<CTargetType> targetsAllowedAtLevel = CTargetType.parseTargetTypeSet(targetsAllowedAtLevelString);
|
||||
return new CAbilityTypeLevelData(targetsAllowedAtLevel);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CAbilityType<?> innerCreateAbilityType(final War3ID alias, final MutableGameObject abilityEditorData,
|
||||
final List<CAbilityTypeLevelData> levelData) {
|
||||
return new CAbilityTypeJass(alias, this.code, levelData, this.jassGlobalScope, this);
|
||||
}
|
||||
|
||||
public void setOnAddJass(final JassFunction onAddJass) {
|
||||
this.onAddJass = onAddJass;
|
||||
}
|
||||
|
||||
public void setOnRemoveJass(final JassFunction onRemoveJass) {
|
||||
this.onRemoveJass = onRemoveJass;
|
||||
}
|
||||
|
||||
public void setOnTickJass(final JassFunction onTickJass) {
|
||||
this.onTickJass = onTickJass;
|
||||
}
|
||||
|
||||
public void setOnDeathJass(final JassFunction onDeathJass) {
|
||||
this.onDeathJass = onDeathJass;
|
||||
}
|
||||
|
||||
public void setOnCancelFromQueueJass(final JassFunction onCancelFromQueueJass) {
|
||||
this.onCancelFromQueueJass = onCancelFromQueueJass;
|
||||
}
|
||||
|
||||
public void setBeginJass(final BehaviorExpr beginJass) {
|
||||
this.beginJass = beginJass;
|
||||
}
|
||||
|
||||
public void setCheckBeforeQueueJass(final TriggerBooleanExpression checkBeforeQueueJass) {
|
||||
this.checkBeforeQueueJass = checkBeforeQueueJass;
|
||||
}
|
||||
|
||||
public void setCheckTargetCondition(final TriggerBooleanExpression checkTargetJass) {
|
||||
this.checkTargetJass = checkTargetJass;
|
||||
}
|
||||
|
||||
public void setCheckUseCondition(final TriggerBooleanExpression checkUseJass) {
|
||||
this.checkUseJass = checkUseJass;
|
||||
}
|
||||
|
||||
public boolean isEnabledWhileUnderConstruction() {
|
||||
return this.enabledWhileUnderConstruction;
|
||||
}
|
||||
|
||||
public void setEnabledWhileUnderConstruction(final boolean enabledWhileUnderConstruction) {
|
||||
this.enabledWhileUnderConstruction = enabledWhileUnderConstruction;
|
||||
}
|
||||
|
||||
public boolean isEnabledWhileUpgrading() {
|
||||
return this.enabledWhileUpgrading;
|
||||
}
|
||||
|
||||
public void setEnabledWhileUpgrading(final boolean enabledWhileUpgrading) {
|
||||
this.enabledWhileUpgrading = enabledWhileUpgrading;
|
||||
}
|
||||
|
||||
public void addJassOrder(final JassOrder order) {
|
||||
this.jassOrders.add(order);
|
||||
}
|
||||
|
||||
public void removeJassOrder(final JassOrder order) {
|
||||
this.jassOrders.remove(order);
|
||||
}
|
||||
|
||||
public List<JassOrder> getJassOrders() {
|
||||
return this.jassOrders;
|
||||
}
|
||||
|
||||
private void execute(final JassFunction function, final List<JassValue> args, final TriggerExecutionScope scope) {
|
||||
if (function != null) {
|
||||
function.call(args, this.jassGlobalScope, scope);
|
||||
}
|
||||
}
|
||||
|
||||
private JassValue evaluate(final JassFunction function, final List<JassValue> args,
|
||||
final TriggerExecutionScope scope) {
|
||||
if (function != null) {
|
||||
return function.call(args, this.jassGlobalScope, scope);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private CBehavior evaluateBehavior(final JassFunction function, final CSimulation game, final CUnit caster,
|
||||
final List<JassValue> args, final TriggerExecutionScope scope) {
|
||||
final JassValue userBehaviorValue = evaluate(function, args, scope);
|
||||
if (userBehaviorValue == null) {
|
||||
return caster.pollNextOrderBehavior(game);
|
||||
}
|
||||
final CBehavior userBehavior = userBehaviorValue.visit(ObjectJassValueVisitor.getInstance());
|
||||
return userBehavior;
|
||||
}
|
||||
|
||||
private boolean evaluateBoolean(final JassFunction function, final CSimulation game, final CUnit caster,
|
||||
final List<JassValue> args, final TriggerExecutionScope scope) {
|
||||
final JassValue userBooleanValue = evaluate(function, args, scope);
|
||||
if (userBooleanValue == null) {
|
||||
return false;
|
||||
}
|
||||
return userBooleanValue.visit(BooleanJassValueVisitor.getInstance());
|
||||
}
|
||||
|
||||
public void onAdd(final CSimulation game, final CAbilityJass abilityJass, final CUnit unit) {
|
||||
execute(this.onAddJass, Collections.emptyList(), abilityJass.getJassAbilityBasicScope());
|
||||
}
|
||||
|
||||
public void onRemove(final CSimulation game, final CAbilityJass abilityJass, final CUnit unit) {
|
||||
execute(this.onRemoveJass, Collections.emptyList(), abilityJass.getJassAbilityBasicScope());
|
||||
}
|
||||
|
||||
public void onTick(final CSimulation game, final CAbilityJass abilityJass, final CUnit unit) {
|
||||
execute(this.onTickJass, Collections.emptyList(), abilityJass.getJassAbilityBasicScope());
|
||||
}
|
||||
|
||||
public void onDeath(final CSimulation game, final CAbilityJass abilityJass, final CUnit unit) {
|
||||
execute(this.onDeathJass, Collections.emptyList(), abilityJass.getJassAbilityBasicScope());
|
||||
}
|
||||
|
||||
public void onCancelFromQueue(final CSimulation game, final CAbilityJass abilityJass, final CUnit unit,
|
||||
final int orderId) {
|
||||
execute(this.onCancelFromQueueJass, Collections.emptyList(),
|
||||
CommonTriggerExecutionScope.jassAbilityBasicScope(abilityJass, unit, abilityJass.getAlias(), orderId));
|
||||
}
|
||||
|
||||
public CBehavior begin(final CSimulation game, final CAbilityJass abilityJass, final CUnit caster,
|
||||
final int orderId, final CWidget target) {
|
||||
final JassOrder orderCommandCardIcon = getOrderCommandCardIcon(game, caster, orderId);
|
||||
if (orderCommandCardIcon.type == JassOrderCommandCardType.INSTANT_NO_TARGET) {
|
||||
if (this.beginJass != null) {
|
||||
CommonTriggerExecutionScope scope;
|
||||
scope = target.visit(new CWidgetVisitor<CommonTriggerExecutionScope>() {
|
||||
@Override
|
||||
public CommonTriggerExecutionScope accept(final CUnit target) {
|
||||
return CommonTriggerExecutionScope.jassAbilityTargetScope(abilityJass, caster, target,
|
||||
abilityJass.getAlias(), orderId, orderCommandCardIcon.type, orderCommandCardIcon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonTriggerExecutionScope accept(final CDestructable target) {
|
||||
return CommonTriggerExecutionScope.jassAbilityTargetScope(abilityJass, caster, target,
|
||||
abilityJass.getAlias(), orderId, orderCommandCardIcon.type, orderCommandCardIcon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonTriggerExecutionScope accept(final CItem target) {
|
||||
return CommonTriggerExecutionScope.jassAbilityTargetScope(abilityJass, caster, target,
|
||||
abilityJass.getAlias(), orderId, orderCommandCardIcon.type, orderCommandCardIcon);
|
||||
}
|
||||
});
|
||||
return this.beginJass.evaluate(this.jassGlobalScope, scope);
|
||||
}
|
||||
else {
|
||||
return caster.pollNextOrderBehavior(game);
|
||||
}
|
||||
}
|
||||
else {
|
||||
return caster.pollNextOrderBehavior(game);
|
||||
}
|
||||
}
|
||||
|
||||
public CBehavior begin(final CSimulation game, final CAbilityJass abilityJass, final CUnit caster,
|
||||
final int orderId, final AbilityPointTarget point) {
|
||||
final JassOrder orderCommandCardIcon = getOrderCommandCardIcon(game, caster, orderId);
|
||||
if (orderCommandCardIcon.type == JassOrderCommandCardType.INSTANT_NO_TARGET) {
|
||||
if (this.beginJass != null) {
|
||||
return this.beginJass.evaluate(this.jassGlobalScope,
|
||||
CommonTriggerExecutionScope.jassAbilityPointScope(abilityJass, caster, point,
|
||||
abilityJass.getAlias(), orderId, orderCommandCardIcon.type, orderCommandCardIcon));
|
||||
}
|
||||
else {
|
||||
return caster.pollNextOrderBehavior(game);
|
||||
}
|
||||
}
|
||||
else {
|
||||
return caster.pollNextOrderBehavior(game);
|
||||
}
|
||||
}
|
||||
|
||||
public CBehavior beginNoTarget(final CSimulation game, final CAbilityJass abilityJass, final CUnit caster,
|
||||
final int orderId) {
|
||||
final JassOrder orderCommandCardIcon = getOrderCommandCardIcon(game, caster, orderId);
|
||||
if (orderCommandCardIcon.type == JassOrderCommandCardType.INSTANT_NO_TARGET) {
|
||||
if (this.beginJass != null) {
|
||||
return this.beginJass.evaluate(this.jassGlobalScope,
|
||||
CommonTriggerExecutionScope.jassAbilityNoTargetScope(abilityJass, caster,
|
||||
abilityJass.getAlias(), orderId, orderCommandCardIcon.type, orderCommandCardIcon));
|
||||
}
|
||||
else {
|
||||
return caster.pollNextOrderBehavior(game);
|
||||
}
|
||||
}
|
||||
else {
|
||||
return caster.pollNextOrderBehavior(game);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean checkBeforeQueue(final CSimulation game, final CAbilityJass abilityJass, final CUnit caster,
|
||||
final int orderId, final AbilityTarget target) {
|
||||
if (orderId != 0) {
|
||||
for (final JassOrder order : this.jassOrders) {
|
||||
if (order.autoCastOrderId == orderId) {
|
||||
order.autoCastActive = true;
|
||||
return false;
|
||||
}
|
||||
else if (order.autoCastUnOrderId == orderId) {
|
||||
order.autoCastActive = false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
final JassOrder orderCommandCardIcon = getOrderCommandCardIcon(game, caster, orderId);
|
||||
if (orderCommandCardIcon.type == JassOrderCommandCardType.INSTANT_NO_TARGET_NO_INTERRUPT) {
|
||||
if (this.checkBeforeQueueJass != null) {
|
||||
return this.checkBeforeQueueJass.evaluate(this.jassGlobalScope,
|
||||
CommonTriggerExecutionScope.jassAbilityNoTargetScope(abilityJass, caster,
|
||||
abilityJass.getAlias(), orderId, orderCommandCardIcon.type, orderCommandCardIcon));
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public void checkCanTarget(final CSimulation game, final CAbilityJass abilityJass, final CUnit unit,
|
||||
final int orderId, final CWidget target, final AbilityTargetCheckReceiver<CWidget> receiver) {
|
||||
final JassOrder orderCommandCardIcon = getOrderCommandCardIcon(game, unit, orderId);
|
||||
if ((orderCommandCardIcon != null) && ((orderCommandCardIcon.type == JassOrderCommandCardType.UNIT_TARGET)
|
||||
|| (orderCommandCardIcon.type == JassOrderCommandCardType.UNIT_OR_POINT_TARGET))) {
|
||||
if (this.checkTargetJass != null) {
|
||||
CommonTriggerExecutionScope scope;
|
||||
scope = target.visit(new CWidgetVisitor<CommonTriggerExecutionScope>() {
|
||||
@Override
|
||||
public CommonTriggerExecutionScope accept(final CUnit target) {
|
||||
return CommonTriggerExecutionScope.jassAbilityTargetScope(abilityJass, unit, target,
|
||||
abilityJass.getAlias(), orderId, orderCommandCardIcon.type, orderCommandCardIcon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonTriggerExecutionScope accept(final CDestructable target) {
|
||||
return CommonTriggerExecutionScope.jassAbilityTargetScope(abilityJass, unit, target,
|
||||
abilityJass.getAlias(), orderId, orderCommandCardIcon.type, orderCommandCardIcon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonTriggerExecutionScope accept(final CItem target) {
|
||||
return CommonTriggerExecutionScope.jassAbilityTargetScope(abilityJass, unit, target,
|
||||
abilityJass.getAlias(), orderId, orderCommandCardIcon.type, orderCommandCardIcon);
|
||||
}
|
||||
});
|
||||
if (this.checkTargetJass.evaluate(this.jassGlobalScope, scope)) {
|
||||
receiver.targetOk(target);
|
||||
}
|
||||
else {
|
||||
receiver.orderIdNotAccepted();
|
||||
}
|
||||
}
|
||||
else {
|
||||
receiver.targetOk(target);
|
||||
}
|
||||
}
|
||||
else {
|
||||
receiver.orderIdNotAccepted();
|
||||
}
|
||||
}
|
||||
|
||||
public void checkCanTarget(final CSimulation game, final CAbilityJass abilityJass, final CUnit unit,
|
||||
final int orderId, final AbilityPointTarget target,
|
||||
final AbilityTargetCheckReceiver<AbilityPointTarget> receiver) {
|
||||
final JassOrder orderCommandCardIcon = getOrderCommandCardIcon(game, unit, orderId);
|
||||
if ((orderCommandCardIcon != null) && ((orderCommandCardIcon.type == JassOrderCommandCardType.POINT_TARGET)
|
||||
|| (orderCommandCardIcon.type == JassOrderCommandCardType.UNIT_OR_POINT_TARGET))) {
|
||||
if (this.checkTargetJass != null) {
|
||||
if (this.checkTargetJass.evaluate(this.jassGlobalScope,
|
||||
CommonTriggerExecutionScope.jassAbilityPointScope(abilityJass, unit, target,
|
||||
abilityJass.getAlias(), orderId, orderCommandCardIcon.type, orderCommandCardIcon))) {
|
||||
receiver.targetOk(target);
|
||||
}
|
||||
else {
|
||||
receiver.orderIdNotAccepted();
|
||||
}
|
||||
}
|
||||
else {
|
||||
receiver.targetOk(target);
|
||||
}
|
||||
}
|
||||
else {
|
||||
receiver.orderIdNotAccepted();
|
||||
}
|
||||
}
|
||||
|
||||
public void checkCanTargetNoTarget(final CSimulation game, final CAbilityJass abilityJass, final CUnit unit,
|
||||
final int orderId, final AbilityTargetCheckReceiver<Void> receiver) {
|
||||
final JassOrder orderCommandCardIcon = getOrderCommandCardIcon(game, unit, orderId);
|
||||
if ((orderCommandCardIcon != null)
|
||||
&& (orderCommandCardIcon.type == JassOrderCommandCardType.INSTANT_NO_TARGET)) {
|
||||
if (this.checkTargetJass != null) {
|
||||
if (this.checkTargetJass.evaluate(this.jassGlobalScope,
|
||||
CommonTriggerExecutionScope.jassAbilityNoTargetScope(abilityJass, unit, abilityJass.getAlias(),
|
||||
orderId, orderCommandCardIcon.type, orderCommandCardIcon))) {
|
||||
receiver.targetOk(null);
|
||||
}
|
||||
else {
|
||||
receiver.orderIdNotAccepted();
|
||||
}
|
||||
}
|
||||
else {
|
||||
receiver.targetOk(null);
|
||||
}
|
||||
}
|
||||
else {
|
||||
receiver.orderIdNotAccepted();
|
||||
}
|
||||
}
|
||||
|
||||
public void checkCanUse(final CSimulation game, final CAbilityJass abilityJass, final CUnit unit, final int orderId,
|
||||
final AbilityActivationReceiver receiver) {
|
||||
final JassOrder orderCommandCardIcon = getOrderCommandCardIcon(game, unit, orderId);
|
||||
if ((orderCommandCardIcon == null) || orderCommandCardIcon.disabled) {
|
||||
receiver.disabled();
|
||||
}
|
||||
else if (orderCommandCardIcon.type == JassOrderCommandCardType.PASSIVE) {
|
||||
receiver.notAnActiveAbility();
|
||||
}
|
||||
else if (orderCommandCardIcon.charges == 0) {
|
||||
receiver.noChargesRemaining();
|
||||
}
|
||||
else if (unit.getMana() < orderCommandCardIcon.manaCost) {
|
||||
receiver.notEnoughResources(ResourceType.MANA);
|
||||
}
|
||||
else {
|
||||
final CPlayer player = game.getPlayer(unit.getPlayerIndex());
|
||||
if (player.getGold() < orderCommandCardIcon.goldCost) {
|
||||
receiver.notEnoughResources(ResourceType.GOLD);
|
||||
}
|
||||
else if (player.getLumber() < orderCommandCardIcon.lumberCost) {
|
||||
receiver.notEnoughResources(ResourceType.LUMBER);
|
||||
}
|
||||
else if ((player.getFoodUsed() + orderCommandCardIcon.foodCostDisplayOnly) < player.getFoodCap()) {
|
||||
receiver.notEnoughResources(ResourceType.FOOD);
|
||||
}
|
||||
else {
|
||||
if (this.checkUseJass != null) {
|
||||
if (this.checkUseJass.evaluate(this.jassGlobalScope,
|
||||
CommonTriggerExecutionScope.jassAbilityBasicScope(abilityJass, unit, abilityJass.getAlias(),
|
||||
orderId, orderCommandCardIcon.type, orderCommandCardIcon))) {
|
||||
receiver.useOk();
|
||||
}
|
||||
else {
|
||||
receiver.unknownReasonUseNotOk();
|
||||
}
|
||||
}
|
||||
else {
|
||||
receiver.useOk();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public JassOrder getOrderCommandCardIcon(final CSimulation game, final CUnit unit, final int orderId) {
|
||||
JassOrder commandCardIconToUse = null;
|
||||
// TODO for now this is trying to disambiguate between multiple icons with the
|
||||
// same ID if you have
|
||||
// them. I try to put forward a best guess, but that's generally a broken
|
||||
// concept and maybe later
|
||||
// this function should just be simplified to return based on orderID (such as
|
||||
// if we just used
|
||||
// a simple map lookup). Two icons on same ability with same order ID should not
|
||||
// be allowed.
|
||||
for (final JassOrder orderCommandCardIcon : this.jassOrders) {
|
||||
if (orderCommandCardIcon.orderId == orderId) {
|
||||
if (commandCardIconToUse == null) {
|
||||
commandCardIconToUse = orderCommandCardIcon;
|
||||
}
|
||||
if (orderCommandCardIcon.disabled) {
|
||||
continue;
|
||||
}
|
||||
if (orderCommandCardIcon.type == JassOrderCommandCardType.PASSIVE) {
|
||||
continue;
|
||||
}
|
||||
if (orderCommandCardIcon.charges == 0) {
|
||||
continue;
|
||||
}
|
||||
if (unit.getMana() < orderCommandCardIcon.manaCost) {
|
||||
continue;
|
||||
}
|
||||
final CPlayer player = game.getPlayer(unit.getPlayerIndex());
|
||||
if (player.getGold() < orderCommandCardIcon.goldCost) {
|
||||
continue;
|
||||
}
|
||||
if (player.getLumber() < orderCommandCardIcon.lumberCost) {
|
||||
continue;
|
||||
}
|
||||
if ((player.getFoodUsed() + orderCommandCardIcon.foodCostDisplayOnly) < player.getFoodCap()) {
|
||||
continue;
|
||||
}
|
||||
commandCardIconToUse = orderCommandCardIcon;
|
||||
}
|
||||
}
|
||||
return commandCardIconToUse;
|
||||
}
|
||||
|
||||
public static final class JassOrder {
|
||||
private static final int INFINITE_CHARGES = -1;
|
||||
|
||||
private int orderId;
|
||||
private int autoCastOrderId;
|
||||
private int autoCastUnOrderId;
|
||||
private int containerMenuOrderId;
|
||||
private boolean disabled;
|
||||
private int manaCost;
|
||||
private int goldCost;
|
||||
private int lumberCost;
|
||||
private int charges = INFINITE_CHARGES;
|
||||
private int foodCostDisplayOnly;
|
||||
private JassOrderCommandCardType type;
|
||||
private boolean autoCastActive;
|
||||
|
||||
// UI
|
||||
private boolean hidden;
|
||||
private String iconPath;
|
||||
private int buttonPositionX;
|
||||
private int buttonPositionY;
|
||||
private String tip;
|
||||
private String uberTip;
|
||||
private char hotkey;
|
||||
|
||||
private String mouseTargetModelPath;
|
||||
private String mouseTargetPathingMap;
|
||||
private War3ID previewBuildUnitId;
|
||||
private float mouseTargetRadius;
|
||||
|
||||
public JassOrder(final int orderId, final int buttonPositionX, final int buttonPositionY) {
|
||||
this.orderId = orderId;
|
||||
this.buttonPositionX = buttonPositionX;
|
||||
this.buttonPositionY = buttonPositionY;
|
||||
}
|
||||
|
||||
public int getOrderId() {
|
||||
return this.orderId;
|
||||
}
|
||||
|
||||
public void setOrderId(final int orderId) {
|
||||
this.orderId = orderId;
|
||||
}
|
||||
|
||||
public int getAutoCastOrderId() {
|
||||
return this.autoCastOrderId;
|
||||
}
|
||||
|
||||
public void setAutoCastOrderId(final int autoCastOrderId) {
|
||||
this.autoCastOrderId = autoCastOrderId;
|
||||
}
|
||||
|
||||
public int getAutoCastUnOrderId() {
|
||||
return this.autoCastUnOrderId;
|
||||
}
|
||||
|
||||
public void setAutoCastUnOrderId(final int autoCastUnOrderId) {
|
||||
this.autoCastUnOrderId = autoCastUnOrderId;
|
||||
}
|
||||
|
||||
public int getContainerMenuOrderId() {
|
||||
return this.containerMenuOrderId;
|
||||
}
|
||||
|
||||
public void setContainerMenuOrderId(final int containerMenuOrderId) {
|
||||
this.containerMenuOrderId = containerMenuOrderId;
|
||||
}
|
||||
|
||||
public boolean isDisabled() {
|
||||
return this.disabled;
|
||||
}
|
||||
|
||||
public void setDisabled(final boolean disabled) {
|
||||
this.disabled = disabled;
|
||||
}
|
||||
|
||||
public int getManaCost() {
|
||||
return this.manaCost;
|
||||
}
|
||||
|
||||
public void setManaCost(final int manaCost) {
|
||||
this.manaCost = manaCost;
|
||||
}
|
||||
|
||||
public int getGoldCost() {
|
||||
return this.goldCost;
|
||||
}
|
||||
|
||||
public void setGoldCost(final int goldCost) {
|
||||
this.goldCost = goldCost;
|
||||
}
|
||||
|
||||
public int getLumberCost() {
|
||||
return this.lumberCost;
|
||||
}
|
||||
|
||||
public void setLumberCost(final int lumberCost) {
|
||||
this.lumberCost = lumberCost;
|
||||
}
|
||||
|
||||
public int getCharges() {
|
||||
return this.charges;
|
||||
}
|
||||
|
||||
public void setCharges(final int charges) {
|
||||
this.charges = charges;
|
||||
}
|
||||
|
||||
public int getFoodCostDisplayOnly() {
|
||||
return this.foodCostDisplayOnly;
|
||||
}
|
||||
|
||||
public void setFoodCostDisplayOnly(final int foodCostDisplayOnly) {
|
||||
this.foodCostDisplayOnly = foodCostDisplayOnly;
|
||||
}
|
||||
|
||||
public JassOrderCommandCardType getType() {
|
||||
return this.type;
|
||||
}
|
||||
|
||||
public void setType(final JassOrderCommandCardType type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public boolean isAutoCastActive() {
|
||||
return this.autoCastActive;
|
||||
}
|
||||
|
||||
public void setAutoCastActive(final boolean autoCastActive) {
|
||||
this.autoCastActive = autoCastActive;
|
||||
}
|
||||
|
||||
public boolean isHidden() {
|
||||
return this.hidden;
|
||||
}
|
||||
|
||||
public void setHidden(final boolean hidden) {
|
||||
this.hidden = hidden;
|
||||
}
|
||||
|
||||
public String getIconPath() {
|
||||
return this.iconPath;
|
||||
}
|
||||
|
||||
public void setIconPath(final String iconPath) {
|
||||
this.iconPath = iconPath;
|
||||
}
|
||||
|
||||
public int getButtonPositionX() {
|
||||
return this.buttonPositionX;
|
||||
}
|
||||
|
||||
public void setButtonPositionX(final int buttonPositionX) {
|
||||
this.buttonPositionX = buttonPositionX;
|
||||
}
|
||||
|
||||
public int getButtonPositionY() {
|
||||
return this.buttonPositionY;
|
||||
}
|
||||
|
||||
public void setButtonPositionY(final int buttonPositionY) {
|
||||
this.buttonPositionY = buttonPositionY;
|
||||
}
|
||||
|
||||
public String getTip() {
|
||||
return this.tip;
|
||||
}
|
||||
|
||||
public void setTip(final String tip) {
|
||||
this.tip = tip;
|
||||
}
|
||||
|
||||
public String getUberTip() {
|
||||
return this.uberTip;
|
||||
}
|
||||
|
||||
public void setUberTip(final String uberTip) {
|
||||
this.uberTip = uberTip;
|
||||
}
|
||||
|
||||
public char getHotkey() {
|
||||
return this.hotkey;
|
||||
}
|
||||
|
||||
public void setHotkey(final char hotkey) {
|
||||
this.hotkey = hotkey;
|
||||
}
|
||||
|
||||
public String getMouseTargetModelPath() {
|
||||
return this.mouseTargetModelPath;
|
||||
}
|
||||
|
||||
public void setMouseTargetModelPath(final String mouseTargetModelPath) {
|
||||
this.mouseTargetModelPath = mouseTargetModelPath;
|
||||
}
|
||||
|
||||
public String getMouseTargetPathingMap() {
|
||||
return this.mouseTargetPathingMap;
|
||||
}
|
||||
|
||||
public void setMouseTargetPathingMap(final String mouseTargetPathingMap) {
|
||||
this.mouseTargetPathingMap = mouseTargetPathingMap;
|
||||
}
|
||||
|
||||
public War3ID getPreviewBuildUnitId() {
|
||||
return this.previewBuildUnitId;
|
||||
}
|
||||
|
||||
public void setPreviewBuildUnitId(final War3ID previewBuildUnitId) {
|
||||
this.previewBuildUnitId = previewBuildUnitId;
|
||||
}
|
||||
|
||||
public float getMouseTargetRadius() {
|
||||
return this.mouseTargetRadius;
|
||||
}
|
||||
|
||||
public void setMouseTargetRadius(final float mouseTargetRadius) {
|
||||
this.mouseTargetRadius = mouseTargetRadius;
|
||||
}
|
||||
}
|
||||
|
||||
public static enum JassOrderCommandCardType {
|
||||
INSTANT_NO_TARGET, UNIT_TARGET, POINT_TARGET, UNIT_OR_POINT_TARGET, INSTANT_NO_TARGET_NO_INTERRUPT, PASSIVE,
|
||||
MENU;
|
||||
|
||||
public static JassOrderCommandCardType[] VALUES = values();
|
||||
}
|
||||
}
|
@ -4,6 +4,7 @@ import com.etheller.warsmash.viewer5.handlers.w3x.AnimationTokens.PrimaryTag;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.SequenceUtils;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CSimulation;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CUnit;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CWidget;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.targeting.AbilityTargetStillAliveVisitor;
|
||||
|
||||
public class CBehaviorFollow extends CAbstractRangedBehavior {
|
||||
@ -15,7 +16,7 @@ public class CBehaviorFollow extends CAbstractRangedBehavior {
|
||||
super(unit);
|
||||
}
|
||||
|
||||
public CBehavior reset(final int higlightOrderId, final CUnit target) {
|
||||
public CBehavior reset(final int higlightOrderId, final CWidget target) {
|
||||
this.higlightOrderId = higlightOrderId;
|
||||
return innerReset(target);
|
||||
}
|
||||
@ -27,7 +28,7 @@ public class CBehaviorFollow extends CAbstractRangedBehavior {
|
||||
|
||||
@Override
|
||||
public boolean isWithinRange(final CSimulation simulation) {
|
||||
if(justAutoAttacked = this.unit.autoAcquireAttackTargets(simulation, false)) {
|
||||
if (this.justAutoAttacked = this.unit.autoAcquireAttackTargets(simulation, false)) {
|
||||
return true;
|
||||
}
|
||||
return this.unit.canReach(this.target, this.unit.getAcquisitionRange());
|
||||
@ -42,7 +43,7 @@ public class CBehaviorFollow extends CAbstractRangedBehavior {
|
||||
|
||||
@Override
|
||||
protected CBehavior updateOnInvalidTarget(final CSimulation simulation) {
|
||||
unit.setDefaultBehavior(unit.getStopBehavior());
|
||||
this.unit.setDefaultBehavior(this.unit.getStopBehavior());
|
||||
return this.unit.pollNextOrderBehavior(simulation);
|
||||
}
|
||||
|
||||
@ -50,7 +51,7 @@ public class CBehaviorFollow extends CAbstractRangedBehavior {
|
||||
protected boolean checkTargetStillValid(final CSimulation simulation) {
|
||||
if (this.justAutoAttacked) {
|
||||
this.justAutoAttacked = false;
|
||||
this.unit.getMoveBehavior().reset(target, this, false);
|
||||
this.unit.getMoveBehavior().reset(this.target, this, false);
|
||||
}
|
||||
return this.target.visit(AbilityTargetStillAliveVisitor.INSTANCE);
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.G
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.GenericSingleIconActiveAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.harvest.CAbilityReturnResources;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.hero.CAbilityHero;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.jass.CAbilityJass;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityQueue;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityRally;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityReviveHero;
|
||||
@ -157,4 +158,11 @@ public class AbilityDisableWhileUnderConstructionVisitor implements CAbilityVisi
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void accept(final CAbilityJass ability) {
|
||||
final boolean enabledWhileUnderConstruction = ability.getType().isEnabledWhileUnderConstruction();
|
||||
ability.setDisabled(!enabledWhileUnderConstruction);
|
||||
ability.setIconShowing(enabledWhileUnderConstruction);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.G
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.GenericSingleIconActiveAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.harvest.CAbilityReturnResources;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.hero.CAbilityHero;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.jass.CAbilityJass;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityQueue;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityRally;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityReviveHero;
|
||||
@ -156,4 +157,12 @@ public class AbilityDisableWhileUpgradingVisitor implements CAbilityVisitor<Void
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void accept(final CAbilityJass ability) {
|
||||
final boolean enabledWhileUpgrading = ability.getType().isEnabledWhileUpgrading();
|
||||
ability.setDisabled(!enabledWhileUpgrading);
|
||||
ability.setIconShowing(enabledWhileUpgrading);
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -54,12 +54,12 @@ public class CBehaviorCarrionSwarmDummy extends CAbstractRangedBehavior {
|
||||
protected CBehavior update(final CSimulation simulation, final boolean withinFacingWindow) {
|
||||
final int playerIndex = this.unit.getPlayerIndex();
|
||||
if (this.target instanceof AbilityPointTarget) {
|
||||
simulation.getPlayer(playerIndex).fireAbilityEffectEventsPoint(this.unit,
|
||||
simulation.getPlayer(playerIndex).fireAbilityEffectEventsPoint(this.abilityCarrionSwarmDummy, this.unit,
|
||||
((AbilityPointTarget) this.target), this.abilityCarrionSwarmDummy.getAlias());
|
||||
}
|
||||
else if (this.target instanceof CUnit) {
|
||||
simulation.getPlayer(playerIndex).fireAbilityEffectEventsTarget(this.unit, ((CUnit) this.target),
|
||||
this.abilityCarrionSwarmDummy.getAlias());
|
||||
simulation.getPlayer(playerIndex).fireAbilityEffectEventsTarget(this.abilityCarrionSwarmDummy, this.unit,
|
||||
((CUnit) this.target), this.abilityCarrionSwarmDummy.getAlias());
|
||||
} // TODO other kinds of widgets
|
||||
return this.unit.pollNextOrderBehavior(simulation);
|
||||
}
|
||||
|
@ -36,6 +36,7 @@ import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.def
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.definitions.impl.CAbilityTypeDefinitionLoad;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.definitions.impl.CAbilityTypeDefinitionReturnResources;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.definitions.impl.CAbilityTypeDefinitionWispHarvest;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.jass.CAbilityTypeJassDefinition;
|
||||
|
||||
public class CAbilityData {
|
||||
private static final War3ID REQUIRED_LEVEL = War3ID.fromString("arlv");
|
||||
@ -90,6 +91,10 @@ public class CAbilityData {
|
||||
this.codeToAbilityTypeDefinition.put(War3ID.fromString("Adro"), new CAbilityTypeDefinitionDrop());
|
||||
}
|
||||
|
||||
public void registerJassType(final War3ID war3id, final CAbilityTypeJassDefinition whichAbilityType) {
|
||||
this.codeToAbilityTypeDefinition.put(war3id, whichAbilityType);
|
||||
}
|
||||
|
||||
public CAbilityType<?> getAbilityType(final War3ID alias) {
|
||||
CAbilityType<?> abilityType = this.aliasToAbilityType.get(alias);
|
||||
if (abilityType == null) {
|
||||
|
@ -17,6 +17,7 @@ import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CPlayerStateListene
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CSimulation;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CUnit;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CUnitType;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.CAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.targeting.AbilityPointTarget;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.config.CBasePlayer;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.trigger.JassGameEventsWar3;
|
||||
@ -469,28 +470,28 @@ public class CPlayer extends CBasePlayer {
|
||||
return this.handicap;
|
||||
}
|
||||
|
||||
public void fireAbilityEffectEventsTarget(final CUnit spellAbilityUnit, final CUnit spellTargetUnit,
|
||||
final War3ID alias) {
|
||||
public void fireAbilityEffectEventsTarget(final CAbility spellAbility, final CUnit spellAbilityUnit,
|
||||
final CUnit spellTargetUnit, final War3ID alias) {
|
||||
final List<CPlayerEvent> eventList = getEventList(JassGameEventsWar3.EVENT_PLAYER_UNIT_SPELL_EFFECT);
|
||||
if (eventList != null) {
|
||||
for (final CPlayerEvent event : eventList) {
|
||||
event.fire(spellAbilityUnit,
|
||||
CommonTriggerExecutionScope.unitSpellEffectTargetScope(
|
||||
JassGameEventsWar3.EVENT_PLAYER_UNIT_SPELL_EFFECT, event.getTrigger(), spellAbilityUnit,
|
||||
spellTargetUnit, alias));
|
||||
JassGameEventsWar3.EVENT_PLAYER_UNIT_SPELL_EFFECT, event.getTrigger(), spellAbility,
|
||||
spellAbilityUnit, spellTargetUnit, alias));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void fireAbilityEffectEventsPoint(final CUnit spellAbilityUnit, final AbilityPointTarget abilityPointTarget,
|
||||
final War3ID alias) {
|
||||
public void fireAbilityEffectEventsPoint(final CAbility spellAbility, final CUnit spellAbilityUnit,
|
||||
final AbilityPointTarget abilityPointTarget, final War3ID alias) {
|
||||
final List<CPlayerEvent> eventList = getEventList(JassGameEventsWar3.EVENT_PLAYER_UNIT_SPELL_EFFECT);
|
||||
if (eventList != null) {
|
||||
for (final CPlayerEvent event : eventList) {
|
||||
event.fire(spellAbilityUnit,
|
||||
CommonTriggerExecutionScope.unitSpellEffectPointScope(
|
||||
JassGameEventsWar3.EVENT_PLAYER_UNIT_SPELL_EFFECT, event.getTrigger(), spellAbilityUnit,
|
||||
abilityPointTarget, alias));
|
||||
JassGameEventsWar3.EVENT_PLAYER_UNIT_SPELL_EFFECT, event.getTrigger(), spellAbility,
|
||||
spellAbilityUnit, abilityPointTarget, alias));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -274,7 +274,9 @@ public enum JassGameEventsWar3 implements CHandle {
|
||||
EVENT_UNIT_STACK_ITEM,
|
||||
|
||||
// use TriggerRegisterPlayerUnitEvent
|
||||
EVENT_PLAYER_UNIT_STACK_ITEM,;
|
||||
EVENT_PLAYER_UNIT_STACK_ITEM,
|
||||
|
||||
;
|
||||
|
||||
private static final int TFT_CUTOFF = EVENT_GAME_LOADED.ordinal();
|
||||
|
||||
|
@ -5,6 +5,8 @@ import com.etheller.warsmash.util.War3ID;
|
||||
public interface AbilityActivationReceiver {
|
||||
void useOk();
|
||||
|
||||
void unknownReasonUseNotOk();
|
||||
|
||||
void notEnoughResources(ResourceType resource);
|
||||
|
||||
void notAnActiveAbility();
|
||||
@ -24,4 +26,6 @@ public interface AbilityActivationReceiver {
|
||||
void techtreeMaximumReached();
|
||||
|
||||
void cooldownNotYetReady(float cooldownRemaining, float cooldown);
|
||||
|
||||
void noChargesRemaining();
|
||||
}
|
||||
|
@ -11,6 +11,11 @@ public class BooleanAbilityActivationReceiver implements AbilityActivationReceiv
|
||||
this.ok = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unknownReasonUseNotOk() {
|
||||
this.ok = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notEnoughResources(final ResourceType resource) {
|
||||
this.ok = false;
|
||||
@ -61,6 +66,11 @@ public class BooleanAbilityActivationReceiver implements AbilityActivationReceiv
|
||||
this.ok = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void noChargesRemaining() {
|
||||
this.ok = false;
|
||||
}
|
||||
|
||||
public boolean isOk() {
|
||||
return this.ok;
|
||||
}
|
||||
|
@ -44,6 +44,11 @@ public class MeleeUIAbilityActivationReceiver implements AbilityActivationReceiv
|
||||
this.ok = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unknownReasonUseNotOk() {
|
||||
this.genericError.onClick(this.commandErrorListener, this.worldSceneAudioContext, this.commandedUnit);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notEnoughResources(final ResourceType resource) {
|
||||
switch (resource) {
|
||||
@ -107,6 +112,11 @@ public class MeleeUIAbilityActivationReceiver implements AbilityActivationReceiv
|
||||
this.genericError.onClick(this.commandErrorListener, this.worldSceneAudioContext, this.commandedUnit);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void noChargesRemaining() {
|
||||
this.genericError.onClick(this.commandErrorListener, this.worldSceneAudioContext, this.commandedUnit);
|
||||
}
|
||||
|
||||
public boolean isUseOk() {
|
||||
return this.ok;
|
||||
}
|
||||
|
@ -25,6 +25,11 @@ public class StringMsgAbilityActivationReceiver implements AbilityActivationRece
|
||||
this.useOk = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unknownReasonUseNotOk() {
|
||||
this.message = "NOTEXTERN: Unable to use this ability.";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notEnoughResources(final ResourceType resource) {
|
||||
this.message = "NOTEXTERN: Requires more " + resource.name().toLowerCase() + ".";
|
||||
@ -75,4 +80,9 @@ public class StringMsgAbilityActivationReceiver implements AbilityActivationRece
|
||||
this.message = "NOTEXTERN: Ability is disabled.";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void noChargesRemaining() {
|
||||
this.message = "NOTEXTERN: No charges remaining.";
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -138,6 +138,7 @@ import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.harvest.C
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.hero.CAbilityHero;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.hero.CPrimaryAttribute;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.inventory.CAbilityInventory;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.jass.CAbilityJass;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.mine.CAbilityGoldMine;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityQueue;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityRally;
|
||||
@ -145,6 +146,8 @@ import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAb
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.targeting.AbilityPointTarget;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.targeting.AbilityTarget;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.targeting.AbilityTargetVisitor;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.jass.CAbilityTypeJassDefinition;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.jass.CAbilityTypeJassDefinition.JassOrder;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.upgrade.CAbilityUpgrade;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.combat.CAttackType;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.combat.CDefenseType;
|
||||
@ -1957,6 +1960,24 @@ public class MeleeUI implements CUnitStateListener, CommandButtonListener, Comma
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void accept(final CAbilityJass ability) {
|
||||
final CAbilityTypeJassDefinition type = ability.getType();
|
||||
// TODO getting icon from type is currently inefficient
|
||||
final JassOrder orderCommandCardIcon = type.getOrderCommandCardIcon(MeleeUI.this.war3MapViewer.simulation,
|
||||
MeleeUI.this.selectedUnit.getSimulationUnit(), MeleeUI.this.activeCommandOrderId);
|
||||
if (orderCommandCardIcon.getMouseTargetRadius() > 0) {
|
||||
handlePlacementCursor(ability, orderCommandCardIcon.getMouseTargetRadius());
|
||||
}
|
||||
else if (orderCommandCardIcon.getPreviewBuildUnitId() != null) {
|
||||
handleBuildCursor(null, orderCommandCardIcon.getPreviewBuildUnitId().getValue());
|
||||
}
|
||||
else {
|
||||
handleTargetCursor(ability);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void handleTargetCursor(final CAbility ability) {
|
||||
if (MeleeUI.this.cursorModelInstance != null) {
|
||||
MeleeUI.this.cursorModelInstance.detach();
|
||||
@ -1967,11 +1988,15 @@ public class MeleeUI implements CUnitStateListener, CommandButtonListener, Comma
|
||||
}
|
||||
|
||||
private void handleBuildCursor(final AbstractCAbilityBuild ability) {
|
||||
handleBuildCursor(ability, MeleeUI.this.activeCommandOrderId);
|
||||
}
|
||||
|
||||
private void handleBuildCursor(final AbstractCAbilityBuild ability, final int previewBuildUnitId) {
|
||||
boolean justLoaded = false;
|
||||
final War3MapViewer viewer = MeleeUI.this.war3MapViewer;
|
||||
if (MeleeUI.this.cursorModelInstance == null) {
|
||||
final MutableObjectData unitData = viewer.getAllObjectData().getUnits();
|
||||
final War3ID buildingTypeId = new War3ID(MeleeUI.this.activeCommandOrderId);
|
||||
final War3ID buildingTypeId = new War3ID(previewBuildUnitId);
|
||||
MeleeUI.this.cursorBuildingUnitType = viewer.simulation.getUnitData().getUnitType(buildingTypeId);
|
||||
final String unitModelPath = viewer.getUnitModelPath(unitData.get(buildingTypeId));
|
||||
final MdxModel model = viewer.loadModelMdx(unitModelPath);
|
||||
@ -3084,16 +3109,21 @@ public class MeleeUI implements CUnitStateListener, CommandButtonListener, Comma
|
||||
boolean match = false;
|
||||
switch (WarsmashConstants.INPUT_HOTKEY_MODE) {
|
||||
case 0:
|
||||
if (this.commandCard[j][i].checkHotkey(c, keycode)) match = true;
|
||||
if (this.commandCard[j][i].checkHotkey(c, keycode)) {
|
||||
match = true;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
|
||||
if(keycode == this.commandCardGridHotkeys[j][i]) match = true;
|
||||
if (keycode == this.commandCardGridHotkeys[j][i]) {
|
||||
match = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (match) {
|
||||
this.commandCard[j][i].onClick(Input.Buttons.LEFT);
|
||||
this.war3MapViewer.getUiSounds().getSound("InterfaceClick").play(this.uiScene.audioContext, 0, 0,0);
|
||||
this.war3MapViewer.getUiSounds().getSound("InterfaceClick").play(this.uiScene.audioContext, 0, 0,
|
||||
0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4132,4 +4162,16 @@ public class MeleeUI implements CUnitStateListener, CommandButtonListener, Comma
|
||||
scriptDialog.positionBounds(this.rootFrame, this.uiViewport);
|
||||
dialog.reset(scriptDialog, scriptDialogTextFrame);
|
||||
}
|
||||
|
||||
public void removedUnit(final CUnit whichUnit) {
|
||||
final RenderUnit renderUnit = this.war3MapViewer.getRenderPeer(whichUnit);
|
||||
if ((this.selectedUnits != null) && this.selectedUnits.contains(renderUnit)) {
|
||||
final List<RenderUnit> newSelectedUnits = new ArrayList<>(this.selectedUnits);
|
||||
newSelectedUnits.remove(renderUnit);
|
||||
selectUnits(newSelectedUnits);
|
||||
}
|
||||
else if (this.selectedUnit == renderUnit) {
|
||||
selectUnit(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user