mirror of
https://github.com/Retera/WarsmashModEngine.git
synced 2022-07-31 17:38:59 +02:00
Updates to UI
This commit is contained in:
parent
5283b7a038
commit
9210544e08
@ -1,32 +1,24 @@
|
||||
[DataSources]
|
||||
Count=7
|
||||
Type00=MPQ
|
||||
Path00="D:\Games\Warcraft III Patch 1.22\war3.mpq"
|
||||
Type01=MPQ
|
||||
Path01="D:\Games\Warcraft III Patch 1.22\War3x.mpq"
|
||||
Type02=MPQ
|
||||
Path02="D:\Games\Warcraft III Patch 1.22\War3xlocal.mpq"
|
||||
Type03=MPQ
|
||||
Path03="D:\Games\Warcraft III Patch 1.22\War3Patch.mpq"
|
||||
Count=5
|
||||
Type00=Folder
|
||||
Path00="D:\Games\Warcraft III CASC 1.31\war3.w3mod"
|
||||
Type01=Folder
|
||||
Path01="D:\Games\Warcraft III CASC 1.31\war3.w3mod\_locales\enus.w3mod"
|
||||
Type02=Folder
|
||||
Path02="..\..\resources"
|
||||
Type03=Folder
|
||||
Path03="D:\Backups\Warsmash\Data"
|
||||
Type04=Folder
|
||||
Path04="..\..\resources"
|
||||
Type05=Folder
|
||||
Path05="D:\Backups\Warsmash\Data"
|
||||
Type06=Folder
|
||||
Path06="."
|
||||
Path04="."
|
||||
|
||||
[Map]
|
||||
//FilePath="CombatUnitTests.w3x"
|
||||
//FilePath="PitchRoll.w3x"
|
||||
FilePath="PeonStartingBase.w3x"
|
||||
//FilePath="DungeonGoldMine.w3m"
|
||||
//FilePath="PlayerPeasants.w3m"
|
||||
//FilePath="FireLord.w3x"
|
||||
//FilePath="ReforgedGeorgeVacation.w3x"
|
||||
//FilePath="Maps\Campaign\NightElf03.w3m"
|
||||
//FilePath="PhoenixAttack.w3x"
|
||||
//FilePath="LightEnvironmentTest.w3x"
|
||||
//FilePath="PrivateDontShare/Cult 8.w3x"
|
||||
//FilePath="TorchLight2.w3x"
|
||||
//FilePath="OrcAssault.w3x"
|
||||
//FilePath="FrostyVsFarm.w3m"
|
||||
//FilePath="ModelTest.w3x"
|
||||
//FilePath="SpinningSample.w3x"
|
||||
FilePath="PeonStartingBase.w3x"
|
||||
//FilePath="PhoenixAttack.w3x"
|
||||
//FilePath="OperationReforged.w3x"
|
||||
//FilePath="AzerothRoleplay1.909t03DecoratedV2.w3x"
|
||||
|
37
core/assets/warsmash127.ini
Normal file
37
core/assets/warsmash127.ini
Normal file
@ -0,0 +1,37 @@
|
||||
[DataSources]
|
||||
Count=7
|
||||
Type00=MPQ
|
||||
Path00="D:\Games\Warcraft III Patch 1.22\war3.mpq"
|
||||
Type01=MPQ
|
||||
Path01="D:\Games\Warcraft III Patch 1.22\War3x.mpq"
|
||||
Type02=MPQ
|
||||
Path02="D:\Games\Warcraft III Patch 1.22\War3xlocal.mpq"
|
||||
Type03=MPQ
|
||||
Path03="D:\Games\Warcraft III Patch 1.22\War3Patch.mpq"
|
||||
Type04=Folder
|
||||
Path04="..\..\resources"
|
||||
Type05=Folder
|
||||
Path05="D:\Backups\Warsmash\Data"
|
||||
Type06=Folder
|
||||
Path06="."
|
||||
|
||||
[Map]
|
||||
//FilePath="CombatUnitTests.w3x"
|
||||
//FilePath="PitchRoll.w3x"
|
||||
FilePath="PeonStartingBase.w3x"
|
||||
//FilePath="ColdArrows.w3m"
|
||||
//FilePath="DungeonGoldMine.w3m"
|
||||
//FilePath="PlayerPeasants.w3m"
|
||||
//FilePath="FireLord.w3x"
|
||||
//FilePath="Maps\Campaign\NightElf03.w3m"
|
||||
//FilePath="PhoenixAttack.w3x"
|
||||
//FilePath="LightEnvironmentTest.w3x"
|
||||
//FilePath="TorchLight2.w3x"
|
||||
//FilePath="OrcAssault.w3x"
|
||||
//FilePath="FrostyVsFarm.w3m"
|
||||
//FilePath="ModelTest.w3x"
|
||||
//FilePath="SpinningSample.w3x"
|
||||
//FilePath="Maps\Campaign\Prologue02.w3m"
|
||||
//FilePath="Pathing.w3x"
|
||||
//FilePath="ItemFacing.w3x"
|
||||
//FilePath=SomeParticleTests.w3x
|
@ -1,22 +0,0 @@
|
||||
[DataSources]
|
||||
Count=5
|
||||
Type00=Folder
|
||||
Path00="E:\Games\Warcraft III CASC 1.31\war3.w3mod"
|
||||
Type01=Folder
|
||||
Path01="E:\Games\Warcraft III CASC 1.31\war3.w3mod\_locales\enus.w3mod"
|
||||
Type02=Folder
|
||||
Path02="..\..\resources"
|
||||
Type03=Folder
|
||||
Path03="E:\Backups\Warsmash\Data"
|
||||
Type04=Folder
|
||||
Path04="."
|
||||
|
||||
[Map]
|
||||
//FilePath="PitchRoll.w3x"
|
||||
//FilePath="ReforgedGeorgeVacation.w3x"
|
||||
//FilePath="Maps\Campaign\NightElf03.w3m"
|
||||
//FilePath="PrivateDontShare/Cult 8.w3x"
|
||||
//FilePath="TorchLight2.w3x"
|
||||
//FilePath="OrcAssault.w3x"
|
||||
//FilePath="PeonStartingBase.w3x"
|
||||
FilePath="PhoenixAttack.w3x"
|
@ -360,7 +360,7 @@ public class MdlxModel {
|
||||
break;
|
||||
case MdlUtils.TOKEN_TEXTURE_ANIMS:
|
||||
this.loadNumberedObjectBlock(this.textureAnimations, MdlxBlockDescriptor.TEXTURE_ANIMATION,
|
||||
MdlUtils.TOKEN_TEXTURE_ANIM, stream);
|
||||
MdlUtils.TOKEN_TVERTEX_ANIM, stream);
|
||||
break;
|
||||
case MdlUtils.TOKEN_GEOSET:
|
||||
this.loadObject(this.geosets, MdlxBlockDescriptor.GEOSET, stream);
|
||||
|
@ -30,6 +30,7 @@ public class MdlUtils {
|
||||
public static final String TOKEN_BITMAP = "Bitmap";
|
||||
|
||||
public static final String TOKEN_TVERTEX_ANIM_SPACE = "TVertexAnim ";
|
||||
public static final String TOKEN_TVERTEX_ANIM = "TVertexAnim";
|
||||
|
||||
public static final String TOKEN_DONT_INTERP = "DontInterp";
|
||||
public static final String TOKEN_LINEAR = "Linear";
|
||||
@ -177,7 +178,6 @@ public class MdlUtils {
|
||||
public static final String TOKEN_TEXTURES = "Textures";
|
||||
public static final String TOKEN_MATERIALS = "Materials";
|
||||
public static final String TOKEN_TEXTURE_ANIMS = "TextureAnims";
|
||||
public static final String TOKEN_TEXTURE_ANIM = "TextureAnim";
|
||||
public static final String TOKEN_PIVOT_POINTS = "PivotPoints";
|
||||
|
||||
public static final String TOKEN_ATTACHMENT = "Attachment";
|
||||
|
@ -1,7 +1,7 @@
|
||||
package com.etheller.warsmash.util;
|
||||
|
||||
public class WarsmashConstants {
|
||||
public static final int MAX_PLAYERS = 16;
|
||||
public static final int MAX_PLAYERS = 28;
|
||||
public static final int REPLACEABLE_TEXTURE_LIMIT = 64;
|
||||
public static final float SIMULATION_STEP_TIME = 1 / 20f;
|
||||
public static final int PORT_NUMBER = 6115;
|
||||
|
@ -848,7 +848,11 @@ public class War3MapViewer extends AbstractMdxModelViewer {
|
||||
final int playerIndex = unit.getPlayer();
|
||||
final float unitAngle = unit.getAngle();
|
||||
|
||||
createNewUnit(modifications, unitId, unitX, unitY, unitZ, playerIndex, unitAngle);
|
||||
final CUnit unitCreated = createNewUnit(modifications, unitId, unitX, unitY, unitZ, playerIndex,
|
||||
unitAngle);
|
||||
if (unit.getGoldAmount() != 0) {
|
||||
unitCreated.setGold(unit.getGoldAmount());
|
||||
}
|
||||
}
|
||||
}
|
||||
this.simulation.unitsLoaded();
|
||||
|
@ -2,6 +2,7 @@ package com.etheller.warsmash.viewer5.handlers.w3x.rendersim.commandbuttons;
|
||||
|
||||
import com.etheller.warsmash.util.War3ID;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.rendersim.ability.AbilityDataUI;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.rendersim.ability.AbilityIconUI;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.rendersim.ability.IconUI;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CSimulation;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CUnit;
|
||||
@ -19,6 +20,7 @@ import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.build.CAb
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.build.CAbilityOrcBuild;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.build.CAbilityUndeadBuild;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.combat.CAbilityColdArrows;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.GenericNoIconAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.GenericSingleIconActiveAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityQueue;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityRally;
|
||||
@ -101,12 +103,18 @@ public class CommandCardPopulatingAbilityVisitor implements CAbilityVisitor<Void
|
||||
@Override
|
||||
public Void accept(final GenericSingleIconActiveAbility ability) {
|
||||
if ((this.menuBaseOrderId == 0) && ability.isIconShowing()) {
|
||||
addCommandButton(ability, this.abilityDataUI.getUI(ability.getAlias()).getOnIconUI(), ability.getHandleId(),
|
||||
ability.getBaseOrderId(), 0, false, false);
|
||||
final AbilityIconUI ui = this.abilityDataUI.getUI(ability.getAlias());
|
||||
addCommandButton(ability, ability.isToggleOn() ? ui.getOffIconUI() : ui.getOnIconUI(),
|
||||
ability.getHandleId(), ability.getBaseOrderId(), 0, false, false);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void accept(final GenericNoIconAbility ability) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void accept(final CAbilityRally ability) {
|
||||
if (this.menuBaseOrderId == 0) {
|
||||
|
@ -19,6 +19,7 @@ import com.etheller.warsmash.viewer5.handlers.w3x.environment.PathingGrid.Remova
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CUnitStateListener.CUnitStateNotifier;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.CAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.build.CAbilityBuildInProgress;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.mine.CAbilityGoldMine;
|
||||
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;
|
||||
@ -1117,4 +1118,21 @@ public class CUnit extends CWidget {
|
||||
this.foodUsed = foodUsed;
|
||||
return delta;
|
||||
}
|
||||
|
||||
public int getGold() {
|
||||
for (final CAbility ability : this.abilities) {
|
||||
if (ability instanceof CAbilityGoldMine) {
|
||||
return ((CAbilityGoldMine) ability).getGold();
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void setGold(final int goldAmount) {
|
||||
for (final CAbility ability : this.abilities) {
|
||||
if (ability instanceof CAbilityGoldMine) {
|
||||
((CAbilityGoldMine) ability).setGold(goldAmount);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.build.CAb
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.build.CAbilityOrcBuild;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.build.CAbilityUndeadBuild;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.combat.CAbilityColdArrows;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.GenericNoIconAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.GenericSingleIconActiveAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityQueue;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityRally;
|
||||
@ -48,4 +49,6 @@ public interface CAbilityVisitor<T> {
|
||||
T accept(GenericSingleIconActiveAbility ability);
|
||||
|
||||
T accept(CAbilityRally ability);
|
||||
|
||||
T accept(GenericNoIconAbility ability);
|
||||
}
|
||||
|
@ -40,7 +40,8 @@ public abstract class AbstractCAbilityBuild extends AbstractCAbility implements
|
||||
final CPlayer player = game.getPlayer(unit.getPlayerIndex());
|
||||
if (player.getGold() >= unitType.getGoldCost()) {
|
||||
if (player.getLumber() >= unitType.getLumberCost()) {
|
||||
if ((player.getFoodUsed() + unitType.getFoodUsed()) <= player.getFoodCap()) {
|
||||
if ((unitType.getFoodUsed() == 0)
|
||||
|| ((player.getFoodUsed() + unitType.getFoodUsed()) <= player.getFoodCap())) {
|
||||
receiver.useOk();
|
||||
}
|
||||
else {
|
||||
|
@ -0,0 +1,32 @@
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic;
|
||||
|
||||
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.abilities.AbstractCAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.CAbilityVisitor;
|
||||
|
||||
public abstract class AbstractGenericNoIconAbility extends AbstractCAbility implements GenericNoIconAbility {
|
||||
private final War3ID alias;
|
||||
|
||||
public AbstractGenericNoIconAbility(final int handleId, final War3ID alias) {
|
||||
super(handleId);
|
||||
this.alias = alias;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkBeforeQueue(final CSimulation game, final CUnit caster, final int orderId) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T visit(final CAbilityVisitor<T> visitor) {
|
||||
return visitor.accept(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public War3ID getAlias() {
|
||||
return this.alias;
|
||||
}
|
||||
|
||||
}
|
@ -27,35 +27,44 @@ public abstract class AbstractGenericSingleIconActiveAbility extends AbstractCAb
|
||||
public void checkCanTarget(final CSimulation game, final CUnit unit, final int orderId, final CWidget target,
|
||||
final AbilityTargetCheckReceiver<CWidget> receiver) {
|
||||
if (orderId == getBaseOrderId()) {
|
||||
receiver.targetOk(target);
|
||||
innerCheckCanTarget(game, unit, orderId, target, receiver);
|
||||
}
|
||||
else {
|
||||
receiver.orderIdNotAccepted();
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract void innerCheckCanTarget(CSimulation game, CUnit unit, int orderId, CWidget target,
|
||||
AbilityTargetCheckReceiver<CWidget> receiver);
|
||||
|
||||
@Override
|
||||
public void checkCanTarget(final CSimulation game, final CUnit unit, final int orderId,
|
||||
final AbilityPointTarget target, final AbilityTargetCheckReceiver<AbilityPointTarget> receiver) {
|
||||
if (orderId == getBaseOrderId()) {
|
||||
receiver.targetOk(target);
|
||||
innerCheckCanTarget(game, unit, orderId, target, receiver);
|
||||
}
|
||||
else {
|
||||
receiver.orderIdNotAccepted();
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract void innerCheckCanTarget(CSimulation game, CUnit unit, int orderId, AbilityPointTarget target,
|
||||
AbilityTargetCheckReceiver<AbilityPointTarget> receiver);
|
||||
|
||||
@Override
|
||||
public void checkCanTargetNoTarget(final CSimulation game, final CUnit unit, final int orderId,
|
||||
final AbilityTargetCheckReceiver<Void> receiver) {
|
||||
if (orderId == getBaseOrderId()) {
|
||||
receiver.targetOk(null);
|
||||
innerCheckCanTargetNoTarget(game, unit, orderId, receiver);
|
||||
}
|
||||
else {
|
||||
receiver.orderIdNotAccepted();
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract void innerCheckCanTargetNoTarget(CSimulation game, CUnit unit, int orderId,
|
||||
AbilityTargetCheckReceiver<Void> receiver);
|
||||
|
||||
@Override
|
||||
public <T> T visit(final CAbilityVisitor<T> visitor) {
|
||||
return visitor.accept(this);
|
||||
|
@ -0,0 +1,8 @@
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic;
|
||||
|
||||
import com.etheller.warsmash.util.War3ID;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.CAbility;
|
||||
|
||||
public interface GenericNoIconAbility extends CAbility {
|
||||
War3ID getAlias();
|
||||
}
|
@ -9,6 +9,7 @@ import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.targeting
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.behaviors.CBehavior;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.orders.OrderIds;
|
||||
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 CAbilityHarvest extends AbstractGenericSingleIconActiveAbility {
|
||||
@ -59,4 +60,33 @@ public class CAbilityHarvest extends AbstractGenericSingleIconActiveAbility {
|
||||
receiver.useOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void innerCheckCanTarget(final CSimulation game, final CUnit unit, final int orderId,
|
||||
final CWidget target, final AbilityTargetCheckReceiver<CWidget> receiver) {
|
||||
if (target instanceof CUnit) {
|
||||
final CUnit targetUnit = (CUnit) target;
|
||||
if (targetUnit.getGold() > 0) {
|
||||
receiver.targetOk(target);
|
||||
}
|
||||
else {
|
||||
receiver.mustTargetResources();
|
||||
}
|
||||
}
|
||||
else {
|
||||
receiver.mustTargetResources();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void innerCheckCanTarget(final CSimulation game, final CUnit unit, final int orderId,
|
||||
final AbilityPointTarget target, final AbilityTargetCheckReceiver<AbilityPointTarget> receiver) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void innerCheckCanTargetNoTarget(final CSimulation game, final CUnit unit, final int orderId,
|
||||
final AbilityTargetCheckReceiver<Void> receiver) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,92 @@
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.mine;
|
||||
|
||||
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.generic.AbstractGenericNoIconAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.targeting.AbilityPointTarget;
|
||||
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 CAbilityGoldMine extends AbstractGenericNoIconAbility {
|
||||
private int gold;
|
||||
private final float miningDuration;
|
||||
private final int miningCapacity;
|
||||
|
||||
public CAbilityGoldMine(final int handleId, final War3ID alias, final int maxGold, final float miningDuration,
|
||||
final int miningCapacity) {
|
||||
super(handleId, alias);
|
||||
this.gold = maxGold;
|
||||
this.miningDuration = miningDuration;
|
||||
this.miningCapacity = miningCapacity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAdd(final CSimulation game, final CUnit unit) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRemove(final CSimulation game, final CUnit unit) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public CBehavior begin(final CSimulation game, final CUnit caster, final int orderId, final CWidget target) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CBehavior begin(final CSimulation game, final CUnit caster, final int orderId,
|
||||
final AbilityPointTarget point) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CBehavior beginNoTarget(final CSimulation game, final CUnit caster, final int orderId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkCanTarget(final CSimulation game, final CUnit unit, final int orderId, final CWidget target,
|
||||
final AbilityTargetCheckReceiver<CWidget> receiver) {
|
||||
receiver.orderIdNotAccepted();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkCanTarget(final CSimulation game, final CUnit unit, final int orderId,
|
||||
final AbilityPointTarget target, final AbilityTargetCheckReceiver<AbilityPointTarget> receiver) {
|
||||
receiver.orderIdNotAccepted();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkCanTargetNoTarget(final CSimulation game, final CUnit unit, final int orderId,
|
||||
final AbilityTargetCheckReceiver<Void> receiver) {
|
||||
receiver.orderIdNotAccepted();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void innerCheckCanUse(final CSimulation game, final CUnit unit, final int orderId,
|
||||
final AbilityActivationReceiver receiver) {
|
||||
receiver.notAnActiveAbility();
|
||||
}
|
||||
|
||||
public int getGold() {
|
||||
return this.gold;
|
||||
}
|
||||
|
||||
public void setGold(final int gold) {
|
||||
this.gold = gold;
|
||||
}
|
||||
|
||||
public int getMiningCapacity() {
|
||||
return this.miningCapacity;
|
||||
}
|
||||
|
||||
public float getMiningDuration() {
|
||||
return this.miningDuration;
|
||||
}
|
||||
|
||||
}
|
@ -47,7 +47,8 @@ public final class CAbilityQueue extends AbstractCAbility {
|
||||
final CPlayer player = game.getPlayer(unit.getPlayerIndex());
|
||||
if (player.getGold() >= unitType.getGoldCost()) {
|
||||
if (player.getLumber() >= unitType.getLumberCost()) {
|
||||
if ((player.getFoodUsed() + unitType.getFoodUsed()) <= player.getFoodCap()) {
|
||||
if ((unitType.getFoodUsed() == 0)
|
||||
|| ((player.getFoodUsed() + unitType.getFoodUsed()) <= player.getFoodCap())) {
|
||||
receiver.useOk();
|
||||
}
|
||||
else {
|
||||
|
@ -1,20 +1,21 @@
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.simulation;
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types;
|
||||
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
|
||||
import com.etheller.warsmash.util.War3ID;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.CAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.combat.CTargetType;
|
||||
|
||||
public class CAbilityType {
|
||||
public abstract class CAbilityType<TYPE_LEVEL_DATA extends CAbilityTypeLevelData> {
|
||||
/* alias: defines which ability editor ability to use */
|
||||
private final War3ID alias;
|
||||
/* code: defines which CAbility class to use */
|
||||
private final War3ID code;
|
||||
|
||||
private final List<CAbilityTypeLevelData> levelData;
|
||||
private final List<TYPE_LEVEL_DATA> levelData;
|
||||
|
||||
public CAbilityType(final War3ID alias, final War3ID code, final List<CAbilityTypeLevelData> levelData) {
|
||||
public CAbilityType(final War3ID alias, final War3ID code, final List<TYPE_LEVEL_DATA> levelData) {
|
||||
this.alias = alias;
|
||||
this.code = code;
|
||||
this.levelData = levelData;
|
||||
@ -32,8 +33,10 @@ public class CAbilityType {
|
||||
return getLevelData(level).getTargetsAllowed();
|
||||
}
|
||||
|
||||
private CAbilityTypeLevelData getLevelData(final int level) {
|
||||
protected final TYPE_LEVEL_DATA getLevelData(final int level) {
|
||||
return this.levelData.get(level);
|
||||
}
|
||||
|
||||
public abstract CAbility createAbility(int handleId);
|
||||
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.simulation;
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types;
|
||||
|
||||
import java.util.EnumSet;
|
||||
|
@ -0,0 +1,9 @@
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.definitions;
|
||||
|
||||
import com.etheller.warsmash.units.manager.MutableObjectData.MutableGameObject;
|
||||
import com.etheller.warsmash.util.War3ID;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.CAbilityType;
|
||||
|
||||
public interface CAbilityTypeDefinition {
|
||||
CAbilityType<?> createAbilityType(War3ID rawcode, MutableGameObject abilityEditorData);
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.definitions.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.etheller.warsmash.units.manager.MutableObjectData.MutableGameObject;
|
||||
import com.etheller.warsmash.util.War3ID;
|
||||
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;
|
||||
|
||||
public abstract class AbstractCAbilityTypeDefinition<TYPE_LEVEL_DATA extends CAbilityTypeLevelData>
|
||||
implements CAbilityTypeDefinition {
|
||||
protected static final War3ID TARGETS_ALLOWED = War3ID.fromString("atar");
|
||||
private static final War3ID LEVELS = War3ID.fromString("alev");
|
||||
|
||||
@Override
|
||||
public CAbilityType<?> createAbilityType(final War3ID alias, final MutableGameObject abilityEditorData) {
|
||||
final int levels = abilityEditorData.getFieldAsInteger(LEVELS, 0);
|
||||
final List<TYPE_LEVEL_DATA> levelData = new ArrayList<>();
|
||||
for (int level = 0; level < levels; level++) {
|
||||
levelData.add(createLevelData(abilityEditorData, level));
|
||||
}
|
||||
return innerCreateAbilityType(alias, abilityEditorData, levelData);
|
||||
}
|
||||
|
||||
protected abstract TYPE_LEVEL_DATA createLevelData(MutableGameObject abilityEditorData, int level);
|
||||
|
||||
protected abstract CAbilityType<?> innerCreateAbilityType(War3ID alias, MutableGameObject abilityEditorData,
|
||||
List<TYPE_LEVEL_DATA> levelData);
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.definitions.impl;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.etheller.warsmash.units.manager.MutableObjectData.MutableGameObject;
|
||||
import com.etheller.warsmash.util.War3ID;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.CAbilityType;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.impl.CAbilityTypeColdArrows;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.impl.CAbilityTypeColdArrowsLevelData;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.combat.CTargetType;
|
||||
|
||||
public class CAbilityTypeDefinitionColdArrows extends AbstractCAbilityTypeDefinition<CAbilityTypeColdArrowsLevelData> {
|
||||
|
||||
@Override
|
||||
protected CAbilityTypeColdArrowsLevelData createLevelData(final MutableGameObject abilityEditorData,
|
||||
final int level) {
|
||||
return new CAbilityTypeColdArrowsLevelData(
|
||||
CTargetType.parseTargetTypeSet(abilityEditorData.getFieldAsString(TARGETS_ALLOWED, level)));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CAbilityType<?> innerCreateAbilityType(final War3ID alias, final MutableGameObject abilityEditorData,
|
||||
final List<CAbilityTypeColdArrowsLevelData> levelData) {
|
||||
return new CAbilityTypeColdArrows(alias, abilityEditorData.getCode(), levelData);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.definitions.impl;
|
||||
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
|
||||
import com.etheller.warsmash.units.manager.MutableObjectData.MutableGameObject;
|
||||
import com.etheller.warsmash.util.War3ID;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.CAbilityType;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.definitions.CAbilityTypeDefinition;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.impl.CAbilityTypeGoldMine;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.impl.CAbilityTypeGoldMineLevelData;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.combat.CTargetType;
|
||||
|
||||
public class CAbilityTypeDefinitionGoldMine extends AbstractCAbilityTypeDefinition<CAbilityTypeGoldMineLevelData>
|
||||
implements CAbilityTypeDefinition {
|
||||
protected static final War3ID MAX_GOLD = War3ID.fromString("Gld1");
|
||||
protected static final War3ID MINING_DURATION = War3ID.fromString("Gld2");
|
||||
protected static final War3ID MINING_CAPACITY = War3ID.fromString("Gld3");
|
||||
|
||||
@Override
|
||||
protected CAbilityTypeGoldMineLevelData createLevelData(final MutableGameObject abilityEditorData,
|
||||
final int level) {
|
||||
final String targetsAllowedAtLevelString = abilityEditorData.getFieldAsString(TARGETS_ALLOWED, level);
|
||||
final EnumSet<CTargetType> targetsAllowedAtLevel = CTargetType.parseTargetTypeSet(targetsAllowedAtLevelString);
|
||||
final int maxGold = abilityEditorData.getFieldAsInteger(MAX_GOLD, level);
|
||||
final float miningDuration = abilityEditorData.getFieldAsFloat(MINING_DURATION, level);
|
||||
final int miningCapacity = abilityEditorData.getFieldAsInteger(MINING_CAPACITY, level);
|
||||
return new CAbilityTypeGoldMineLevelData(targetsAllowedAtLevel, maxGold, miningDuration, miningCapacity);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CAbilityType<?> innerCreateAbilityType(final War3ID alias, final MutableGameObject abilityEditorData,
|
||||
final List<CAbilityTypeGoldMineLevelData> levelData) {
|
||||
return new CAbilityTypeGoldMine(alias, abilityEditorData.getCode(), levelData);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.impl;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.etheller.warsmash.util.War3ID;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.CAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.combat.CAbilityColdArrows;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.CAbilityType;
|
||||
|
||||
public class CAbilityTypeColdArrows extends CAbilityType<CAbilityTypeColdArrowsLevelData> {
|
||||
|
||||
public CAbilityTypeColdArrows(final War3ID alias, final War3ID code,
|
||||
final List<CAbilityTypeColdArrowsLevelData> levelData) {
|
||||
super(alias, code, levelData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CAbility createAbility(final int handleId) {
|
||||
return new CAbilityColdArrows(getAlias(), handleId);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.impl;
|
||||
|
||||
import java.util.EnumSet;
|
||||
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.CAbilityTypeLevelData;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.combat.CTargetType;
|
||||
|
||||
public class CAbilityTypeColdArrowsLevelData extends CAbilityTypeLevelData {
|
||||
|
||||
public CAbilityTypeColdArrowsLevelData(final EnumSet<CTargetType> targetsAllowed) {
|
||||
super(targetsAllowed);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.impl;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.etheller.warsmash.util.War3ID;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.CAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.mine.CAbilityGoldMine;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.CAbilityType;
|
||||
|
||||
public class CAbilityTypeGoldMine extends CAbilityType<CAbilityTypeGoldMineLevelData> {
|
||||
|
||||
public CAbilityTypeGoldMine(final War3ID alias, final War3ID code,
|
||||
final List<CAbilityTypeGoldMineLevelData> levelData) {
|
||||
super(alias, code, levelData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CAbility createAbility(final int handleId) {
|
||||
final CAbilityTypeGoldMineLevelData levelData = getLevelData(0);
|
||||
return new CAbilityGoldMine(handleId, getAlias(), levelData.getMaxGold(), levelData.getMiningDuration(),
|
||||
levelData.getMiningCapacity());
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.impl;
|
||||
|
||||
import java.util.EnumSet;
|
||||
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.CAbilityTypeLevelData;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.combat.CTargetType;
|
||||
|
||||
public class CAbilityTypeGoldMineLevelData extends CAbilityTypeLevelData {
|
||||
private final int maxGold;
|
||||
private final float miningDuration;
|
||||
private final int miningCapacity;
|
||||
|
||||
public CAbilityTypeGoldMineLevelData(final EnumSet<CTargetType> targetsAllowed, final int maxGold,
|
||||
final float miningDuration, final int miningCapacity) {
|
||||
super(targetsAllowed);
|
||||
this.maxGold = maxGold;
|
||||
this.miningDuration = miningDuration;
|
||||
this.miningCapacity = miningCapacity;
|
||||
}
|
||||
|
||||
public int getMaxGold() {
|
||||
return this.maxGold;
|
||||
}
|
||||
|
||||
public float getMiningDuration() {
|
||||
return this.miningDuration;
|
||||
}
|
||||
|
||||
public int getMiningCapacity() {
|
||||
return this.miningCapacity;
|
||||
}
|
||||
}
|
@ -12,6 +12,7 @@ import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.build.CAb
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.build.CAbilityOrcBuild;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.build.CAbilityUndeadBuild;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.combat.CAbilityColdArrows;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.GenericNoIconAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.GenericSingleIconActiveAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityQueue;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityRally;
|
||||
@ -117,4 +118,11 @@ public class AbilityDisableWhileUnderConstructionVisitor implements CAbilityVisi
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void accept(final GenericNoIconAbility ability) {
|
||||
ability.setDisabled(false);
|
||||
ability.setIconShowing(false);
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,55 +1,50 @@
|
||||
package com.etheller.warsmash.viewer5.handlers.w3x.simulation.data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.etheller.warsmash.units.manager.MutableObjectData;
|
||||
import com.etheller.warsmash.units.manager.MutableObjectData.MutableGameObject;
|
||||
import com.etheller.warsmash.util.War3ID;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CAbilityType;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CAbilityTypeLevelData;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.CAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.CAbilityGeneric;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.combat.CAbilityColdArrows;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.combat.CTargetType;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.CAbilityType;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.definitions.CAbilityTypeDefinition;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.definitions.impl.CAbilityTypeDefinitionColdArrows;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.definitions.impl.CAbilityTypeDefinitionGoldMine;
|
||||
|
||||
public class CAbilityData {
|
||||
private static final War3ID TARGETS_ALLOWED = War3ID.fromString("atar");
|
||||
private static final War3ID LEVELS = War3ID.fromString("alev");
|
||||
|
||||
private static final War3ID COLD_ARROWS = War3ID.fromString("ACcw");
|
||||
private final MutableObjectData abilityData;
|
||||
private Map<War3ID, CAbilityType> aliasToAbilityType = new HashMap<>();
|
||||
private Map<War3ID, CAbilityType<?>> aliasToAbilityType = new HashMap<>();
|
||||
private final Map<War3ID, CAbilityTypeDefinition> codeToAbilityTypeDefinition = new HashMap<>();
|
||||
|
||||
public CAbilityData(final MutableObjectData abilityData) {
|
||||
this.abilityData = abilityData;
|
||||
this.aliasToAbilityType = new HashMap<>();
|
||||
}
|
||||
|
||||
public CAbilityType getAbilityType(final War3ID alias) {
|
||||
CAbilityType abilityType = this.aliasToAbilityType.get(alias);
|
||||
private void registerCodes() {
|
||||
this.codeToAbilityTypeDefinition.put(War3ID.fromString("ACcw"), new CAbilityTypeDefinitionColdArrows());
|
||||
this.codeToAbilityTypeDefinition.put(War3ID.fromString("Agld"), new CAbilityTypeDefinitionGoldMine());
|
||||
}
|
||||
|
||||
public CAbilityType<?> getAbilityType(final War3ID alias) {
|
||||
CAbilityType<?> abilityType = this.aliasToAbilityType.get(alias);
|
||||
if (abilityType == null) {
|
||||
final MutableGameObject mutableGameObject = this.abilityData.get(alias);
|
||||
final int levels = mutableGameObject.getFieldAsInteger(LEVELS, 0);
|
||||
final List<CAbilityTypeLevelData> levelData = new ArrayList<>();
|
||||
for (int level = 0; level < levels; level++) {
|
||||
final String targetsAllowedAtLevelString = mutableGameObject.getFieldAsString(TARGETS_ALLOWED, level);
|
||||
final EnumSet<CTargetType> targetsAllowedAtLevel = CTargetType
|
||||
.parseTargetTypeSet(targetsAllowedAtLevelString);
|
||||
levelData.add(new CAbilityTypeLevelData(targetsAllowedAtLevel));
|
||||
}
|
||||
abilityType = new CAbilityType(alias, mutableGameObject.getCode(), levelData);
|
||||
final War3ID code = mutableGameObject.getCode();
|
||||
final CAbilityTypeDefinition abilityTypeDefinition = this.codeToAbilityTypeDefinition.get(code);
|
||||
abilityType = abilityTypeDefinition.createAbilityType(alias, mutableGameObject);
|
||||
}
|
||||
return abilityType;
|
||||
}
|
||||
|
||||
public CAbility createAbility(final String ability, final int handleId) {
|
||||
final War3ID war3Id = War3ID.fromString(ability);
|
||||
if (war3Id.equals(COLD_ARROWS)) {
|
||||
return new CAbilityColdArrows(war3Id, handleId);
|
||||
final CAbilityType<?> abilityType = getAbilityType(war3Id);
|
||||
if (abilityType != null) {
|
||||
return abilityType.createAbility(handleId);
|
||||
}
|
||||
return new CAbilityGeneric(war3Id, handleId);
|
||||
}
|
||||
|
@ -7,6 +7,8 @@ public interface AbilityTargetCheckReceiver<TARGET_TYPE> {
|
||||
|
||||
void mustTargetType(TargetType correctType);
|
||||
|
||||
void mustTargetResources();
|
||||
|
||||
void targetOutsideRange(double howMuch);
|
||||
|
||||
void notAnActiveAbility();
|
||||
@ -29,6 +31,6 @@ public interface AbilityTargetCheckReceiver<TARGET_TYPE> {
|
||||
UNIT,
|
||||
POINT,
|
||||
UNIT_OR_POINT,
|
||||
NO_TARGET,
|
||||
NO_TARGET
|
||||
}
|
||||
}
|
||||
|
@ -33,6 +33,11 @@ public final class BooleanAbilityTargetCheckReceiver<TARGET_TYPE> implements Abi
|
||||
this.targetable = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mustTargetResources() {
|
||||
this.targetable = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void targetOutsideRange(final double howMuch) {
|
||||
this.targetable = false;
|
||||
|
@ -20,7 +20,11 @@ public class CWidgetAbilityTargetCheckReceiver implements AbilityTargetCheckRece
|
||||
@Override
|
||||
public void mustTargetType(final TargetType correctType) {
|
||||
this.target = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mustTargetResources() {
|
||||
this.target = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -22,6 +22,11 @@ public class PointAbilityTargetCheckReceiver implements AbilityTargetCheckReceiv
|
||||
this.target = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mustTargetResources() {
|
||||
this.target = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void targetOutsideRange(final double howMuch) {
|
||||
this.target = null;
|
||||
|
@ -63,6 +63,11 @@ public final class StringMsgTargetCheckReceiver<TARGET_TYPE> implements AbilityT
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mustTargetResources() {
|
||||
this.message = "NOTEXTERN: Must target resources.";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void targetOutsideRange(final double howMuch) {
|
||||
this.message = "NOTEXTERN: Target is outside range.";
|
||||
|
@ -101,6 +101,7 @@ import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.build.CAb
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.build.CAbilityOrcBuild;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.build.CAbilityUndeadBuild;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.combat.CAbilityColdArrows;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.GenericNoIconAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.GenericSingleIconActiveAbility;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityQueue;
|
||||
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.queue.CAbilityRally;
|
||||
@ -318,29 +319,35 @@ public class MeleeUI implements CUnitStateListener, CommandButtonListener, Comma
|
||||
final CRace race = this.localPlayer.getRace();
|
||||
final int racialSkinIndex;
|
||||
int racialCommandIndex;
|
||||
switch (race) {
|
||||
case HUMAN:
|
||||
if (race == null) {
|
||||
racialSkinIndex = 1;
|
||||
racialCommandIndex = 0;
|
||||
break;
|
||||
case ORC:
|
||||
racialSkinIndex = 0;
|
||||
racialCommandIndex = 1;
|
||||
break;
|
||||
case NIGHTELF:
|
||||
racialSkinIndex = 2;
|
||||
racialCommandIndex = 3;
|
||||
break;
|
||||
case UNDEAD:
|
||||
racialSkinIndex = 3;
|
||||
racialCommandIndex = 2;
|
||||
break;
|
||||
case DEMON:
|
||||
case OTHER:
|
||||
default:
|
||||
racialSkinIndex = -1;
|
||||
racialCommandIndex = 0;
|
||||
break;
|
||||
}
|
||||
else {
|
||||
switch (race) {
|
||||
case HUMAN:
|
||||
racialSkinIndex = 1;
|
||||
racialCommandIndex = 0;
|
||||
break;
|
||||
case ORC:
|
||||
racialSkinIndex = 0;
|
||||
racialCommandIndex = 1;
|
||||
break;
|
||||
case NIGHTELF:
|
||||
racialSkinIndex = 2;
|
||||
racialCommandIndex = 3;
|
||||
break;
|
||||
case UNDEAD:
|
||||
racialSkinIndex = 3;
|
||||
racialCommandIndex = 2;
|
||||
break;
|
||||
case DEMON:
|
||||
case OTHER:
|
||||
default:
|
||||
racialSkinIndex = -1;
|
||||
racialCommandIndex = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.rootFrame = new GameUI(this.dataSource, GameUI.loadSkin(this.dataSource, racialSkinIndex), this.uiViewport,
|
||||
this.fontGenerator, this.uiScene, this.war3MapViewer, racialCommandIndex);
|
||||
@ -922,6 +929,13 @@ public class MeleeUI implements CUnitStateListener, CommandButtonListener, Comma
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void accept(final GenericNoIconAbility ability) {
|
||||
// this should probably never happen
|
||||
handleTargetCursor(ability);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void accept(final CAbilityRally ability) {
|
||||
handleTargetCursor(ability);
|
||||
|
Loading…
Reference in New Issue
Block a user