Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion de.peeeq.wurstscript/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ dependencies {
implementation 'com.github.albfernandez:juniversalchardet:2.4.0'
implementation 'org.xerial:sqlite-jdbc:3.46.1.3'
implementation 'com.github.inwc3:jmpq3:e28f6999c0'
implementation 'com.github.inwc3:wc3libs:548f34a424'
implementation 'com.github.inwc3:wc3libs:ac41f780a5'
implementation 'com.github.wurstscript:wurst-project-config:348fcd4ef5'
implementation 'org.slf4j:slf4j-api:2.0.17'
implementation 'ch.qos.logback:logback-classic:1.5.20'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ public class DestructableMock {
public ILconstReal face;
public ILconstReal scale;
public ILconstInt variation;
public ILconstReal life = ILconstReal.create(100);

public DestructableMock(ILconstInt objectId, ILconstReal x, ILconstReal y, ILconstReal face, ILconstReal scale, ILconstInt variation) {
this.objectId = objectId;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ public class PlayerMock {
public final ILconstInt id;
public ILconst playerColor = ILconstNull.instance();
public final HashMap<Integer, ILconstInt> techMaxAllowed = new HashMap<>();
public final HashMap<String, ILconstInt> playerStates = new HashMap<>();

public PlayerMock(ILconstInt p) {
this.id = p;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,28 @@
import de.peeeq.wurstscript.intermediatelang.ILconstReal;
import de.peeeq.wurstscript.intermediatelang.IlConstHandle;

import java.util.HashMap;

public class UnitMock {
public IlConstHandle owner;
public ILconstInt unitid;
public ILconstReal x;
public ILconstReal y;
public ILconstReal face;
public boolean removed;
public final HashMap<String, ILconstReal> states = new HashMap<>();
public final HashMap<Integer, ILconstInt> abilityLevels = new HashMap<>();
public ILconstInt currentOrder = ILconstInt.create(0);

public UnitMock(IlConstHandle owner, ILconstInt unitid, ILconstReal x, ILconstReal y, ILconstReal face) {
this.owner = owner;
this.unitid = unitid;
this.x = x;
this.y = y;
this.face = face;
states.put("unitstate0", ILconstReal.create(100));
states.put("unitstate1", ILconstReal.create(100));
states.put("unitstate2", ILconstReal.create(0));
states.put("unitstate3", ILconstReal.create(0));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,21 @@
import de.peeeq.wurstscript.intermediatelang.IlConstHandle;
import de.peeeq.wurstscript.intermediatelang.interpreter.AbstractInterpreter;

import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;

public class ConversionProvider extends Provider {
private static final Map<String, IlConstHandle> enumHandles = new HashMap<>();

public ConversionProvider(AbstractInterpreter interpreter) {
super(interpreter);
}

public static IlConstHandle enumHandle(String typeName, int value) {
return enumHandles.computeIfAbsent(typeName + value, key -> new IlConstHandle(key, value));
}

public IlConstHandle ConvertRace(ILconstInt i) {
return new IlConstHandle("race" + i, new LinkedHashSet<>());
}
Expand All @@ -32,7 +40,7 @@ public IlConstHandle ConvertFGameState(ILconstInt i) {
}

public IlConstHandle ConvertPlayerState(ILconstInt i) {
return new IlConstHandle("playerstate" + i, new LinkedHashSet<>());
return enumHandle("playerstate", i.getVal());
}

public IlConstHandle ConvertPlayerScore(ILconstInt i) {
Expand All @@ -44,7 +52,7 @@ public IlConstHandle ConvertPlayerGameResult(ILconstInt i) {
}

public IlConstHandle ConvertUnitState(ILconstInt i) {
return new IlConstHandle("unitstate" + i, new LinkedHashSet<>());
return enumHandle("unitstate", i.getVal());
}

public IlConstHandle ConvertUnitIntegerField(ILconstInt i) {
Expand Down Expand Up @@ -128,15 +136,15 @@ public IlConstHandle ConvertMapDensity(ILconstInt i) {
}

public IlConstHandle ConvertMapControl(ILconstInt i) {
return new IlConstHandle("mapcontrol" + i, new LinkedHashSet<>());
return enumHandle("mapcontrol", i.getVal());
}

public IlConstHandle ConvertPlayerColor(ILconstInt i) {
return new IlConstHandle("playercolor" + i, new LinkedHashSet<>());
}

public IlConstHandle ConvertPlayerSlotState(ILconstInt i) {
return new IlConstHandle("playerslotstate" + i, new LinkedHashSet<>());
return enumHandle("playerslotstate", i.getVal());
}

public IlConstHandle ConvertVolumeGroup(ILconstInt i) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,22 @@ public void RemoveDestructable(IlConstHandle destructable) {
}

public void KillDestructable(IlConstHandle destructable) {
DestructableMock destructableMock = destructableOrNull(destructable);
if (destructableMock != null) {
destructableMock.life = ILconstReal.create(0);
}
}

public void SetDestructableLife(IlConstHandle destructable, ILconstReal life) {
DestructableMock destructableMock = destructableOrNull(destructable);
if (destructableMock != null) {
destructableMock.life = life;
}
}

public ILconstReal GetDestructableLife(IlConstHandle destructable) {
DestructableMock destructableMock = destructableOrNull(destructable);
return destructableMock == null ? ILconstReal.create(0) : destructableMock.life;
}

public ILconstReal GetDestructableX(IlConstHandle destructable) {
Expand All @@ -28,4 +44,11 @@ public ILconstReal GetDestructableX(IlConstHandle destructable) {
public ILconstReal GetDestructableY(IlConstHandle destructable) {
return ((DestructableMock)destructable.getObj()).y;
}

private DestructableMock destructableOrNull(IlConstHandle destructable) {
if (destructable == null || !(destructable.getObj() instanceof DestructableMock)) {
return null;
}
return (DestructableMock) destructable.getObj();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,28 @@ public ILconstInt GetPlayerId(IlConstHandle p) {
return p != null ? ((PlayerMock) p.getObj()).id : ILconstInt.create(-1);
}

public void SetPlayerState(IlConstHandle player, IlConstHandle playerstate, ILconstInt value) {
if (player == null || playerstate == null) {
return;
}
((PlayerMock) player.getObj()).playerStates.put(playerstate.print(), value);
}

public ILconstInt GetPlayerState(IlConstHandle player, IlConstHandle playerstate) {
if (player == null || playerstate == null) {
return ILconstInt.create(0);
}
return ((PlayerMock) player.getObj()).playerStates.getOrDefault(playerstate.print(), ILconstInt.create(0));
}

public IlConstHandle GetPlayerSlotState(IlConstHandle player) {
return ConversionProvider.enumHandle("playerslotstate", 1);
}

public IlConstHandle GetPlayerController(IlConstHandle player) {
return ConversionProvider.enumHandle("mapcontrol", 0);
}

public ILconstInt GetPlayerNeutralPassive() {
// fake value
return new ILconstInt(31);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package de.peeeq.wurstio.jassinterpreter.providers;

import de.peeeq.wurstio.objectreader.ObjectHelper;
import de.peeeq.wurstio.jassinterpreter.mocks.DestructableMock;
import de.peeeq.wurstio.jassinterpreter.mocks.UnitMock;
import de.peeeq.wurstscript.intermediatelang.ILconst;
import de.peeeq.wurstscript.intermediatelang.ILconstBool;
import de.peeeq.wurstscript.intermediatelang.ILconstInt;
import de.peeeq.wurstscript.intermediatelang.ILconstNull;
import de.peeeq.wurstscript.intermediatelang.ILconstReal;
import de.peeeq.wurstscript.intermediatelang.ILconstString;
import de.peeeq.wurstscript.intermediatelang.IlConstHandle;
Expand All @@ -22,8 +25,43 @@ public IlConstHandle CreateUnit(IlConstHandle owner, ILconstInt unitid, ILconstR
return new IlConstHandle(NameProvider.getRandomName("unit"), new UnitMock(owner, unitid, x, y, face));
}

public ILconst GetOwningPlayer(IlConstHandle unit) {
UnitMock unitMock = unitOrNull(unit);
return unitMock == null ? ILconstNull.instance() : unitMock.owner;
}

public ILconstInt GetUnitTypeId(IlConstHandle unit) {
return ((UnitMock)unit.getObj()).unitid;
UnitMock unitMock = unitOrNull(unit);
return unitMock == null ? ILconstInt.create(0) : unitMock.unitid;
}

public ILconstReal GetUnitX(IlConstHandle unit) {
UnitMock unitMock = unitOrNull(unit);
return unitMock == null ? ILconstReal.create(0) : unitMock.x;
}

public ILconstReal GetUnitY(IlConstHandle unit) {
UnitMock unitMock = unitOrNull(unit);
return unitMock == null ? ILconstReal.create(0) : unitMock.y;
}

public void SetUnitX(IlConstHandle unit, ILconstReal x) {
UnitMock unitMock = unitOrNull(unit);
if (unitMock != null) {
unitMock.x = x;
}
}

public void SetUnitY(IlConstHandle unit, ILconstReal y) {
UnitMock unitMock = unitOrNull(unit);
if (unitMock != null) {
unitMock.y = y;
}
}

public ILconstReal GetUnitFacing(IlConstHandle unit) {
UnitMock unitMock = unitOrNull(unit);
return unitMock == null ? ILconstReal.create(0) : unitMock.face;
}

public ILconstString GetUnitName(IlConstHandle unit) {
Expand Down Expand Up @@ -67,9 +105,107 @@ public ILconstBool IsUnitType(IlConstHandle whichUnit, IlConstHandle whichUnitTy
}

public void RemoveUnit(IlConstHandle unit) {
UnitMock unitMock = unitOrNull(unit);
if (unitMock != null) {
unitMock.removed = true;
}
userDataMap.remove(unit);
}

public void KillUnit(IlConstHandle unit) {
UnitMock unitMock = unitOrNull(unit);
if (unitMock != null) {
unitMock.states.put("unitstate0", ILconstReal.create(0));
}
}

public ILconstReal GetUnitState(IlConstHandle unit, IlConstHandle unitstate) {
UnitMock unitMock = unitOrNull(unit);
if (unitMock == null) {
return ILconstReal.create(0);
}
return unitMock.states.getOrDefault(unitStateKey(unitstate), ILconstReal.create(0));
}

public void SetUnitState(IlConstHandle unit, IlConstHandle unitstate, ILconstReal value) {
UnitMock unitMock = unitOrNull(unit);
if (unitMock != null) {
unitMock.states.put(unitStateKey(unitstate), value);
}
}

public ILconstReal GetWidgetLife(IlConstHandle widget) {
UnitMock unitMock = unitOrNull(widget);
if (unitMock != null) {
return unitMock.states.getOrDefault("unitstate0", ILconstReal.create(0));
}
DestructableMock destructableMock = destructableOrNull(widget);
return destructableMock == null ? ILconstReal.create(0) : destructableMock.life;
}

public void SetWidgetLife(IlConstHandle widget, ILconstReal newLife) {
UnitMock unitMock = unitOrNull(widget);
if (unitMock != null) {
unitMock.states.put("unitstate0", newLife);
return;
}
DestructableMock destructableMock = destructableOrNull(widget);
if (destructableMock != null) {
destructableMock.life = newLife;
}
}

public ILconstBool UnitAddAbility(IlConstHandle unit, ILconstInt abilityId) {
UnitMock unitMock = unitOrNull(unit);
if (unitMock == null) {
return ILconstBool.FALSE;
}
unitMock.abilityLevels.putIfAbsent(abilityId.getVal(), ILconstInt.create(1));
return ILconstBool.TRUE;
}

public ILconstBool UnitRemoveAbility(IlConstHandle unit, ILconstInt abilityId) {
UnitMock unitMock = unitOrNull(unit);
if (unitMock == null) {
return ILconstBool.FALSE;
}
return ILconstBool.instance(unitMock.abilityLevels.remove(abilityId.getVal()) != null);
}

public ILconstInt GetUnitAbilityLevel(IlConstHandle unit, ILconstInt abilityId) {
UnitMock unitMock = unitOrNull(unit);
if (unitMock == null) {
return ILconstInt.create(0);
}
return unitMock.abilityLevels.getOrDefault(abilityId.getVal(), ILconstInt.create(0));
}

public ILconstInt SetUnitAbilityLevel(IlConstHandle unit, ILconstInt abilityId, ILconstInt level) {
UnitMock unitMock = unitOrNull(unit);
if (unitMock == null) {
return ILconstInt.create(0);
}
unitMock.abilityLevels.put(abilityId.getVal(), level);
return level;
}

public ILconstBool IssueImmediateOrderById(IlConstHandle unit, ILconstInt orderId) {
return issueOrder(unit, orderId);
}

public ILconstBool IssuePointOrderById(IlConstHandle unit, ILconstInt orderId, ILconstReal x, ILconstReal y) {
return issueOrder(unit, orderId);
}

public ILconstBool IssueTargetOrderById(IlConstHandle unit, ILconstInt orderId, IlConstHandle target) {
return issueOrder(unit, orderId);
}

public ILconstInt GetUnitCurrentOrder(IlConstHandle unit) {
UnitMock unitMock = unitOrNull(unit);
return unitMock == null ? ILconstInt.create(0) : unitMock.currentOrder;
}

public ILconstInt GetUnitUserData(IlConstHandle unit) {
return unit == null ? ILconstInt.create(0) : userDataMap.getOrDefault(unit, ILconstInt.create(0));
}
Expand All @@ -80,4 +216,31 @@ public void SetUnitUserData(IlConstHandle unit, ILconstInt userData) {
}
userDataMap.put(unit, userData);
}

private ILconstBool issueOrder(IlConstHandle unit, ILconstInt orderId) {
UnitMock unitMock = unitOrNull(unit);
if (unitMock == null) {
return ILconstBool.FALSE;
}
unitMock.currentOrder = orderId;
return ILconstBool.TRUE;
}

private UnitMock unitOrNull(IlConstHandle unit) {
if (unit == null || !(unit.getObj() instanceof UnitMock)) {
return null;
}
return (UnitMock) unit.getObj();
}

private DestructableMock destructableOrNull(IlConstHandle destructable) {
if (destructable == null || !(destructable.getObj() instanceof DestructableMock)) {
return null;
}
return (DestructableMock) destructable.getObj();
}

private String unitStateKey(IlConstHandle unitstate) {
return unitstate == null ? "unitstate0" : unitstate.print();
}
}
Loading
Loading