Created
October 22, 2011 17:59
-
-
Save debreuil/1306291 to your computer and use it in GitHub Desktop.
state change example
This file contains hidden or 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 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