Moving stuff around, nothing to see here
git-svn-id: https://aklabs.dyndns.org/svn/aklabs/trunk/games/wilysays@50 eb184899-6090-47d4-a65b-558f62f6ea1c
This commit is contained in:
176
net/aklabs/demo/simonsays/Mastermind.as
Executable file
176
net/aklabs/demo/simonsays/Mastermind.as
Executable file
@@ -0,0 +1,176 @@
|
||||
package net.aklabs.demo.simonsays
|
||||
{
|
||||
|
||||
import flash.utils.Timer;
|
||||
import flash.events.Event;
|
||||
import flash.events.MouseEvent;
|
||||
import flash.events.TimerEvent;
|
||||
import flash.display.Sprite;
|
||||
import net.aklabs.demo.simonsays.Preloader;
|
||||
import net.aklabs.demo.simonsays.SimonButton;
|
||||
import net.aklabs.demo.simonsays.MastermindEvent;
|
||||
|
||||
/*
|
||||
* Class: Mastermind
|
||||
*
|
||||
* This class defines our "Simon Says", "Wily Lok", "Mastermind", whatever you want to call it.
|
||||
* (I called it 3 or 4 different things during the course of development.)
|
||||
*
|
||||
*/
|
||||
public class Mastermind extends Sprite
|
||||
{
|
||||
protected var lightOutTimer:Timer; // timer that fires when it's time to turn off the lights
|
||||
protected var lightButtons:Array; // array of custom SimonButtons that exists in Pattern.COLOR_XXX order
|
||||
public var isLit:Boolean; // is the device currently lit?
|
||||
|
||||
public function Mastermind()
|
||||
{
|
||||
var preloader = Preloader.getInstance();
|
||||
var lightPositions = new Array();
|
||||
// this array holds pairs of (x,y) coordinates at which to place the dark/light colored
|
||||
// Simon Says buttons, since they're meant to cover the existing buttons on the original graphic.
|
||||
// These are hard-coded; in a better implementation, they would come from an XML or would be
|
||||
// individual frames of an SWF which could be fired individually, etc. But this works.
|
||||
// array idx 0: Blue, 1: Green, 2: Red, 3: Yellow
|
||||
|
||||
lightPositions.push( new Array(183, 187)); // blue
|
||||
lightPositions.push( new Array(18, 17)); // green
|
||||
lightPositions.push( new Array(185, 17)); // red
|
||||
lightPositions.push( new Array(18, 186)); // yellow
|
||||
|
||||
// this array holds the button objects for the visible simon says buttons ...
|
||||
this.lightButtons = new Array();
|
||||
// just a temporary array for which images to fetch for creating the down/up button images
|
||||
var fetchArray = new Array( new Array("gfx_btn_darkblue", "gfx_btn_lightblue"),
|
||||
new Array("gfx_btn_darkgreen", "gfx_btn_lightgreen"),
|
||||
new Array("gfx_btn_darkred", "gfx_btn_lightred"),
|
||||
new Array("gfx_btn_darkyellow", "gfx_btn_lightyellow") );
|
||||
// Simon Says body
|
||||
var whole = preloader.getObject("gfx_mastermind");
|
||||
this.addChild(whole);
|
||||
|
||||
for ( var i = 0; i < fetchArray.length ; i++ ) {
|
||||
var btn:SimonButton = new SimonButton(preloader.getObject(fetchArray[i][1]), preloader.getObject(fetchArray[i][0]));
|
||||
btn.x = lightPositions[i][0];
|
||||
btn.y = lightPositions[i][1];
|
||||
this.lightButtons.push(btn);
|
||||
this.addChild(btn);
|
||||
btn.addEventListener(MouseEvent.CLICK, this.onMouseClick); // for some reason, MouseEvent.CLICK never actually does anything?
|
||||
//btn.addEventListener(MouseEvent.MOUSE_UP, this.onMouseClick);
|
||||
}
|
||||
this.lightOutTimer = new Timer(0);
|
||||
}
|
||||
|
||||
/*
|
||||
* flashAll(length)
|
||||
*
|
||||
* This function lights all the lights on the Mastermind for the given length of time
|
||||
*
|
||||
* arguments:
|
||||
* @length:Number, the time in milliseconds for which the Mastermind should stay lit
|
||||
*
|
||||
* Returns : none
|
||||
*/
|
||||
public function flashAll(length:Number)
|
||||
{
|
||||
this.lightOutTimer.delay = length;
|
||||
this.lightOutTimer.addEventListener(TimerEvent.TIMER, this.onTimer);
|
||||
this.lightOutTimer.reset();
|
||||
this.lightOutTimer.start();
|
||||
for (var i = 0 ; i < 4 ; i++) {
|
||||
// fake mouse event to light it up
|
||||
this.lightButtons[i].onMouseDown(null);
|
||||
}
|
||||
this.isLit = true;
|
||||
}
|
||||
|
||||
/*
|
||||
* lightButton(btn, activeTime)
|
||||
*
|
||||
* This function lights up a given button on the Mastermind. Mostly used by the Pattern when it's replaying itself.
|
||||
*
|
||||
* arguments:
|
||||
* @btn:Number, the Pattern.COLOR_XXX button that should light
|
||||
* @activeTime:Number, the amount of milliseconds for which the button should stay lit
|
||||
*
|
||||
* Returns : none
|
||||
*/
|
||||
public function lightButton(btn:Number, activeTime:Number = 0 )
|
||||
{
|
||||
if ( btn < 4 ) {
|
||||
this.lightButtons[btn].onMouseDown(null);
|
||||
this.isLit = true;
|
||||
}
|
||||
if ( activeTime != 0 ) {
|
||||
this.lightOutTimer.delay = activeTime;
|
||||
this.lightOutTimer.addEventListener(TimerEvent.TIMER, this.onTimer);
|
||||
this.lightOutTimer.reset();
|
||||
this.lightOutTimer.start();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* blackout()
|
||||
*
|
||||
* This function makes sure that all lights on the Mastermind are extinguished
|
||||
*
|
||||
* arguments : none
|
||||
*
|
||||
* Returns : none
|
||||
*/
|
||||
public function blackout()
|
||||
{
|
||||
if ( this.lightButtons.length <= 0 ) {
|
||||
return;
|
||||
}
|
||||
for ( var i = 0 ; i < this.lightButtons.length ; i++ ){
|
||||
this.lightButtons[i].onMouseUp(null);
|
||||
}
|
||||
this.isLit = false;
|
||||
}
|
||||
|
||||
/*
|
||||
* onTimer(evt)
|
||||
*
|
||||
* This function fires whenever the lightOutTimer fires, telling the lights to shut off
|
||||
*
|
||||
* arguments :
|
||||
* @evt:Event, the event that's firing this function
|
||||
*
|
||||
* Returns : none
|
||||
*/
|
||||
public function onTimer(evt:TimerEvent)
|
||||
{
|
||||
if ( evt.target != this.lightOutTimer )
|
||||
return;
|
||||
this.lightOutTimer.removeEventListener(TimerEvent.TIMER, this.onTimer);
|
||||
this.lightOutTimer.stop();
|
||||
this.lightOutTimer.reset();
|
||||
this.blackout();
|
||||
}
|
||||
|
||||
/*
|
||||
* onMouseClick()
|
||||
*
|
||||
* This function is fired whenever the user clicks one of the Mastermind's buttons
|
||||
*
|
||||
* arguments:
|
||||
* @evt:Event, the event firing this function
|
||||
*
|
||||
* Returns : none
|
||||
*/
|
||||
public function onMouseClick(evt:MouseEvent)
|
||||
{
|
||||
// we don't do any processing here, as the SimonButton has already checked for
|
||||
// per-pixel accuracy w/ the click on our abnormally shaped buttons. We just propagate
|
||||
// out a new MastermindEvent for the game to catch.
|
||||
for ( var i:Number = 0; i < this.lightButtons.length ; i++ ) {
|
||||
if ( evt.target == this.lightButtons[i] ) {
|
||||
var newEvt:MastermindEvent = new MastermindEvent(MastermindEvent.BTN_CLICKED);
|
||||
newEvt.colorClicked = i;
|
||||
this.dispatchEvent(newEvt);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user