Created
April 19, 2012 10:48
-
-
Save thomasjmwb/2420212 to your computer and use it in GitHub Desktop.
Character controller class for microphone based game
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package code | |
{ | |
import flash.display.MovieClip; | |
import flash.media.*; | |
import flash.system.Security; | |
import flash.events.*; | |
import flash.utils.Timer; | |
public class characterManager extends MovieClip | |
{ | |
var hitTestClass:hitTestManager=new hitTestManager(); | |
var playerCharacter:MovieClip; | |
var hitScape:MovieClip; | |
var myMic:Microphone = Microphone.getMicrophone(); | |
const SILENCE_NUMBER:Number = 10; | |
const GAIN_NUMBER:Number = 45; | |
var momentum:Number = -10; | |
var falling:Boolean = true; | |
const STAGE_HEIGHT:Number = 280; | |
var lifeArray:Array; | |
var invulTimer:Timer=new Timer(1000); | |
var invulnerable:Boolean=false; | |
var bossClass:Object; | |
public function characterManager(character:MovieClip,par) | |
{ | |
bossClass=par; | |
//this class will control the character | |
//it will recieve the | |
//character | |
playerCharacter = character; | |
character.gotoAndStop(1); | |
//and will control the character's ascent and descent | |
//and will use the hitTest Manager to test for hit tests | |
//TL;DR functionality | |
//-----------// | |
//microphone character control | |
//hitTesting | |
//character animation via gotoAndStops | |
} | |
public function startGame() | |
{ | |
setUpMicrophone(); | |
addEventListener(Event.ENTER_FRAME, characterPropulsion); | |
playerCharacter.gotoAndStop(1); | |
if(bossClass.backUI){lifeArray=[bossClass.backUI.life1,bossClass.backUI.life2,bossClass.backUI.life3];} | |
} | |
public function stopGame() | |
{ | |
stopChar(); | |
bossClass.stopGame(); | |
} | |
public function stopChar() | |
{ | |
removeEventListener(Event.ENTER_FRAME, characterPropulsion); | |
} | |
private function characterPropulsion(e:Event) | |
{ | |
var activity:Number = Math.floor(myMic.activityLevel); | |
if (activity>SILENCE_NUMBER && playerCharacter.y>0) | |
{ | |
playerCharacter.play(); | |
playerCharacter.y -= activity * 2 / 15; | |
falling = false; | |
if(momentum>-7){momentum-=activity/15}; | |
} | |
else | |
{ | |
playerCharacter.gotoAndStop(1); | |
falling = true; | |
characterGravity(); | |
} | |
//trace("Number of hitTests: "+bossClass.landscapeArray.length); | |
for(var i:int=0;i<bossClass.landscapeArray.length;i++) | |
{ | |
var hitScape = bossClass.landscapeArray[i]; | |
//trace("hitTest#:"+i); | |
if(hitTestClass.hitTest(playerCharacter,hitScape,bossClass.bossClass)==true) | |
{ | |
if(lifeArray && lifeArray.length>0) | |
{ | |
if(invulnerable==false) | |
{ | |
lifeArray[lifeArray.length-1].parent.removeChild(lifeArray[lifeArray.length-1]); | |
lifeArray.pop(); | |
invulTimer.addEventListener(TimerEvent.TIMER, finishInvul); | |
invulTimer.start(); | |
invulnerable=true; | |
} | |
if(lifeArray.length==0){stopGame();} | |
} | |
} | |
} | |
} | |
private function finishInvul(e:TimerEvent) | |
{ | |
invulTimer.removeEventListener(TimerEvent.TIMER, finishInvul); | |
invulTimer.stop(); | |
invulnerable=false; | |
} | |
private function characterGravity() | |
{ | |
var activity:Number = Math.floor(myMic.activityLevel / 20); | |
if (playerCharacter.y + playerCharacter.height < STAGE_HEIGHT && playerCharacter.y>0) | |
//character is in bounds of the stage | |
{ | |
playerCharacter.y += (3 + momentum); | |
if(momentum<5)momentum += 1; | |
} | |
else if(playerCharacter.y<0 || playerCharacter.y==0) | |
{ | |
playerCharacter.y+=2; | |
} | |
} | |
private function setUpMicrophone() | |
{ | |
myMic.setLoopBack(true); | |
if (Microphone.isSupported == true) | |
{ | |
myMic.addEventListener(ActivityEvent.ACTIVITY, activityHandler); | |
//myMic.addEventListener(StatusEvent.STATUS, statusHandler); | |
myMic.setLoopBack(true);//setting to false stops mic activity | |
var transform1:SoundTransform = myMic.soundTransform; | |
transform1.volume = 0;//mute mic->speakers volume | |
myMic.soundTransform = transform1; | |
myMic.setSilenceLevel(20); | |
} | |
else | |
{ | |
//trace("microphone not supported!!!"); | |
} | |
} | |
function activityHandler(event:ActivityEvent):void | |
{ | |
//trace("activityHandler: " + event); | |
//debugging | |
} | |
function statusHandler(event:StatusEvent):void | |
{ | |
//trace("statusHandler: " + event); | |
//debugging | |
} | |
//the end is nii | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment