summaryrefslogtreecommitdiff
path: root/NET/worlds/scape/PosableDroneLoader.java
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-02-12 22:33:32 -0800
committerFuwn <[email protected]>2026-02-12 22:33:32 -0800
commitc7a9d4a6bd53ed7d61731770f2f10e8b9fd435f9 (patch)
treedf9f48bf128a6c0186a8e91857d6ff30fe0e9f18 /NET/worlds/scape/PosableDroneLoader.java
downloadworldsplayer-c7a9d4a6bd53ed7d61731770f2f10e8b9fd435f9.tar.xz
worldsplayer-c7a9d4a6bd53ed7d61731770f2f10e8b9fd435f9.zip
Initial commit
Diffstat (limited to 'NET/worlds/scape/PosableDroneLoader.java')
-rw-r--r--NET/worlds/scape/PosableDroneLoader.java84
1 files changed, 84 insertions, 0 deletions
diff --git a/NET/worlds/scape/PosableDroneLoader.java b/NET/worlds/scape/PosableDroneLoader.java
new file mode 100644
index 0000000..191ef6d
--- /dev/null
+++ b/NET/worlds/scape/PosableDroneLoader.java
@@ -0,0 +1,84 @@
+package NET.worlds.scape;
+
+import NET.worlds.core.Archive;
+import NET.worlds.network.URL;
+import java.net.MalformedURLException;
+import java.util.Enumeration;
+import java.util.Vector;
+
+public class PosableDroneLoader implements Runnable {
+ static final boolean debug = false;
+ DroneLoader loader;
+ private static boolean useCachedFiles = URL.usingCachedAvatars();
+ private Vector droneList = new Vector();
+
+ PosableDroneLoader() {
+ }
+
+ public static boolean usingCache() {
+ return useCachedFiles;
+ }
+
+ public static PendingDrone makePendingDrone(PosableDrone _drone, URL _url) {
+ return (PendingDrone)(useCachedFiles ? new PendingCacheDrone(_drone, _url) : new PendingDrone(_drone, _url));
+ }
+
+ public void load(PosableDrone _drone, URL _url) {
+ PendingDrone pd = makePendingDrone(_drone, _url);
+ this.droneList.addElement(pd);
+ if (this.loader != null) {
+ this.loader.wakeUp();
+ }
+ }
+
+ public boolean isPending(PosableDrone _drone, URL _url) {
+ Vector listCopy = (Vector)this.droneList.clone();
+ Enumeration enums = listCopy.elements();
+
+ while (enums.hasMoreElements()) {
+ PendingDrone pd = (PendingDrone)enums.nextElement();
+ if (pd.getUrl().toString().equals(_url.toString()) && pd.getDrone().toString().equals(_drone.toString())) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ @Override
+ public void run() {
+ this.loader = new DroneLoader();
+
+ while (true) {
+ this.loader.load(this.droneList);
+ }
+ }
+
+ public static String getAvatarBaseName(URL pUrl) {
+ String s = null;
+ int dot = pUrl.getAbsolute().indexOf(46);
+ if (dot != -1) {
+ s = pUrl.getAbsolute().substring(7, dot);
+ }
+
+ return s;
+ }
+
+ public static boolean avatarExistsLocally(URL pUrl) throws MalformedURLException {
+ if (useCachedFiles) {
+ return false;
+ } else if (pUrl.toString().equals(PosableShape.getDefaultURL().toString())) {
+ return true;
+ } else if (!pUrl.getAbsolute().substring(0, 7).equals("avatar:")) {
+ throw new MalformedURLException("Not an avatar URL");
+ } else {
+ String s = getAvatarBaseName(pUrl);
+ if (s == null) {
+ throw new MalformedURLException("No file extension");
+ } else {
+ URL realFile = URL.make(pUrl, s + ".bod");
+ return Archive.exists(realFile.unalias());
+ }
+ }
+ }
+}