import rps.Rps; import haxe.remoting.Connection; /* * TODO In stead of maintaing local version of a rules - only maintain the * buffer. playnext would then use connection to javascript to predict the * next note. this would pull on the connection more often but transfer less * shit over it. */ class GenePlayer extends flash.MovieClip { static var player : GenePlayer; var soundmap : Hash; var loaded : Int; var playing : Bool; var wanna_stop : Bool; var buffer : String; public function start() { wanna_stop = false; if (!playing) playnext(); } public function shutup() { wanna_stop = true; } function playnext() { if (loaded < 3 || wanna_stop) { playing = false; return; } var js = haxe.remoting.Connection.jsConnect(); var next = Rps.letter( js.WebRps.predict_stat.call([buffer]) ); soundmap.get( next ).start(); buffer += next; if (buffer.length > Rps.short_len) buffer = buffer.substr( buffer.length - Rps.short_len ); playing = true; } function new() { loaded = 0; playing = false; wanna_stop = false; buffer = ""; soundmap = new Hash(); soundmap.set("r", new flash.Sound(this)); soundmap.set("p", new flash.Sound(this)); soundmap.set("s", new flash.Sound(this)); var me = this; var inc_loaded = function(s:Bool) { me.loaded++; } soundmap.get("r").onLoad = inc_loaded; soundmap.get("p").onLoad = inc_loaded; soundmap.get("s").onLoad = inc_loaded; soundmap.get("r").onSoundComplete = playnext; soundmap.get("p").onSoundComplete = playnext; soundmap.get("s").onSoundComplete = playnext; soundmap.get("r").loadSound("snd/kick.mp3", false); soundmap.get("p").loadSound("snd/hat.mp3", false); soundmap.get("s").loadSound("snd/snare.mp3", false); } static function main() { // create an instance var parent = flash.Lib.current; player = cast(parent.attachMovie("GenePlayer","instance",0), GenePlayer); } }