Skip to content

Instantly share code, notes, and snippets.

@debreuil
Created October 22, 2011 17:59
Show Gist options
  • Select an option

  • Save debreuil/1306291 to your computer and use it in GitHub Desktop.

Select an option

Save debreuil/1306291 to your computer and use it in GitHub Desktop.
state change example
package Managers
{
import Animation.*;
import DDW.Managers.StateManager;
import DDW.Managers.StateObject;
import Screens.*;
import flash.display.Sprite;
public class GameState
{
private static var manager:StateManager;
public static var GAME_BEGIN:String = "GameBegin";
public static var GAME_INTRO:String = "GameIntro";
public static var GAME_EXTRO:String = "GameExtro";
public static var NAV_MAIN:String = "NavMain";
public static var NAV_HOUSE:String = "NavHouse";
public static var NAV_PARK:String = "NavPark";
public static var NAV_CENTER:String = "NavCenter";
public static var HOTDOG:String = "HotdogScreen";
public static var COUGH:String = "CoughScreen";
public static var SCAB:String = "ScabScreen";
public static var LIVINGROOM:String = "LivingRoomScreen";
public static var KITCHEN:String = "KitchenScreen";
public static var BATHROOM:String = "BathroomScreen";
public static var SNEEZE:String = "SneezeScreen";
public static var GYM:String = "GymScreen";
public static var SHARE:String = "ShareScreen";
public static var NAV_MAIN_INTRO:String = "NavMainIntro";
public static var NAV_MAIN_EXTRO:String = "NavMainExtro";
public static var NAV_HOUSE_INTRO:String = "NavHouseIntro";
public static var NAV_HOUSE_EXTRO:String = "NavHouseExtro";
public static var NAV_PARK_INTRO:String = "NavParkIntro";
public static var NAV_PARK_EXTRO:String = "NavParkExtro";
public static var NAV_CENTER_INTRO:String = "NavCenterIntro";
public static var NAV_CENTER_EXTRO:String = "NavCenterExtro";
public static var HOTDOG_INTRO:String = "HotdogIntro";
public static var HOTDOG_EXTRO:String = "HotdogExtro";
public static var COUGH_INTRO:String = "CoughIntro";
public static var COUGH_EXTRO:String = "CoughExtro";
public static var SCAB_INTRO:String = "ScabIntro";
public static var SCAB_EXTRO:String = "ScabExtro";
public static var LIVINGROOM_INTRO:String = "LivingRoomIntro";
public static var LIVINGROOM_EXTRO:String = "LivingRoomExtro";
public static var KITCHEN_INTRO:String = "KitchenIntro";
public static var KITCHEN_EXTRO:String = "KitchenExtro";
public static var BATHROOM_INTRO:String = "BathroomIntro";
public static var BATHROOM_EXTRO:String = "BathroomExtro";
public static var SNEEZE_INTRO:String = "SneezeIntro";
public static var SNEEZE_EXTRO:String = "SneezeExtro";
public static var GYM_INTRO:String = "GymIntro";
public static var GYM_EXTRO:String = "GymExtro";
public static var SHARE_INTRO:String = "ShareIntro";
public static var SHARE_EXTRO:String = "ShareExtro";
public static var CREDITS:String = "Credits";
public static var UNSEEN_INTRO:int = 0;
public static var UNSEEN_GAME:int = 1;
public static var UNSEEN_EXTRO:int = 2;
public static var SECTION_EXIT:int = 3;
public static var GAME_REPEAT:int = 4;
public static var introExtroMap:Object = {};
public static var currentState:String;
public static var currentSubState:String;
public static function initialize(rootObject:Sprite):void
{
manager = new StateManager(rootObject);
createStates();
}
public static function advanceState():void
{
setState(currentState);
}
public static function setState(stateName:String):void
{
currentState = stateName;
if(introExtroMap[currentState] != null)
{
var stIndex:int = introExtroMap[currentState][0];
switch(stIndex)
{
case UNSEEN_INTRO:
introExtroMap[currentState][0] = UNSEEN_GAME;
currentSubState = introExtroMap[currentState][1];
break;
case UNSEEN_GAME:
introExtroMap[currentState][0] = UNSEEN_EXTRO;
currentSubState = introExtroMap[currentState][2];
break;
case UNSEEN_EXTRO:
introExtroMap[currentState][0] = SECTION_EXIT;
currentSubState = introExtroMap[currentState][3];
break;
case SECTION_EXIT:
introExtroMap[currentState][0] = GAME_REPEAT;
currentSubState = introExtroMap[currentState][4];
currentState = currentSubState;
break;
case GAME_REPEAT:
introExtroMap[currentState][0] = SECTION_EXIT;
currentSubState = introExtroMap[currentState][2];
break;
}
if(!hasWon())
{
if(currentSubState == NAV_HOUSE &&
BathroomScreen.hasWon &&
LivingRoomScreen.hasWon &&
KitchenScreen.hasWon)
{
currentSubState = NAV_MAIN;
currentState = currentSubState;
}
else if(currentSubState == NAV_CENTER &&
GymScreen.hasWon &&
SneezeScreen.hasWon &&
ShareScreen.hasWon)
{
currentSubState = NAV_MAIN;
currentState = currentSubState;
}
else if(currentSubState == NAV_PARK &&
ScabScreen.hasWon &&
HotdogScreen.hasWon &&
CoughScreen.hasWon)
{
currentSubState = NAV_MAIN;
currentState = currentSubState;
}
manager.setCurrentState(currentSubState);
}
else if(currentState == GAME_EXTRO)
{
manager.setCurrentState(CREDITS);
}
else if(currentState == CREDITS)
{
// just end
}
else
{
manager.setCurrentState(GAME_EXTRO);
}
}
else if(currentState == CREDITS)
{
// just end
}
else
{
throw new(Error("state must exist when setting state"));
}
}
private static function hasWon():Boolean
{
var result:Boolean = true;
if(introExtroMap[HOTDOG][0] < GAME_REPEAT) result = false;
else if(introExtroMap[COUGH][0] < GAME_REPEAT) result = false;
else if(introExtroMap[SCAB][0] < GAME_REPEAT) result = false;
else if(introExtroMap[LIVINGROOM][0] < GAME_REPEAT) result = false;
else if(introExtroMap[KITCHEN][0] < GAME_REPEAT) result = false;
else if(introExtroMap[BATHROOM][0] < GAME_REPEAT) result = false;
else if(introExtroMap[SNEEZE][0] < GAME_REPEAT) result = false;
else if(introExtroMap[GYM][0] < GAME_REPEAT) result = false;
else if(introExtroMap[SHARE][0] < GAME_REPEAT) result = false;
return result;
}
public static function setPreviousState():void
{
currentState = manager.previousState.stateName;
manager.setCurrentState(manager.previousState.stateName);
}
public static function setMainState():void
{
currentState = NAV_MAIN;
manager.setCurrentState(NAV_MAIN);
}
private static function createStates():void
{
manager.addState(new StateObject(GAME_INTRO, GameIntro));
manager.addState(new StateObject(GAME_BEGIN, GameBeginScreen));
manager.addState(new StateObject(GAME_EXTRO, GameExtro));
manager.addState(new StateObject(CREDITS, Credits));
manager.addState(new StateObject(NAV_MAIN, NavMain));
manager.addState(new StateObject(NAV_HOUSE, NavHouse));
manager.addState(new StateObject(NAV_PARK, NavPark));
manager.addState(new StateObject(NAV_CENTER, NavCenter));
manager.addState(new StateObject(HOTDOG, HotdogScreen));
manager.addState(new StateObject(COUGH, CoughScreen));
manager.addState(new StateObject(SCAB, ScabScreen));
manager.addState(new StateObject(LIVINGROOM, LivingRoomScreen));
manager.addState(new StateObject(KITCHEN, KitchenScreen));
manager.addState(new StateObject(BATHROOM, BathroomScreen));
manager.addState(new StateObject(SNEEZE, SneezeScreen));
manager.addState(new StateObject(GYM, GymScreen));
manager.addState(new StateObject(SHARE, ShareScreen));
manager.addState(new StateObject(NAV_MAIN_INTRO, NavMainIntro));
manager.addState(new StateObject(NAV_MAIN_EXTRO, NavMainExtro));
manager.addState(new StateObject(NAV_HOUSE_INTRO, NavHouseIntro));
manager.addState(new StateObject(NAV_HOUSE_EXTRO, NavHouseExtro));
manager.addState(new StateObject(NAV_PARK_INTRO, NavParkIntro));
manager.addState(new StateObject(NAV_PARK_EXTRO, NavParkExtro));
manager.addState(new StateObject(NAV_CENTER_INTRO, NavCenterIntro));
manager.addState(new StateObject(NAV_CENTER_EXTRO, NavCenterExtro));
manager.addState(new StateObject(HOTDOG_INTRO, HotdogIntro));
manager.addState(new StateObject(HOTDOG_EXTRO, HotdogExtro));
manager.addState(new StateObject(COUGH_INTRO, CoughIntro));
manager.addState(new StateObject(COUGH_EXTRO, CoughExtro));
manager.addState(new StateObject(SCAB_INTRO, ScabIntro));
manager.addState(new StateObject(SCAB_EXTRO, ScabExtro));
manager.addState(new StateObject(LIVINGROOM_INTRO, LivingRoomIntro));
manager.addState(new StateObject(LIVINGROOM_EXTRO, LivingRoomExtro));
manager.addState(new StateObject(KITCHEN_INTRO, KitchenIntro));
manager.addState(new StateObject(KITCHEN_EXTRO, KitchenExtro));
manager.addState(new StateObject(BATHROOM_INTRO, BathroomIntro));
manager.addState(new StateObject(BATHROOM_EXTRO, BathroomExtro));
manager.addState(new StateObject(SNEEZE_INTRO, SneezeIntro));
manager.addState(new StateObject(SNEEZE_EXTRO, SneezeExtro));
manager.addState(new StateObject(GYM_INTRO, GymIntro));
manager.addState(new StateObject(GYM_EXTRO, GymExtro));
manager.addState(new StateObject(SHARE_INTRO, ShareIntro));
manager.addState(new StateObject(SHARE_EXTRO, ShareExtro));
resetStates();
}
public static function resetStates():void
{
// wasPlayed, intro, extro
introExtroMap[GAME_BEGIN] = [UNSEEN_INTRO, GAME_INTRO, GAME_BEGIN, GAME_EXTRO, CREDITS];
introExtroMap[NAV_MAIN] = [UNSEEN_INTRO, NAV_MAIN_INTRO, NAV_MAIN, NAV_MAIN_EXTRO, GAME_BEGIN];
introExtroMap[NAV_HOUSE] = [UNSEEN_INTRO, NAV_HOUSE_INTRO, NAV_HOUSE, NAV_HOUSE_EXTRO, NAV_MAIN];
introExtroMap[NAV_PARK] = [UNSEEN_INTRO, NAV_PARK_INTRO, NAV_PARK, NAV_PARK_EXTRO, NAV_MAIN];
introExtroMap[NAV_CENTER] = [UNSEEN_INTRO, NAV_CENTER_INTRO, NAV_CENTER, NAV_CENTER_EXTRO, NAV_MAIN];
introExtroMap[HOTDOG] = [UNSEEN_INTRO, HOTDOG_INTRO, HOTDOG, HOTDOG_EXTRO, NAV_PARK];
introExtroMap[COUGH] = [UNSEEN_INTRO, COUGH_INTRO, COUGH, COUGH_EXTRO, NAV_PARK];
introExtroMap[SCAB] = [UNSEEN_INTRO, SCAB_INTRO, SCAB, SCAB_EXTRO, NAV_PARK];
introExtroMap[LIVINGROOM] = [UNSEEN_INTRO, LIVINGROOM_INTRO, LIVINGROOM, LIVINGROOM_EXTRO, NAV_HOUSE];
introExtroMap[KITCHEN] = [UNSEEN_INTRO, KITCHEN_INTRO, KITCHEN, KITCHEN_EXTRO, NAV_HOUSE];
introExtroMap[BATHROOM] = [UNSEEN_INTRO, BATHROOM_INTRO, BATHROOM, BATHROOM_EXTRO, NAV_HOUSE];
introExtroMap[SNEEZE] = [UNSEEN_INTRO, SNEEZE_INTRO, SNEEZE, SNEEZE_EXTRO, NAV_CENTER];
introExtroMap[GYM] = [UNSEEN_INTRO, GYM_INTRO, GYM, GYM_EXTRO, NAV_CENTER];
introExtroMap[SHARE] = [UNSEEN_INTRO, SHARE_INTRO, SHARE, SHARE_EXTRO, NAV_CENTER];
}
public static function restartGame():void
{
resetStates();
BathroomScreen.hasWon = false;
LivingRoomScreen.hasWon = false;
KitchenScreen.hasWon = false;
GymScreen.hasWon = false;
SneezeScreen.hasWon = false;
ShareScreen.hasWon = false;
ScabScreen.hasWon = false;
HotdogScreen.hasWon = false;
CoughScreen.hasWon = false;
GameState.setState(GameState.GAME_BEGIN);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment