Allow get/setVarbitValue to operate on arbitrary varp sets

This commit is contained in:
Max Weber
2018-05-13 21:28:10 -06:00
parent 66ccd9c0d6
commit 572d92378a
3 changed files with 14 additions and 10 deletions

View File

@@ -173,6 +173,7 @@ public interface Client extends GameEngine
int[][] getXteaKeys(); int[][] getXteaKeys();
@VisibleForDevtools
int[] getVarps(); int[] getVarps();
@VisibleForDevtools @VisibleForDevtools
@@ -193,10 +194,10 @@ public interface Client extends GameEngine
void setSetting(Varbits varbit, int value); void setSetting(Varbits varbit, int value);
@VisibleForDevtools @VisibleForDevtools
int getVarbitValue(int varbit); int getVarbitValue(int[] varps, int varbitId);
@VisibleForDevtools @VisibleForDevtools
void setVarbitValue(int varbit, int value); void setVarbitValue(int[] varps, int varbit, int value);
HashTable getWidgetFlags(); HashTable getWidgetFlags();

View File

@@ -174,7 +174,7 @@ public class DevToolsPlugin extends Plugin
case "getvar": case "getvar":
{ {
int varbit = Integer.parseInt(args[0]); int varbit = Integer.parseInt(args[0]);
int value = client.getVarbitValue(varbit); int value = client.getVarbitValue(client.getVarps(), varbit);
client.addChatMessage(ChatMessageType.SERVER, "", "Varbit " + varbit + ": " + value, null); client.addChatMessage(ChatMessageType.SERVER, "", "Varbit " + varbit + ": " + value, null);
break; break;
} }
@@ -182,7 +182,7 @@ public class DevToolsPlugin extends Plugin
{ {
int varbit = Integer.parseInt(args[0]); int varbit = Integer.parseInt(args[0]);
int value = Integer.parseInt(args[1]); int value = Integer.parseInt(args[1]);
client.setVarbitValue(varbit, value); client.setVarbitValue(client.getVarps(), varbit, value);
client.addChatMessage(ChatMessageType.SERVER, "", "Set varbit " + varbit + " to " + value, null); client.addChatMessage(ChatMessageType.SERVER, "", "Set varbit " + varbit + " to " + value, null);
eventBus.post(new VarbitChanged()); // fake event eventBus.post(new VarbitChanged()); // fake event
break; break;

View File

@@ -57,7 +57,7 @@ public abstract class VarbitMixin implements RSClient
public int getVar(Varbits varbit) public int getVar(Varbits varbit)
{ {
int varbitId = varbit.getId(); int varbitId = varbit.getId();
return getVarbitValue(varbitId); return getVarbitValue(getVarps(), varbitId);
} }
@Inject @Inject
@@ -65,12 +65,12 @@ public abstract class VarbitMixin implements RSClient
public void setSetting(Varbits varbit, int value) public void setSetting(Varbits varbit, int value)
{ {
int varbitId = varbit.getId(); int varbitId = varbit.getId();
setVarbitValue(varbitId, value); setVarbitValue(getVarps(), varbitId, value);
} }
@Inject @Inject
@Override @Override
public int getVarbitValue(int varbitId) public int getVarbitValue(int[] varps, int varbitId)
{ {
RSVarbit v = varbitCache.getIfPresent(varbitId); RSVarbit v = varbitCache.getIfPresent(varbitId);
if (v == null) if (v == null)
@@ -81,7 +81,11 @@ public abstract class VarbitMixin implements RSClient
varbitCache.put(varbitId, v); varbitCache.put(varbitId, v);
} }
int[] varps = getVarps(); if (v.getIndex() == 0 && v.getLeastSignificantBit() == 0 && v.getMostSignificantBit() == 0)
{
throw new IndexOutOfBoundsException("Varbit " + varbitId + " does not exist");
}
int value = varps[v.getIndex()]; int value = varps[v.getIndex()];
int lsb = v.getLeastSignificantBit(); int lsb = v.getLeastSignificantBit();
int msb = v.getMostSignificantBit(); int msb = v.getMostSignificantBit();
@@ -91,7 +95,7 @@ public abstract class VarbitMixin implements RSClient
@Inject @Inject
@Override @Override
public void setVarbitValue(int varbitId, int value) public void setVarbitValue(int[] varps, int varbitId, int value)
{ {
RSVarbit v = varbitCache.getIfPresent(varbitId); RSVarbit v = varbitCache.getIfPresent(varbitId);
if (v == null) if (v == null)
@@ -102,7 +106,6 @@ public abstract class VarbitMixin implements RSClient
varbitCache.put(varbitId, v); varbitCache.put(varbitId, v);
} }
int[] varps = getVarps();
int lsb = v.getLeastSignificantBit(); int lsb = v.getLeastSignificantBit();
int msb = v.getMostSignificantBit(); int msb = v.getMostSignificantBit();
int mask = (1 << ((msb - lsb) + 1)) - 1; int mask = (1 << ((msb - lsb) + 1)) - 1;