def stopCGZGame(self): "Call this to stop a CGZ marker game, it automatically checks for win conditiions" gameNum = self.gameData.data['CGZGameNum'] #check for End Game finishTime = 0.0 if self.gameData.data['numMarkers'] == self.gameData.data[ 'numCapturedMarkers'] and self.gameData.data['numMarkers'] > 0: PtDebugPrint( "DEBUG: xMarkerGameManager.stopCGZGame():\tGame Completed! ---Checking for new best score---" ) endTime = PtGetDniTime() startTime, bestTime = grtzMarkerGames.GetGameTime( grtzMarkerGames.GetCGZGameName(gameNum)) finishTime = endTime - startTime #Update Score Display PtDebugPrint( "DEBUG: xMarkerGameManager.stopCGZGame(): Attempting to Register score: %s for game: %s" % (finishTime, gameNum)) grtzMarkerGames.UpdateScore(self.gameData.data['CGZGameNum'], 0, finishTime) #Delete Game from the server try: PtDebugPrint( "DEBUG: xMarkerGameManager.stopCGZGame():\t----Dispatching stop CGZ Marker Game----" ) server = GetGameClient(self.gameData.data['svrGameClientID']) server.deleteGame() except: #if we could not process previous statements, we had better clean up a little! self.gameData.initDefaultValues() self.gameData.save()
def OnGUINotify(self, id, control, event): "Events from all the dialogs in the MarkerGameGUI Age..." if id != MarkerGameDlg.id: return #~PtDebugPrint("grtzMarkerScopeGUI::OnGUINotify id=%d, event=%d control=" % (id,event),control)#,level=kDebugDumpLevel ) if event == kDialogLoaded: PtDebugPrint( "DEBUG: grtzMarkerScopeGUI():\tMarker Scope GUU--->Dialog Loaded!" ) # hide stuff until needed MGAnim.animation.skipToTime(1.5) elif event == kShowHide: if control.isEnabled(): PtDebugPrint( "DEBUG: grtzMarkerScopeGUI():\tMarker Scope-GUI--->Show Dialog" ) # make sure the player has enough level to see the GUI gameType = grtzMarkerGames.GetCurrentGameType() if PtDetermineKIMarkerLevel() < kKIMarkerNormalLevel: PtDebugPrint( "DEBUG: grtzMarkerScopeGUI.OnGUINotify():\tKI Level not high enough, disabling GUI controls" ) gameSelector = ptGUIControlRadioGroup( MarkerGameDlg.dialog.getControlFromTag( kRGMarkerGameSelect)) gameSelector.setValue(-1) gameSelector.disable() self.updateLevel = kNoRefresh elif gameType > -1 and gameType != PtMarkerGameTypes.kMarkerGameCGZ: PtDebugPrint( "DEBUG: grtzMarkerScopeGUI.OnGUINotify():\tUser Created Marker Game in Progress, disabling GUI controls" ) gameSelector = ptGUIControlRadioGroup( MarkerGameDlg.dialog.getControlFromTag( kRGMarkerGameSelect)) gameSelector.setValue(-1) gameSelector.disable() self.updateLevel = kNoRefresh msg = "Please quit existing User-Created Marker Game, to play a CGZ Game." PtSendKIMessage(kKILocalChatStatusMsg, msg) self.IRefreshGamesDisplay() MGMachineOnResp.run(self.key, netPropagate=0) else: #We're loading the GUI # Get gameData (if Any) gameNum, numCaptured, numMarkers = grtzMarkerGames.GetGameProgress( ) PtDebugPrint( "DEBUG: grtzMarkerScopeGUI.OnGUINotify():\tInitializing GUI, current gameNum = %s" % gameNum) #Set refresh level to not update, later we'll change it if necessary... self.updateLevel = kNoRefresh self.lastGame = -1 self.lastGameScore = -1 if gameNum > -1 and numCaptured > -1 and numMarkers > -1: if numCaptured == numMarkers: #We've got a completed game!!! #Stop the game.... PtSendKIMessage(kMGStopCGZGame, 0) #Save the game information self.lastGame = gameNum self.lastGameScore = grtzMarkerGames.GetGameScore( gameNum) #Now set the selector to unselected... gameNum = -1 #Setup the timer to refresh the display self.updateLevel = kPartialRefresh # Set selector to the game being played (if Any) gameSelector = ptGUIControlRadioGroup( MarkerGameDlg.dialog.getControlFromTag( kRGMarkerGameSelect)) gameSelector.enable() oldGame = gameSelector.getValue() if gameNum != oldGame: gameSelector.setValue(gameNum) self.init = 0 else: #We've already initialized properly, no need to do it again! self.init = 1 if gameNum > -1: # start/continue the counting self.updateLevel = kPartialRefresh #Refresh Display self.IRefreshGamesDisplay() MGMachineOnResp.run(self.key, netPropagate=0) if self.updateLevel > kNoRefresh: PtAtTimeCallback(self.key, 1, kDisplayTimer) else: PtDebugPrint( "DEBUG: grtzMarkerScopeGUI():\tMarker Scope-GUI--->Hide dialog" ) #Hide scope... MGAnim.animation.skipToTime(1.5) self.lastGame = -1 self.lastGameScore = -1 #Stop the timer callbacks... self.updateLevel = kNoRefresh #Get the game selected gameSelector = ptGUIControlRadioGroup( MarkerGameDlg.dialog.getControlFromTag( kRGMarkerGameSelect)) reqGameNum = gameSelector.getValue() curGameNum = grtzMarkerGames.GetCurrentCGZGame() #Start the game if necessary if self.selectorChanged: #Exit if somehow we really don't have a valid game! if reqGameNum < 0 or reqGameNum > len(grtzMarkerGames.mgs): PtDebugPrint( "ERROR: grtzMarkerScopeGUI.OnGUINotify:\tCannot start invalid game number: %d" % reqGameNum) return #Finally, start the new game! PtDebugPrint( "DEBUG: grtzMarkerScopeGUI.OnGUINotify():\tReceived GUI notification to start game: %s" % reqGameNum) PtSendKIMessageInt(kMGStartCGZGame, reqGameNum) #Reset selector sensor self.selectorChanged = 0 elif event == kValueChanged: rgid = control.getTagID() if rgid == kRGMarkerGameSelect: #The first time we update the selector, we don't want to register a new game selected!!! #All played games are initialized upon age load, not upon marker scope GUI load.... if self.init == 0: PtDebugPrint( "DEBUG: grtzMarkerScopeGUI.OnGUINotify():\tFinished initialization.... (ignoring selector change)" ) self.init = 1 #Make sure we don't try to re-init! return self.selectorChanged = 1 #let us know if the selector changed for (so we can start/stop a game if necessary) gameNum = control.getValue() PtDebugPrint( "DEBUG: grtzMarkerScopeGUI.OnGUINotify():\tReceived CGZ Game Selector change: %s" % gameNum) #If we were playing an existing game, we need to quit it!!! curGame = grtzMarkerGames.GetCurrentCGZGame() if curGame != None and curGame > -1: PtDebugPrint( "DEBUG: grtzMarkerScopeGUI.OnGUINotify():\tSelector value changed, stopping current game!" ) PtSendKIMessage(kMGStopCGZGame, 0) self.updateLevel = kOneTimeFullRefresh #Reset the score if we've seleced a game prevRefresh = self.updateLevel if gameNum > -1 and gameNum < len(grtzMarkerGames.mgs): grtzMarkerGames.UpdateScore(gameNum, PtGetDniTime(), 0.0) self.updateLevel = kPartialRefresh else: #just need to refresh the entire display to ensure we've stopped any timer displays self.updateLevel = kOneTimeFullRefresh pass #Force one update... self.IRefreshGamesDisplay() #Update display... only if we didn't have plans to update... if prevRefresh == kNoRefresh: PtAtTimeCallback(self.key, 0, kDisplayTimer)