Replace type specific getHash() with universal resolve() method

See 317-DS-min api PR #49 for more info
This commit is contained in:
Shadowrs
2018-10-04 21:51:32 +01:00
parent 16c217378f
commit 5b7cfce082
2 changed files with 24 additions and 1 deletions
@@ -1,6 +1,8 @@
package org.rev317.min.api.wrappers;
import org.parabot.core.Context;
import org.parabot.core.reflect.RefClass;
import org.parabot.core.reflect.RefMethod;
import org.rev317.min.accessors.SceneObjectTile;
import org.rev317.min.api.interfaces.Locatable;
import org.rev317.min.api.methods.Calculations;
@@ -35,6 +37,25 @@ public class SceneObject implements Locatable {
return accessor.getHash();
}
/**
* Resolves the hash depending on the API's inner SceneObjectTile getHash() methods' type.
* @return An object, casted to either Long or Int
*/
public final Object resolveHash() {
Object hash = (int) 0;
try {
RefMethod hashMethod = new RefClass(Context.getInstance().getASMClassLoader().loadClass("org.rev317.min.accessors.SceneObjectTile"), accessor).getMethod("getHash");
if (hashMethod.getReturnType() == int.class) {
hash = (int) hashMethod.invoke();
} else {
hash = (long) hashMethod.invoke();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return hash;
}
/**
* Gets location of this tile
*
@@ -3,6 +3,8 @@ package org.rev317.min.debug;
import org.parabot.core.Context;
import org.parabot.core.paint.AbstractDebugger;
import org.parabot.core.paint.PaintDebugger;
import org.parabot.core.reflect.RefClass;
import org.parabot.core.reflect.RefMethod;
import org.parabot.core.ui.Logger;
import org.parabot.environment.api.utils.Filter;
import org.rev317.min.api.methods.SceneObjects;
@@ -45,7 +47,7 @@ public class DSceneObjectsInteractiveObj extends AbstractDebugger {
for (int i = objects.length - 1; i >= 0; i--) {
System.out.println(
" ID: " + objects[i].getId() +
" UID: " + objects[i].getHash() +
" UID: " + objects[i].resolveHash() +
" Location: " + objects[i].getLocation() +
" Distance: " + objects[i].distanceTo());
}