diff options
| author | Fuwn <[email protected]> | 2026-02-12 22:33:32 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-02-12 22:33:32 -0800 |
| commit | c7a9d4a6bd53ed7d61731770f2f10e8b9fd435f9 (patch) | |
| tree | df9f48bf128a6c0186a8e91857d6ff30fe0e9f18 /NET/worlds/scape/PosableDroneLoader.java | |
| download | worldsplayer-c7a9d4a6bd53ed7d61731770f2f10e8b9fd435f9.tar.xz worldsplayer-c7a9d4a6bd53ed7d61731770f2f10e8b9fd435f9.zip | |
Initial commit
Diffstat (limited to 'NET/worlds/scape/PosableDroneLoader.java')
| -rw-r--r-- | NET/worlds/scape/PosableDroneLoader.java | 84 |
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()); + } + } + } +} |