summaryrefslogtreecommitdiff
path: root/NET/worlds/scape/ASFSoundPlayer.java
blob: 1f870647ef0507e7ab91a25718edf586d4ea9e13 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package NET.worlds.scape;

import NET.worlds.network.URL;

public class ASFSoundPlayer extends MCISoundPlayer {
   float ang;
   float dist;
   float vol;
   int leftToRepeat;
   int running;
   private URL url;

   public ASFSoundPlayer(Sound owner) {
      super(owner);
   }

   @Override
   public boolean open(float volume, float stopDist, boolean atten, boolean pan) {
      return true;
   }

   @Override
   public void close() {
      this.stop();
   }

   @Override
   public boolean position(Point3Temp cam, Point3Temp obj, Point3Temp out, Point3Temp up) {
      Point3Temp toObj = Point3Temp.make(obj).minus(cam);
      Point3Temp right = Point3Temp.make(out).cross(up);
      float y = toObj.dot(out);
      float x = toObj.dot(right);
      this.ang = (float)(Math.atan2(y, x) / Math.PI);
      this.dist = toObj.length();
      return this.setVolume(this.vol);
   }

   @Override
   public boolean setVolume(float v) {
      return true;
   }

   @Override
   public int getState() {
      this.gotFinished(!ASFThread.isActive());
      return this.running != 0 ? 0 : 1;
   }

   @Override
   public synchronized void start(int repeatCount) {
      if (repeatCount == 0) {
         this.running = 0;
      } else {
         this.leftToRepeat = repeatCount;
         if (this.leftToRepeat > 0) {
            this.leftToRepeat--;
         }

         this.running = 1;
         URL myURL = this.owner == null ? this.url : this.owner.getURL();
         this.running = 2;
         new ASFThread(myURL, this);
      }
   }

   @Override
   public synchronized void start(URL u) {
      this.url = u;
      this.start(1);
   }

   public static void pauseSystem() {
      ASFThread.pauseASF();
      WavSoundPlayer.pauseSystemExceptASF();
   }

   public static void resumeSystem() {
      ASFThread.resumeASF();
      WavSoundPlayer.resumeSystemExceptASF();
   }

   @Override
   synchronized void gotFinished(boolean f) {
      if (f && this.running == 2) {
         this.start(this.leftToRepeat);
      }
   }

   @Override
   public synchronized void stop() {
      this.leftToRepeat = 0;
      ASFThread.stopASF();
   }

   @Override
   public void volume(float left, float right) {
   }

   public static synchronized boolean isActive() {
      return ASFThread.isActive();
   }

   static synchronized void shutdown() {
      ASFThread.stopASF();
   }

   static native boolean nativePlay(String var0);
}