-
Notifications
You must be signed in to change notification settings - Fork 1
/
PlaySWF.hx
108 lines (89 loc) · 2.76 KB
/
PlaySWF.hx
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
import haxe.Timer;
import com.stencyl.Engine;
import openfl.display.Loader;
import openfl.display.MovieClip;
import openfl.events.Event;
import openfl.utils.ByteArray;
import flash.display.AVM1Movie;
class PlaySWF {
private static var moviesRunning:Map<String, Dynamic>;
public static function playSWF(filename:String, x:Float, y:Float, whenOver:Void->Void) {
playMovie(filename, x, y, function(_) { whenOver(); });
}
public static function playAVM1(filename:String, ms:Float, whenOver:Void->Void) {
playMovie(filename, 0, 0, function(_) { whenOver(); });
Timer.delay(function() { stopMovie(filename); }, Std.int(ms));
}
#if (flash || display)
public static function playMovie(filename:String, x:Float, y:Float, whenLoaded:Bool->Void) {
var clip:MovieClip;
var loader:Loader;
var filepath:String;
var bytes:ByteArray;
if (filename.substr(-4) != ".swf") {
filename += ".swf";
}
filepath = "assets/data/" + filename;
try {
bytes = openfl.Assets.getBytes(filepath);
} catch (e:Dynamic) {
trace("Could not find " + filename);
whenLoaded(false);
return;
}
if (bytes == null) {
trace("Could not find " + filename);
whenLoaded(false);
return;
}
loader = new Loader();
loader.loadBytes(bytes);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(_) {
if (Std.is(loader.content, AVM1Movie)) {
// trace("Playing AVM1 SWF from file " + filename);
loader.x = x;
loader.y = y;
startMovie(loader, filename);
} else {
// trace("Playing AVM2 SWF from file " + filename);
clip = cast(loader.content, MovieClip);
clip.x = x;
clip.y = y;
startMovie(clip, filename);
}
whenLoaded(true);
});
}
public static function startMovie(movie:Dynamic, filename:String) {
if (moviesRunning == null) {
moviesRunning = new Map<String, Dynamic>();
}
moviesRunning.set(filename, movie);
Engine.engine.root.addChild(movie);
}
public static function stopMovie(filename:String) {
if (filename.substr(-4) != ".swf")
filename += ".swf";
var movie:Dynamic = moviesRunning.get(filename);
if (movie == null) {
trace(filename + " is not currently running");
return;
}
Engine.engine.root.removeChild(movie);
if (Std.is(movie, Loader))
movie.unloadAndStop();
moviesRunning.remove(filename);
// trace("Closed SWF from file " + filename);
}
#else
public static function playMovie(filename:String, x:Float, y:Float, whenLoaded:Bool->Void) {
trace("Cannot play SWF files unless running on Flash.");
}
public static function startMovie(movie:Dynamic, filename:String) {
trace("Cannot play SWF files unless running on Flash.");
}
public static function stopMovie(filename:String) {
trace("Cannot play SWF files unless running on Flash.");
}
#end
}