Skip to content

Instantly share code, notes, and snippets.

@thomasjmwb
Created April 19, 2012 10:48
Show Gist options
  • Save thomasjmwb/2420212 to your computer and use it in GitHub Desktop.
Save thomasjmwb/2420212 to your computer and use it in GitHub Desktop.
Character controller class for microphone based game
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