class ControlHandler(): fsmState = True def __init__(self, update, bulletDebugNode, camera, windowProps, player, timerTask, bulletWorld, collisions, music): #args self.update = update self.debugNP = bulletDebugNode self.camera = camera self.music = music #self.cameraTask = camera.thisTask - ill need some camera shit later prolly self.wp = windowProps self.player = player #self.level = level self.timerTask = timerTask self.world = bulletWorld self.collisions = collisions self.filters = Filters() self.frustumIsEnabled = False self.parseControlFile() self.createControls() self.singleSM(self.pauseGame, self.resumeGame) base.messenger.send("1") def parseControlFile(self): self.f = open("./controls/ControlsFileConfig.txt") self.lines = self.f.readlines() self.f.close() #validLetters = "abcdefghijklmnopqrstuvwxyz" #for x in range(len(self.lines)): # for char in self.lines[x]: # for char in validLetters: # self.lines[x] += char #gotta figure out how aND WHY THE NEWLINES ARENT GOIGN AWAY! print(self.lines) for x in range(len(self.lines)): if self.lines[x].strip() == "forward": self.forward = str(self.lines[x + 1].rstrip("\n")) if self.lines[x].strip() == "reverse": self.reverse = str(self.lines[x + 1].rstrip("\n")) if self.lines[x].strip() == "left": self.left = str(self.lines[x + 1].rstrip("\n")) if self.lines[x].strip() == "right": self.right = str(self.lines[x + 1].rstrip("\n")) def singleSM(self, onFunction, offFunction): '''"Single State Machine" Takes two methods as args, runs onFunction when self.fsmState = False(Default state), runs offFunction when self.fsmState = True''' if self.fsmState: self.fsmState = False offFunction() else: self.fsmState = True onFunction() def escMenu(self): '''Runs functions when escape is pressed''' self.singleSM(self.pauseGame, self.resumeGame) def pauseGame(self): '''Pauses the game by removing any taskmgr''' self.wp.setCursorHidden(False) base.win.requestProperties(self.wp) mat = Mat4(camera.getMat()) mat.invertInPlace() base.mouseInterfaceNode.setMat(mat) base.enableMouse() self.menu = Menu(self.escMenu, self.wp, self.collisions) taskMgr.remove('update') taskMgr.remove('timerTask') self.menu.loadPauseMenu() def resumeGame(self): self.wp.setCursorHidden(True) base.win.requestProperties(self.wp) try: self.menu.destroyAllMenus("meh") except AttributeError: print("Nothing to destroy!") taskMgr.add(self.update, 'update') taskMgr.add(self.timerTask, 'timerTask') base.disableMouse() def debugBullet(self): if self.debugNP.isHidden(): self.debugNP.show() else: self.debugNP.hide() def createControls(self): #Sets up the controls inputState.watchWithModifiers('up', self.forward) inputState.watchWithModifiers('left', self.left) inputState.watchWithModifiers('down', self.reverse) inputState.watchWithModifiers('right', self.right) inputState.watchWithModifiers('up-up', self.forward + '-up') inputState.watchWithModifiers('left-up', self.left + '-up') inputState.watchWithModifiers('down-up', self.reverse + '-up') inputState.watchWithModifiers('right-up', self.right + '-up') base.accept("escape", self.escMenu) base.accept("f1", self.debugBullet) base.accept("space", self.player.jump) base.accept("mouse1", self.player.newShoot) base.accept("1", self.filters.enableFilters, extraArgs = [self.player.np])