package com.badlogic.cubocy;\r
\r
import com.badlogic.gdx.Gdx;\r
-import com.badlogic.gdx.Application.ApplicationType;\r
import com.badlogic.gdx.graphics.Pixmap;\r
import com.badlogic.gdx.utils.Array;\r
\r
for (int x = 0; x < 150; x++) { \r
int pix = (pixmap.getPixel(x, y) >>> 8) & 0xffffff;\r
Gdx.app.log("Map", x + ", " + y + ", " + Integer.toHexString(pix));\r
- if (pix == START) {\r
+ if (match(pix, START)) {\r
Dispenser dispenser = new Dispenser(x, pixmap.getHeight() - 1 - y);\r
dispensers.add(dispenser);\r
activeDispenser = dispenser;\r
bob.state = Bob.SPAWN;\r
cube = new Cube(this, activeDispenser.bounds.x, activeDispenser.bounds.y);\r
cube.state = Cube.DEAD;\r
- } else if (pix == DISPENSER) {\r
+ } else if (match(pix, DISPENSER)) {\r
Dispenser dispenser = new Dispenser(x, pixmap.getHeight() - 1 - y);\r
dispensers.add(dispenser);\r
- } else if (pix == ROCKET) {\r
+ } else if (match(pix, ROCKET)) {\r
Rocket rocket = new Rocket(this, x, pixmap.getHeight() - 1 - y);\r
rockets.add(rocket);\r
- } else if (pix == MOVING_SPIKES) {\r
+ } else if (match(pix, MOVING_SPIKES)) {\r
movingSpikes.add(new MovingSpikes(this, x, pixmap.getHeight() - 1 - y));\r
- } else if (pix == LASER) {\r
+ } else if (match(pix, LASER)) {\r
lasers.add(new Laser(this, x, pixmap.getHeight() - 1 - y));\r
- } else if (pix == END) {\r
+ } else if (match(pix, END)) {\r
endDoor = new EndDoor(x, pixmap.getHeight() - 1 - y);\r
} else {\r
tiles[x][y] = pix;\r
}\r
}\r
\r
+ boolean match(int src, int dst) {\r
+ return src == dst;\r
+ }\r
+ \r
public void update (float deltaTime) {\r
bob.update(deltaTime);\r
if (bob.state == Bob.DEAD) bob = new Bob(this, activeDispenser.bounds.x, activeDispenser.bounds.y);\r
--- /dev/null
+/*\r
+ * Copyright 2011 Fred Sauer\r
+ * \r
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not\r
+ * use this file except in compliance with the License. You may obtain a copy of\r
+ * the License at\r
+ * \r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * \r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT\r
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\r
+ * License for the specific language governing permissions and limitations under\r
+ * the License.\r
+ */\r
+ \r
+ // See http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/media/Sound.html\r
+\r
+ package {\r
+ import flash.external.ExternalInterface;\r
+ import flash.media.Sound;\r
+ import flash.display.Sprite;\r
+ import flash.events.Event;\r
+ import flash.events.IOErrorEvent;\r
+ import flash.media.SoundChannel;\r
+ import flash.media.SoundLoaderContext;\r
+ import flash.net.URLRequest;\r
+ import flash.media.SoundTransform;\r
+ \r
+ public class Voices extends Sprite\r
+ {\r
+ private var sounds:Array = [];\r
+ private var volume:Array = [];\r
+ private var panning:Array = [];\r
+ private var channel:Array = [];\r
+ private var loop:Array = [];\r
+ private var domId:String;\r
+ \r
+ public function Voices() {\r
+ ExternalInterface.marshallExceptions = true;\r
+ \r
+ domId = this.root.loaderInfo.parameters.id;\r
+ log("***************************************************************************************************");\r
+ log("Creating Voices '" + domId + "' ...");\r
+ \r
+ log("ExternalInterface.available = " + ExternalInterface.available);\r
+ log("ExternalInterface.objectID = " + ExternalInterface.objectID);\r
+ \r
+ var result:Object;\r
+ \r
+ ExternalInterface.addCallback("createSound", createSound);\r
+ log("addCallback(createSound) -> done");\r
+ \r
+ ExternalInterface.addCallback("playSound", playSound);\r
+ log("addCallback(playSound) -> done");\r
+ \r
+ ExternalInterface.addCallback("stopSound", stopSound);\r
+ log("addCallback(stopSound) -> done");\r
+ \r
+ ExternalInterface.addCallback("setLooping", setLooping);\r
+ log("addCallback(setLooping) -> done");\r
+ \r
+ ExternalInterface.addCallback("setVolume", setVolume);\r
+ log("addCallback(setVolume) -> done");\r
+ \r
+ ExternalInterface.addCallback("setPanning", setPanning);\r
+ log("addCallback(setPanning) -> done");\r
+ \r
+ log("Voices created.");\r
+ \r
+ // notify JavaScript that we are ready\r
+ result = ExternalInterface.call("document.VoicesMovie['" + domId + "'].ready");\r
+ log("document.VoicesMovie['" + domId + "'].ready() -> " + result);\r
+ }\r
+\r
+ private function createSound(id:Number, url:String, checkPolicyFile:Boolean):void {\r
+ var func:String = "createSound(id=" + id + ", url='" + url + "')";\r
+ logStart(func);\r
+\r
+ // default to false\r
+ loop[id] = 0;\r
+\r
+ var bufferTime:Number = 1000; // default\r
+ var context:SoundLoaderContext = new SoundLoaderContext(bufferTime, checkPolicyFile);\r
+\r
+ sounds[id] = new Sound();\r
+ volume[id] = 1;\r
+ panning[id] = 0;\r
+ sounds[id].addEventListener(Event.COMPLETE, function(event:Event):void {\r
+ var func:String = "Event.COMPLETE (=Sound Loaded) id=" + id;\r
+ logStart(func);\r
+ try {\r
+ var result:Object = ExternalInterface.call("document.VoicesMovie['" + domId + "'].soundLoaded", id);\r
+ } catch(e:Error) {\r
+ logError(func, e);\r
+ }\r
+ log("document.VoicesMovie['" + domId + "'].soundLoaded(" + id + ") -> " + result + " // " + typeof result);\r
+ logEnd(func);\r
+ });\r
+ // TODO handle IO_ERROR\r
+// sounds[id].addEventListener(IOErrorEvent.IO_ERROR, function(event:Event):void {\r
+// log("IOErrorEvent.IO_ERROR id=" + id);\r
+// var result:Object = ExternalInterface.call("document.VoicesMovie['" + domId + "'].soundLoaded", id);\r
+// log("document.VoicesMovie['" + domId + "'].soundLoaded(" + id + ") -> " + result);\r
+// });\r
+ sounds[id].load(new URLRequest(url), context);\r
+ logEnd(func);\r
+ }\r
+ \r
+ private function playSound(id:Number):Boolean {\r
+ var func:String = "playSound(id=" + id + ")";\r
+ logStart(func);\r
+ var success:Boolean;\r
+ \r
+ if (channel[id] != null) {\r
+ channel[id].stop();\r
+ }\r
+ var transform:SoundTransform = new SoundTransform(volume[id], panning[id]);\r
+ /*\r
+ * Sound#play() returns null if there is no sound card, or if the maximum number of sound channels (32) has been reached.\r
+ * See http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/Sound.html#play()\r
+ */\r
+ channel[id] = sounds[id].play(0, loop[id], transform);\r
+ if (channel[id] == null) {\r
+ log("No (more) channel(s) available to play sound id " + id);\r
+ success = false;\r
+ } else {\r
+ channel[id].addEventListener(Event.SOUND_COMPLETE, function(event:Event):void {\r
+ var func:String = "Event.SOUND_COMPLETE (=Playback Completed) id=" + id;\r
+ logStart(func);\r
+ var method:String = "document.VoicesMovie['" + domId + "'].playbackCompleted";\r
+ try {\r
+ var result:Object = ExternalInterface.call(method, id);\r
+ logResult(method, result);\r
+ } catch(e:Error) {\r
+ logError(method, e)\r
+ }\r
+ });\r
+ success = true;\r
+ }\r
+ logEnd(func);\r
+ return success;\r
+ }\r
+ \r
+ private function stopSound(id:Number):void {\r
+ var func:String = "stopSound(id=" + id + ")";\r
+ logStart(func);\r
+ channel[id].stop();\r
+ logEnd(func);\r
+ }\r
+\r
+ private function setLooping(id:Number, loopCount:Number):void {\r
+ var func:String = "setLooping(id=" + id + ", loopCount=" + loopCount + ")";\r
+ logStart(func);\r
+ loop[id] = loopCount;\r
+ logEnd(func);\r
+ }\r
+ \r
+ private function setVolume(id:Number, volume:Number):void {\r
+ var func:String = "setVolume(id=" + id + ", volume=" + volume + "%)";\r
+ logStart(func);\r
+ this.volume[id] = volume;\r
+ logEnd(func);\r
+ }\r
+ \r
+ private function setPanning(id:Number, panning:Number):void {\r
+ var func:String = "setPanning(id=" + id + ", panning=" + panning + ")";\r
+ logStart(func);\r
+ this.panning[id] = panning;\r
+ logEnd(func);\r
+ }\r
+\r
+ private function logStart(func:String):void {\r
+ log(">> " + func);\r
+ }\r
+\r
+ private function logEnd(func:String):void {\r
+ log("<< " + func);\r
+ }\r
+\r
+ private function logResult(method:String, result:Object):void {\r
+ log(method + " -> " + (typeof result) + ": " + result);\r
+ }\r
+ \r
+ private function logError(func:String, e:Error):void {\r
+ log(func + " -> ERROR(" + e + "): " + e.getStackTrace());\r
+ }\r
+ \r
+ private function log(text:String):void {\r
+ //ExternalInterface.call("document.VoicesMovie['" + this.root.loaderInfo.parameters.id + "'].log", text);\r
+ }\r
+ }\r
+}
\ No newline at end of file