Пример #1
0
 def enterGaming(self):
    self.proxy=ServerProxy()
    self.proxy.send_config(self.game_conf)
    self.screen.open_gaming()
    del self.game_conf
    update_list.append(self.update_gaming)
    #meant for synchro with server.
    #not intensely used until now, but would when server is ran in its own thread,
    #or when it is separated for real networked gaming.
    self.frame_no=GEntity.frame_no=0
Пример #2
0
class GameClient(FSM.FSM):
   def __init__(self):
      FSM.FSM.__init__(self, 'GameClient.fsm')
      self.defaultTransitions = {
         'Game_setup':['Main_menu', 'Gaming'],
         'Gaming':['Stats', 'Pause', 'Quit'],
         'Init':['Intro'],
         'Intro':['Main_menu'],
         'Main_menu':['Options', 'Game_setup', 'Quit', 'Load_game'],
         'Options':['Main_menu', 'Gaming'],
         'Pause':['Main_menu', 'Quit', 'Options', 'Gaming'],
         'Quit':[],
         'Stats':['Game_setup'],
         }
      #any method in this global list gets called once a frame
      __builtin__.update_list=[]
      #any object in this global list gets its dispose method called by current frame's end
      __builtin__.dispose_list=[]
      self.is_running=True
      self.screen=None
      self.fake_keypresses=[]#['q','a']#,'mouse1','mouse1-up','space']

   def enterGame_setup(self):
      self.screen.open_game_setup()
      self.acceptOnce(self.screen.frame.sgn_start, self.demand, extraArgs=['Gaming'])
      if ConfigVariableBool('dev-mode').getValue():
         messenger.send(self.screen.frame.sgn_start)

   def exitGame_setup(self):
      #TODO grab setup options here
      self.game_conf=self.screen.frame.config
      self.screen.close()

   def enterGaming(self):
      self.proxy=ServerProxy()
      self.proxy.send_config(self.game_conf)
      self.screen.open_gaming()
      del self.game_conf
      update_list.append(self.update_gaming)
      #meant for synchro with server.
      #not intensely used until now, but would when server is ran in its own thread,
      #or when it is separated for real networked gaming.
      self.frame_no=GEntity.frame_no=0

   def exitGaming(self):
      self.screen.close()
      update_list.remove(self.update_gaming)

   def enterInit(self):
      '''
      init of main/global structures
      '''
      self.screen = Screen()
      if ConfigVariableBool('stats').getValue():
         self.update_gaming=pstat(self.update_gaming)
         PStatClient.connect()         
      taskMgr.add(self.update, 'GameClient.update')
      self.acceptOnce('escape',self.demand,extraArgs=['Quit'])
      self.demand('Intro')

   def exitInit(self):pass

   def enterIntro(self):
      '''
      game introduction. video/screens.
      '''
      #skip to main menu with enter
      self.acceptOnce(ConfigVariableString('key-confirm').getValue(), self.demand,extraArgs=['Main_menu'])
      #go to main menu when screen is done
      self.acceptOnce(Screen.sgn_intro_done, self.demand,extraArgs=['Main_menu'])
      #show splash intro
      self.screen.open_intro()
      if ConfigVariableBool('dev-mode').getValue():
         self.demand('Main_menu')

   def exitIntro(self):
      self.screen.close_intro()
      self.ignore(ConfigVariableString('key-confirm').getValue())
      self.ignore(Screen.sgn_intro_done)

   def enterMain_menu(self):
      '''
      menu offers 4 choices:
      -play game
      -load game
      -options
      -quit
      '''
      self.screen.open_main_menu()
      self.acceptOnce(self.screen.frame.sgn_play, self.demand,extraArgs=['Game_setup'])
      if ConfigVariableBool('dev-mode').getValue():
         self.demand('Game_setup')

   def exitMain_menu(self):
      self.screen.close()

   def enterOptions(self):pass
   def exitOptions(self):pass
   def enterPause(self):pass
   def exitPause(self):pass

   def enterQuit(self):
      '''
      last cleanup before closing the window.
      '''
      #TODO clean close
      self.screen.close()
      del self.screen
      self.is_running = False

   def exitQuit(self):pass

   def update_gaming(self):
#      out('client update',frame_no=self.frame_no)
      void=True      
      self.frame_no+=1
      GEntity.frame_no=self.frame_no
      #process data from server (server's update included)
      for d in self.proxy.new_data:
         void=False
         #some of them are to be processed here
         if network.stc_start_game in d:
            out('network.stc_start_game')
            self.screen.frame.start_game()
         elif network.stc_end_game in d:
            out('network.stc_end_game')
            self.demand('Stats')
         #if etc
         #the rest is given to the gframe, responsible for the graphic stuff
         else:
            self.screen.frame.process_server_input(d)
      if void:
         if len(self.fake_keypresses):
            messenger.send(self.fake_keypresses[0])
            self.fake_keypresses.pop(0)
      for o in __builtin__.dispose_list:o.dispose()
      __builtin__.dispose_list=[]

   def update(self, task):
      '''
      main update method. runs the whole time.
      other updates can register to update_list to get called every frame.
      '''
      [f() for f in update_list]
      return task.again