summaryrefslogtreecommitdiff
path: root/NET/worlds/scape/SoundState.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/SoundState.java
downloadworldsplayer-c7a9d4a6bd53ed7d61731770f2f10e8b9fd435f9.tar.xz
worldsplayer-c7a9d4a6bd53ed7d61731770f2f10e8b9fd435f9.zip
Initial commit
Diffstat (limited to 'NET/worlds/scape/SoundState.java')
-rw-r--r--NET/worlds/scape/SoundState.java307
1 files changed, 307 insertions, 0 deletions
diff --git a/NET/worlds/scape/SoundState.java b/NET/worlds/scape/SoundState.java
new file mode 100644
index 0000000..eef9d07
--- /dev/null
+++ b/NET/worlds/scape/SoundState.java
@@ -0,0 +1,307 @@
+package NET.worlds.scape;
+
+import NET.worlds.network.Cache;
+import NET.worlds.network.URL;
+
+class SoundState implements State {
+ public static final int IDLE = 0;
+ public static final int start = 1;
+ public static final int intel0 = 1000;
+ public static final int intel10 = 1010;
+ public static final int intel11 = 1011;
+ public static final int intel20 = 1020;
+ public static final int intel21 = 1021;
+ public static final int intel30 = 1030;
+ public static final int intel31 = 1031;
+ public static final int intel32 = 1032;
+ public static final int intel33 = 1033;
+ public static final int realAudio0 = 2000;
+ public static final int realAudio10 = 2010;
+ public static final int realAudio11 = 2011;
+ private static SoundState instance = new SoundState();
+ private static URL dummy = URL.make("home:dummy.wav");
+
+ private SoundState() {
+ }
+
+ private void debugOut(int n, String s) {
+ if (Sound.debugLevel > n) {
+ System.out.println(s);
+ }
+ }
+
+ public static State instance() {
+ return instance;
+ }
+
+ @Override
+ public Object doState(StateContext sc, Object obj) {
+ Sound sound = (Sound)sc;
+ Object rv;
+ switch (sound.state) {
+ case 1:
+ rv = this.start(sound, obj);
+ break;
+ case 1000:
+ rv = this.intel0(sound, obj);
+ break;
+ case 1010:
+ rv = this.intel10(sound, obj);
+ break;
+ case 1011:
+ rv = this.intel11(sound, obj);
+ break;
+ case 1020:
+ rv = this.intel20(sound, obj);
+ break;
+ case 1021:
+ rv = this.intel21(sound, obj);
+ break;
+ case 1030:
+ rv = this.intel30(sound, obj);
+ break;
+ case 1031:
+ rv = this.intel31(sound, obj);
+ break;
+ case 1032:
+ rv = this.intel32(sound, obj);
+ break;
+ case 1033:
+ rv = this.intel33(sound, obj);
+ break;
+ case 2000:
+ rv = this.realAudio0(sound, obj);
+ break;
+ case 2010:
+ rv = this.realAudio10(sound, obj);
+ break;
+ case 2011:
+ rv = this.realAudio11(sound, obj);
+ break;
+ default:
+ rv = this.error(sound, obj);
+ }
+
+ return rv;
+ }
+
+ private Object error(Sound sound, Object obj) {
+ this.debugOut(2, "Unknown state in SoundState " + sound.state);
+ return null;
+ }
+
+ private Object start(Sound sound, Object obj) {
+ this.debugOut(6, "Entering SoundState ");
+
+ assert sound.backgroundState == 1;
+
+ if (sound.isRealAudio(sound.getURL())) {
+ sound.changeState(2000);
+ } else {
+ sound.changeState(1000);
+ }
+
+ sound.doState(null);
+ return null;
+ }
+
+ private Object intel0(Sound sound, Object obj) {
+ this.debugOut(6, "Entering intel0 ");
+
+ assert sound.backgroundState == 1;
+
+ if (!SoundResource.instance().syncLock(1)) {
+ return null;
+ } else if (!sound.getURL().isRemote()) {
+ sound.changeState(1010);
+ BackgroundLoader.get(sound, sound.getURL());
+ return null;
+ } else {
+ sound.cachedFile = Cache.getFile(sound.getURL());
+ if (sound.cachedFile.done()) {
+ sound.ensureClosure();
+ sound.changeState(1020);
+ BackgroundLoader.get(sound, sound.getURL());
+ return null;
+ } else {
+ sound.cachedFile.finalize();
+ sound.cachedFile = null;
+ sound.changeState(1030);
+ BackgroundLoader.get(sound, dummy);
+ return null;
+ }
+ }
+ }
+
+ private Object intel10(Sound sound, Object localName) {
+ assert sound.backgroundState == 2;
+
+ assert localName != null;
+
+ SoundResource.instance().asyncLock();
+ sound.changeState(1011);
+ if (sound.openPlayer((URL)localName)) {
+ return localName;
+ } else {
+ this.debugOut(2, "intel10: couldn't open sound " + sound.getURL());
+ return null;
+ }
+ }
+
+ private Object intel11(Sound sound, Object obj) {
+ this.debugOut(6, "Entering intel11 ");
+
+ assert sound.backgroundState == 1;
+
+ if (obj != null) {
+ if (sound.updateSound()) {
+ sound.player.start(sound.getRepeat());
+ } else {
+ sound.closePlayer();
+ }
+ }
+
+ sound.changeState(0);
+ return null;
+ }
+
+ private Object intel20(Sound sound, Object obj) {
+ this.debugOut(6, "Entering intel20 ");
+
+ assert sound.backgroundState == 2;
+
+ SoundResource.instance().asyncLock();
+ if (sound.openPlayer((URL)obj)) {
+ sound.changeState(1021);
+ return obj;
+ } else {
+ this.debugOut(2, "intel20: couldn't open player on sound " + sound.getURL());
+ sound.changeState(1021);
+ return null;
+ }
+ }
+
+ private Object intel21(Sound sound, Object obj) {
+ this.debugOut(6, "Entering intel21 ");
+
+ assert sound.backgroundState == 1;
+
+ if (obj == null) {
+ sound.unlockCache();
+ } else if (sound.updateSound()) {
+ this.debugOut(6, "intel21 starting sound");
+ sound.player.start(sound.getRepeat());
+ } else {
+ this.debugOut(6, "intel21 closing player");
+ sound.closePlayer();
+ }
+
+ sound.changeState(0);
+ return null;
+ }
+
+ private Object intel30(Sound sound, Object obj) {
+ this.debugOut(6, "Entering intel30 ");
+
+ assert sound.backgroundState == 2;
+
+ SoundResource.instance().asyncLock();
+ if (sound.openPlayer(dummy)) {
+ sound.changeState(1031);
+ return obj;
+ } else {
+ this.debugOut(2, "intel30: couldn't open player on file " + sound.getURL());
+ sound.changeState(1031);
+ return null;
+ }
+ }
+
+ private Object intel31(Sound sound, Object obj) {
+ this.debugOut(6, "Entering intel31 ");
+
+ assert sound.backgroundState == 1;
+
+ if (obj == null) {
+ sound.changeState(0);
+ } else if (sound.updateSound()) {
+ sound.player.start(1);
+ sound.changeState(1032);
+ BackgroundLoader.get(sound, sound.getURL());
+ } else {
+ sound.closePlayer();
+ sound.changeState(0);
+ }
+
+ return null;
+ }
+
+ private Object intel32(Sound sound, Object obj) {
+ this.debugOut(6, "Entering intel32 ");
+
+ assert sound.backgroundState == 2;
+
+ sound.changeState(1033);
+ return obj;
+ }
+
+ private Object intel33(Sound sound, Object obj) {
+ this.debugOut(6, "Entering intel33 ");
+
+ assert sound.backgroundState == 1;
+
+ if (obj != null && sound.playAfterLoading) {
+ sound.closePlayer();
+ sound.changeState(1000);
+ sound.doState(obj);
+ } else {
+ sound.changeState(0);
+ }
+
+ return null;
+ }
+
+ private Object realAudio0(Sound sound, Object obj) {
+ this.debugOut(6, "Entering RealAudio0 ");
+
+ assert sound.backgroundState == 1;
+
+ if (!SoundResource.instance().syncLock(2)) {
+ return null;
+ } else {
+ sound.changeState(2010);
+ BackgroundLoader.get(sound, dummy);
+ return null;
+ }
+ }
+
+ private Object realAudio10(Sound sound, Object obj) {
+ this.debugOut(6, "Entering realAudio10 ");
+
+ assert sound.backgroundState == 2;
+
+ SoundResource.instance().asyncLock();
+ if (sound.openPlayer(sound.getURL())) {
+ sound.changeState(2011);
+ return sound;
+ } else {
+ return null;
+ }
+ }
+
+ private Object realAudio11(Sound sound, Object obj) {
+ this.debugOut(6, "Entering realAudio11 ");
+
+ assert sound.backgroundState == 1;
+
+ if (obj != null) {
+ if (sound.updateSound()) {
+ sound.player.start(sound.getRepeat());
+ } else {
+ sound.closePlayer();
+ }
+ }
+
+ sound.changeState(0);
+ return null;
+ }
+}