class DodgeEm : AbstractProducer { var menuName = "menu" var escapeI : Input var screenshotI : Input var fragmentMaker : SimpleFragmentMaker = null var sceneTransition = SceneTransition() static var instance : DodgeEm init { instance = this } override fun begin() { super.begin() loadWindowSize() escapeI = findInput( "escape" ) screenshotI = findInput( "screenshot" ) val fragmentCount = 10 fragmentMaker = SimpleFragmentMaker(600,300) fragmentMaker.makeFragments( "player-square", fragmentCount ) fragmentMaker.makeFragments( "player-short", fragmentCount ) fragmentMaker.makeFragments( "player-long", fragmentCount ) fragmentMaker.makeFragments( "player-circle", fragmentCount ) fragmentMaker.makeFragments( "player-triangle", fragmentCount ) } override fun sceneEnding() { sceneTransition.prepareTransition() // Takes a screenshot of the old scene } override fun sceneLoaded() { val actor = sceneTransition.actor if (actor != null) { // The menu slides in from the opposite direction to the other scenes. if ( currentSceneName == "menu" ) { sceneTransition.beginTransition( MoveXBy( actor.position, 1, Game.instance.window.width, Eases.easeIn ) ) } else { sceneTransition.beginTransition( MoveXBy( actor.position, 1, -Game.instance.window.width, Eases.easeIn ) ) } } } override fun end() { super.end() fragmentMaker.removeFragments( "player-square" ) fragmentMaker.removeFragments( "player-short" ) fragmentMaker.removeFragments( "player-long" ) fragmentMaker.removeFragments( "player-circle" ) fragmentMaker.removeFragments( "player-triangle" ) } override fun layout() { super.layout() arrangeViews() } override fun onResize( event : ResizeEvent ) { super.onResize( event ) saveWindowSize() } override fun onKey( event : KeyEvent ) { if (escapeI.matches(event)) { showMenu() } if (screenshotI.matches(event)) { Screenshot.saveWidth(Game.instance.window, "screenshot.png", 800) Screenshot.saveWidth(Game.instance.window, "thumbnail.png", 160) } } fun showMenu() { if (Game.instance.director is Menu) { Game.instance.startScene( "menu" ) } else { startScene( menuName ) } } fun getScenePrefs( sceneName : String ) : AutoFlushPreferences { return Game.instance.producer.preferencesRoot().node( "scenes/" + sceneName ) as AutoFlushPreferences } fun isUnlocked( sceneName : String ) : bool { if ( sceneName.endsWith("01") ) return true return getScenePrefs( sceneName ).getBoolean( "unlocked", false ) } fun unlockScene( sceneName : String ) { getScenePrefs( sceneName ).set( "unlocked", true ) } fun sceneScore( sceneName : String ) = getScenePrefs( sceneName ).getInt( "score", 0 ) fun sceneMedals( sceneName : String ) = getScenePrefs( sceneName ).getInt( "medals", 0 ) fun resetMedals() { Game.instance.producer.preferencesRoot().node( "scenes" ).removeNode() } fun finishedScene( score : int, requiredScore : int ) { val medals = score ~/ requiredScore val prefs = getScenePrefs( currentSceneName ) val oldScore = prefs.getInt( "score", 0 ) if ( score > oldScore ) { prefs.set( "score", score ) } val oldMedals = prefs.getInt( "medals", 0 ) if ( medals > oldMedals ) { prefs.set( "medals", medals ) } } }