class Game(GameBase, FSM): def __init__(self): GameBase.__init__(self, debug=False) FSM.__init__(self, "GUI FSM") base.disableMouse() self.menu = Menu() self.missionScreen = MissionScreen() self.debrief = Debrief() self.hud = Hud() self.missionSelect = MissionSelect() base.camLens.setFov(90) self.setMusic("audio/music.mp3", volume=0.5) self.setMusic("audio/engine1.wav", volume=0.3) self.request("Menu") base.taskMgr.add(self.missionOverTask, "is mission over") def enterMenu(self): self.menu.show() self.accept("menu-start", self.request, ["MissionSelect"]) self.accept("menu-instructions", self.request, ["Instructions"]) self.accept("menu-quit", sys.exit) def exitMenu(self): self.menu.hide() self.ignore("menu-start") self.ignore("menu-instructions") self.ignore("menu-quit") def enterMissionSelect(self): self.missionSelect.show() self.accept("missionselect-m1", self.setMission, ["m1"]) self.accept("missionselect-m2", self.setMission, ["m2"]) self.accept("missionselect-test", self.setMission, ["test"]) def exitMissionSelect(self): self.missionSelect.hide() self.ignore("missionselect-m1") self.ignore("missionselect-m2") def enterMissionScreen(self): self.missionScreen.showWithTitle(self.currentMission.objective) self.accept("mission-start", self.request, ["Game"]) def exitMissionScreen(self): self.missionScreen.hide() self.ignore("mission-start") def enterGame(self): self.world = World(self.currentMission.mapName) self.startTime = "Not yet set - not loaded" #set in self.missionOverTask self.player = Player(self.world) self.accept("player-into-Collision", self.player.reset) self.accept("game-quit", self.request, ["Menu"]) def exitGame(self): self.world.destroy() self.player.model.removeNode() del self.player base.taskMgr.remove("hud update") self.hud.timer.setText("") self.hud.hide() base.taskMgr.remove("update player") self.ignore("game-quit") def enterDebrief(self): self.debrief.show() self.debrief.setTitle(self.currentMission.question, isAnswer=False) self.debrief.setButtons(self.currentMission.options) self.accept("debrief-correct", self.debrief.setTitle, ["Correct"]) self.accept("debrief-wrong", self.debrief.setTitle, ["Wrong"]) self.accept("debrief-back", self.request, ["Menu"]) self.accept("debrief-restart", self.request, ["Game"]) def exitDebrief(self): self.debrief.hide() self.ignore("debrief-correct") self.ignore("debrief-wrong") self.debrief.initialise( ) #clear all settings on it, ie title and buttons, as they are mission specific def setMission(self, name): self.currentMission = missions[name] self.request("MissionScreen") def missionOverTask(self, task): if self.state == "Game" and self.world.loaded and self.startTime == "Not yet set - not loaded": self.startTime = time.time() self.hud.show() self.hud.initialise(self.currentMission.objective, self.currentMission.timeAllowed) base.taskMgr.add(self.hud.hudTask, "hud update") if self.state == "Game" and self.world.loaded: if time.time() - self.startTime > self.currentMission.timeAllowed: self.request("Debrief") return task.cont