class EngineState(): def __init__(self, engine): """ The game determines what is happening on screen based on what state the GameEngine instance has. """ # the game engine that owns this state self.engine = engine # TRYING TO DEPRECATE self.screen = Screen() self.res = self.engine.setsMgr.screenRes res = self.res # get/load the font self.font = FontManager().loadFont( 'JohnDoe' ) self.str_paused = UIText( "Paused", [res[0]*0.5, res[1]*0.5] , self.font, 35 ) self.str_paused.setVisible(False) gameWorld = self.engine.gameWorld #gameWorld.setPlayerType( 'Cop' ) gameWorld.setPlayerType( 'Robber' ) #gameWorld.getPlayer().setName( "Alfonso" ) # This is an optimization... # If using the Cop player type, use the smaller tiles if gameWorld.getPlayer().getType() == "Cop": gameWorld.setLevelByName( 'Level1XS' ) else: gameWorld.setLevelByName( 'Level1L' ) glutTimerFunc(50, self.engine.on_update, 50) def renderFrame(self): """ RenderFrame - Base Class """ if not self.screen: self.screen = Screen() self.screen.drawThis( self.str_paused ) return self def on_key_press(self, key, x, y): """ On key press """ if key == '\x1b': return None # for now, this means to "spawn a server" if key == 'x': if system() == "Linux" or system() == "Macintosh": Popen( [r'/usr/bin/python/python' ,os.path.join( self.engine.setsMgr.home_dir , 'StartServer.py' )] ) elif system() == "Windows": Popen([r'C:\Python25\python.exe' ,os.path.join( self.engine.setsMgr.home_dir , 'StartServer.py' )]) else: print "you are on an unsupported platform for spawning a server" # declare that this game instance is the server owner self.engine.serverOwner = True # for now, its "connect" elif key == 'c': self.engine.connect() elif key == 'v': self.engine.disconnect() elif key == 'g': self.str_paused.toggleVisible() self.engine.gameWorld.pause() return self def on_key_release(self, key, x, y): """ On key release """ return self def on_specialkey_press(self, key, x, y): """ On special key press """ return self def on_specialkey_release(self, key, x, y): """ On special key release """ return self def on_mouse_motion(self, x, y): """ On mouse motion """ self.engine.gameWorld.startGame() return self def on_mouse(self, button, state, x, y): """ On mouse """ return self def on_socket(self, packet): """ On socket """ self.gameTime = packet['time'] return self def update(self, elapsed): """ switches the state based on """ return self
class GameState(EngineState): def __init__(self, engine): """ The game determines what is happening on screen based on what state the GameEngine instance has. """ self.engine = engine self.res = self.engine.setsMgr.screenRes self.screen = None # get/load the font self.font = FontManager().loadFont( 'Basic' ) self.str_paused = UIText( "Paused", [self.res[0]*0.5, self.res[1]*0.5], self.font, 0.05 ) self.str_paused.setVisible(False) engine.gameWorld.setLevelByName( 'Level1L' ) engine.gameWorld.gameTime = 0.0 engine.gameWorld.startGame() #glutTimerFunc(300, self.print_game_world, 300) def print_game_world(self, elapsed): gW = self.engine.gameWorld tileSize = gW.level.getTileSize() peerPos = gW.peers.values()[0].pos print '' print '--- Gameworld ---' print 'Player = {', gW.player.playerName, ":", gW.player.pos, "}" print 'mapPixelPos = ', gW.player.pos[0] + gW.scrScroll[0]\ , gW.player.pos[1] + gW.scrScroll[1] print 'mapTilePos = ', gW.player.pos[0] / tileSize[0],\ gW.player.pos[1] / tileSize[1] print 'renderPos = ', gW.player.pos[0] - gW.scrScroll[0]\ , gW.player.pos[1] - gW.scrScroll[1] print ' ------ ------ ' print 'Peers = {', gW.peers.values()[0].playerName, ":", peerPos, "}" print 'mapTilePos = ', peerPos[0] / tileSize[0],\ peerPos[1] / tileSize[1] print 'renderPos = ', peerPos[0] - gW.scrScroll[0]\ , peerPos[1] - gW.scrScroll[1] print ' ------ ------ ' print 'TileSize = ', tileSize print '' glutTimerFunc(300, self.print_game_world, 300) def renderFrame(self): """ RenderFrame - Base Class """ if not self.screen: self.screen = Screen() scrSize = self.screen.getSize() #self.engine.gameWorld.positionPlayer( [scrSize[0],scrSize[1]] ) self.screen.drawThis( self.str_paused ) return self def on_key_press(self, key, x, y): """ On key press """ if key == chr(27): # Escape return ChoosePlayerState(self.engine) elif key == 'g': self.str_paused.toggleVisible() self.engine.gameWorld.pause() # controller self.engine.gameWorld.on_key_press(key, x, y) return self def on_key_release(self, key, x, y): """On key release""" # controller self.engine.gameWorld.on_key_release(key, x, y) return self def on_specialkey_press(self, key, x, y): """On special key press""" # controller self.engine.gameWorld.on_specialkey_press(key, x, y) return self def on_specialkey_release(self, key, x, y): """On special key release""" # controller self.engine.gameWorld.on_specialkey_release(key, x, y) return self def on_mouse_motion(self, x, y): """On mouse motion""" # controller self.engine.gameWorld.on_mouse_motion(x, y) return self def on_mouse(self, button, state, x, y): """On mouse press/release""" # controller self.engine.gameWorld.on_mouse(button, state, x, y) return self def update(self, elapsed): """ switches the state based on """ if self.engine.gameWorld.gameStatus == "winner": # Send a signal to the server that this player # seems to have won the game ( the server will # have to agree with our word ) # Go to the appropriate engine-state screen #self.engine.gameWorld = GameWorld() print 'switching to winner state' return WinnerState(self.engine) elif self.engine.gameWorld.gameStatus == "loser": # Go to the appropriate engine-state screen #self.engine.gameWorld = GameWorld() return LoserState(self.engine) else: return self