package hbl { import flash.display.MovieClip; import flash.display.Sprite; import mx.core.MovieClipAsset; import flash.events.MouseEvent; import mx.core.UIComponent; public class LightSprite extends UIComponent { // import the sprites... [Bindable] [Embed(source="../assets/sprite1.png")] public var spriteOne:Class; [Bindable] [Embed(source="../assets/sprite1light.png")] public var spriteOneLight:Class; [Bindable] [Embed(source="../assets/Assets.swf", symbol="sprite2")] public var sprite2:Class; [Bindable] [Embed(source="../assets/Assets.swf", symbol="sprite2light")] public var sprite2light:Class; [Bindable] [Embed(source="../assets/Assets.swf", symbol="selected")] public var hsAsset:Class; private var hs:MovieClipAsset = MovieClipAsset(new hsAsset()); private var sprite:MovieClipAsset; private var spriteLight:MovieClipAsset; private var selected:Boolean = false; // every instance registers here (to have access to the rest) static private var instances:Array = []; // should be called affer attaching on the display public function init(spriteId:String):void { instances.push(this); import mx.core.MovieClipAsset; switch (spriteId) { case '1': sprite = MovieClipAsset(new spriteOne()); // <-- fails to "coerce" to MC Asset spriteLight = MovieClipAsset(new spriteOneLight()); // <-- fails to "coerce" to MC Asset break; case '2': sprite = MovieClipAsset(new sprite2()); // <-- fails to "coerce" to MC Asset spriteLight = MovieClipAsset(new sprite2light()); // <-- fails to "coerce" to MC Asset break; } // NOTE: if I type up there "new hsAsset()" it will NOT fail! It'll work !? // attach on display addChild(sprite); addChild(spriteLight); spriteLight.blendMode = 'add'; addChild(hs); hs.gotoAndStop(1); hs.alpha = 0; hs.addEventListener(MouseEvent.ROLL_OVER, onRollOver, false, 0, true); hs.addEventListener(MouseEvent.ROLL_OUT, onRollOut, false, 0, true); hs.addEventListener(MouseEvent.CLICK, onClick, false, 0, true); hs.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown, false, 0, true); hs.addEventListener(MouseEvent.MOUSE_UP, onMouseUp, false, 0, true); } // called for all other sprites when this is selected public function deselect():void { hs.alpha = 0; selected = false; } private function onRollOver():void { if (!selected) { hs.alpha = 100; hs.gotoAndStop(1); } } private function onRollOut():void { if (!selected) { hs.alpha = 0; } } private function onMouseDown():void { if (selected) startDrag(); } private function onMouseUp():void { if (selected) stopDrag(); } private function onClick():void { if (!selected) { for (var i:Object in instances) { instances[i].deselect(); } selected = true; hs.alpha = 100; hs.gotoAndStop(2); } } } }