diff --git a/src/GameEditor.as b/src/GameEditor.as index 125878b..b517e27 100644 --- a/src/GameEditor.as +++ b/src/GameEditor.as @@ -44,12 +44,12 @@ package } private function onDrawBegin(e: Event): void { - videotube.stream.pause(); + videotube.pause(); } private function onDrawEnd(e: Event): void { - gamedisc.AddQte(new Qte(sketchShape.rgpoint, videotube.stream.time)); - videotube.stream.resume(); + gamedisc.AddQte(new Qte(sketchShape.rgpoint, videotube.time())); + videotube.resume(); } } diff --git a/src/Gamedisc.as b/src/Gamedisc.as index 3e29c4d..211c098 100644 --- a/src/Gamedisc.as +++ b/src/Gamedisc.as @@ -18,6 +18,10 @@ package { rgqte.splice(Math.abs(Util.binarySearch(rgqte, qte, Qte.compare)), 0, qte); } + public function CreateVideotube():Videotube + { + return new VideotubeFlv(this); + } public function ToJson():Object { var jsonRgqte:Array = []; diff --git a/src/Main.as b/src/Main.as index 8efaa23..bc13597 100644 --- a/src/Main.as +++ b/src/Main.as @@ -21,7 +21,7 @@ package public function Main():void { gamedisc = new Gamedisc("The Last Eichhof - Longplay.flv"); - videotube = new Videotube(gamedisc); + videotube = gamedisc.CreateVideotube(); if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } @@ -56,7 +56,7 @@ package gameplayer = new GamePlayer(videotube, gamedisc); addChild(gameplayer); } - videotube.stream.seek(0); + videotube.seek(0); } private function onKey(key:KeyboardEvent):void { diff --git a/src/Videotube.as b/src/Videotube.as index 2ccccd1..bded925 100644 --- a/src/Videotube.as +++ b/src/Videotube.as @@ -1,74 +1,19 @@ package { import flash.display.Sprite; - import flash.events.Event; - import flash.media.Video; - import flash.net.NetConnection; - import flash.net.NetStream; + import flash.events.EventDispatcher; + /** * ... * @author jjp */ public class Videotube extends Sprite { - private var flv:Video; - private var gamedisc:Gamedisc; - public var stream:NetStream; - private var iqte:int; - private var secPrev:Number; - public function Videotube(gamedisc:Gamedisc) - { - super(); - this.gamedisc = gamedisc; - iqte = 0; - secPrev = 0; - addEventListener(Event.ADDED_TO_STAGE, init); - } - private function init(e: Event):void - { - removeEventListener(Event.ADDED_TO_STAGE, init); - addEventListener(Event.REMOVED_FROM_STAGE, cleanup); - - flv = new Video(stage.stageWidth, stage.stageHeight); - addChild(flv); - var conn:NetConnection = new NetConnection(); - conn.connect(null); - stream = new NetStream(conn); - stream.client = new Object(); - flv.attachNetStream(stream); - - stage.addEventListener(Event.ENTER_FRAME, tick); - } - private function cleanup(e: Event):void - { - removeEventListener(Event.REMOVED_FROM_STAGE, cleanup); - stage.removeEventListener(Event.ENTER_FRAME, tick); - } - private function tick(e: Event):void - { - var secNow:Number = stream.time; - if (secNow > secPrev && secPrev >= 0) - { - while(iqte < gamedisc.rgqte.length) - { - var qte:Qte = gamedisc.rgqte[iqte]; - if (qte.secTrigger > secNow) - break; - if (qte.secTrigger > secPrev) - dispatchEvent(new EventQte(qte)); - iqte ++; - } - } - else - { - iqte = 0; - } - secPrev = secNow; - } - public function play():void - { - stream.play(gamedisc.urlVideo); - } - + public function play():void { throw "not implemented"; } + public function pause():void { throw "not implemented"; } + public function resume():void { throw "not implemented"; } + public function time():Number { throw "not implemented"; } + public function seek(sec:Number):void { throw "not implemented"; } } + } \ No newline at end of file diff --git a/src/VideotubeFlv.as b/src/VideotubeFlv.as new file mode 100644 index 0000000..4fd4933 --- /dev/null +++ b/src/VideotubeFlv.as @@ -0,0 +1,74 @@ +package +{ + import flash.display.Sprite; + import flash.events.Event; + import flash.media.Video; + import flash.net.NetConnection; + import flash.net.NetStream; + /** + * ... + * @author jjp + */ + public class VideotubeFlv extends Videotube + { + private var flv:Video; + private var gamedisc:Gamedisc; + private var stream:NetStream; + private var iqte:int; + private var secPrev:Number; + public function VideotubeFlv(gamedisc:Gamedisc) + { + super(); + this.gamedisc = gamedisc; + iqte = 0; + secPrev = 0; + addEventListener(Event.ADDED_TO_STAGE, init); + } + private function init(e: Event):void + { + removeEventListener(Event.ADDED_TO_STAGE, init); + addEventListener(Event.REMOVED_FROM_STAGE, cleanup); + + flv = new Video(stage.stageWidth, stage.stageHeight); + addChild(flv); + var conn:NetConnection = new NetConnection(); + conn.connect(null); + stream = new NetStream(conn); + stream.client = new Object(); + flv.attachNetStream(stream); + + stage.addEventListener(Event.ENTER_FRAME, tick); + } + private function cleanup(e: Event):void + { + removeEventListener(Event.REMOVED_FROM_STAGE, cleanup); + stage.removeEventListener(Event.ENTER_FRAME, tick); + } + private function tick(e: Event):void + { + var secNow:Number = stream.time; + if (secNow > secPrev && secPrev >= 0) + { + while(iqte < gamedisc.rgqte.length) + { + var qte:Qte = gamedisc.rgqte[iqte]; + if (qte.secTrigger > secNow) + break; + if (qte.secTrigger > secPrev) + dispatchEvent(new EventQte(qte)); + iqte ++; + } + } + else + { + iqte = 0; + } + secPrev = secNow; + } + public override function play():void { stream.play(gamedisc.urlVideo); } + public override function pause():void { stream.pause(); } + public override function resume():void { stream.resume(); } + public override function time():Number { return stream.time; } + public override function seek(sec:Number):void { stream.seek(sec); } + } +} \ No newline at end of file