class MainWindow(QtGui.QMainWindow): def __init__(self, app): self.app = app self.paused = False QtGui.QMainWindow.__init__(self) self.ui = MWClass() self.ui.setupUi(self) self.scene = Scene() view = self.ui.arenaview view.setScene(self.scene) self.scene.view = view view.show() self.start_game() self.singleStep() self.ticktimer = self.startTimer(17) self.editors = [] self._fdir = None # Call resize a bit later or else view will not resize properly self._initialresize = True QtCore.QTimer.singleShot(1, self.resizeEvent) def start_game(self): import game self.game = game.Game() self.game.w.v.scene = self.scene self.game.w.v.app = self.app self.game.w.v.rinfo = self.ui.rinfo self.game.w.v.setrend() self.game.load_robots() self.ui.countdown.display(conf.maxtime) def closeEvent(self, ev=None): self.killTimer(self.ticktimer) if len(self.game.procs) > 0: self.game.finish() stats.dbclose() doquit = True # Try to close any open editor windows for te in self.editors: if te.isVisible(): te.close() # If any are still open, don't quit for te in self.editors: if te.isVisible(): doquit = False if doquit: QtGui.qApp.quit() def startBattle(self): if self.paused: self.pauseBattle(False) def pauseBattle(self, ev): self.paused = ev if self.paused: self.ui.actionPause.setChecked(True) self.ui.actionStart_battle.setDisabled(False) else: self.ui.actionPause.setChecked(False) self.ui.actionStart_battle.setDisabled(True) def singleStep(self): self.pauseBattle(True) self.game.tick() def timerEvent(self, ev): if not self.paused: self.game.tick() if not self.game.rnd%60: self.ui.countdown.display(self.ui.countdown.value()-1) if self.game.rnd > 60 * conf.maxtime: self.closeEvent() if len(self.game.procs) <= 1: self.closeEvent() def test(self): self.scene.r.set_rotation(self.rot) self.scene.r.set_position(self.pos) self.scene.r.set_turr_rot(self.turr_rot) self.rot += 1 x, y = self.pos self.pos = x-2, y+1 self.turr_rot -= 2 def resizeEvent(self, ev=None): if self._initialresize: # Initial scaling comes out wrong for some reason. Fake it. scale = 0.66725 self._initialresize = False else: frect = self.ui.arenaframe.frameRect() sx, sy = frect.width(), frect.height() minsize = min((sx, sy)) scale = 0.85*(minsize/600.) trans = QtGui.QTransform() trans.scale(scale, scale) self.scene.view.setTransform(trans) def notImplementedYet(self): self.niy = NotImplementedYet() self.niy.show() def configure(self): cd = TextEditor(self) self.editors.append(cd) cd.openfile('conf.py') cd.show() def loadRobot(self, efdir=None): if efdir is not None: fdir = efdir elif self._fdir is None: fdir = QtCore.QString(os.path.abspath(conf.robot_dirs[0])) else: fdir = self._fdir fp = QtGui.QFileDialog.getOpenFileName(self, 'Open file', fdir, 'Text files (*.py)') if fp: # Check to see if the file is already open in an editor for ed in self.editors: if ed._filepath == fp: # If it is, raise the window and get out ed.activateWindow() ed.raise_() return te = TextEditor(self) self.editors.append(te) te.openfile(fp) te.show() if efdir is None: # Opening from Main Window. Remember directory. self._fdir = te._fdir def newRobot(self): te = TextEditor(self) self.editors.append(te) te.openfile() # Open the template for a new robot te.show() def newBattle(self): self.com = CombatantsEditor(self) self.com.show() def newTournament(self): self.notImplementedYet() def deleteLayoutItems(self, layout): if layout is not None: while layout.count(): item = layout.takeAt(0) widget = item.widget() if widget is not None: widget.deleteLater() else: self.deleteLayoutItems(item.layout()) def restart(self): rinfo = self.ui.rinfo for name, robot in self.game.w.robots.items(): robot.v.kill() self.game.finish() import world world.Robot.nrobots = 0 Robot.nrobots = 0 self.scene.removeItem(self.scene.arenarect) self.deleteLayoutItems(rinfo) self.scene.add_arenarect() self.start_game() paused = self.paused self.singleStep() self.pauseBattle(paused) def help(self): QtGui.QDesktopServices().openUrl(QtCore.QUrl(conf.help_url)) def about(self): AboutDialog().exec_()
class MainWindow(QtGui.QMainWindow): def __init__(self, app): self.app = app self.paused = False QtGui.QMainWindow.__init__(self) self.ui = MWClass() self.ui.setupUi(self) self.scene = Scene() view = self.ui.arenaview view.setScene(self.scene) self.scene.view = view view.show() self.start_game() self.singleStep() self.ticktimer = self.startTimer(17) self.editors = [] self._fdir = None # Call resize a bit later or else view will not resize properly self._initialresize = True QtCore.QTimer.singleShot(1, self.resizeEvent) def start_game(self): import game self.game = game.Game() self.game.w.v.scene = self.scene self.game.w.v.app = self.app self.game.w.v.rinfo = self.ui.rinfo self.game.w.v.setrend() self.game.load_robots() self.ui.countdown.display(conf.maxtime) def closeEvent(self, ev=None): self.killTimer(self.ticktimer) if len(self.game.procs) > 0: self.game.finish() stats.dbclose() doquit = True # Try to close any open editor windows for te in self.editors: if te.isVisible(): te.close() # If any are still open, don't quit for te in self.editors: if te.isVisible(): doquit = False if doquit: QtGui.qApp.quit() def startBattle(self): if self.paused: self.pauseBattle(False) def pauseBattle(self, ev): self.paused = ev if self.paused: self.ui.actionPause.setChecked(True) self.ui.actionStart_battle.setDisabled(False) else: self.ui.actionPause.setChecked(False) self.ui.actionStart_battle.setDisabled(True) def singleStep(self): self.pauseBattle(True) self.game.tick() def timerEvent(self, ev): if not self.paused: self.game.tick() if not self.game.rnd % 60: self.ui.countdown.display(self.ui.countdown.value() - 1) if self.game.rnd > 60 * conf.maxtime: self.closeEvent() if len(self.game.procs) <= 1: self.closeEvent() def test(self): self.scene.r.set_rotation(self.rot) self.scene.r.set_position(self.pos) self.scene.r.set_turr_rot(self.turr_rot) self.rot += 1 x, y = self.pos self.pos = x - 2, y + 1 self.turr_rot -= 2 def resizeEvent(self, ev=None): if self._initialresize: # Initial scaling comes out wrong for some reason. Fake it. scale = 0.66725 self._initialresize = False else: frect = self.ui.arenaframe.frameRect() sx, sy = frect.width(), frect.height() minsize = min((sx, sy)) scale = 0.85 * (minsize / 600.) trans = QtGui.QTransform() trans.scale(scale, scale) self.scene.view.setTransform(trans) def notImplementedYet(self): self.niy = NotImplementedYet() self.niy.show() def configure(self): cd = TextEditor(self) self.editors.append(cd) cd.openfile('conf.py') cd.show() def loadRobot(self, efdir=None): if efdir is not None: fdir = efdir elif self._fdir is None: fdir = QtCore.QString(os.path.abspath(conf.robot_dirs[0])) else: fdir = self._fdir fp = QtGui.QFileDialog.getOpenFileName(self, 'Open file', fdir, 'Text files (*.py)') if fp: # Check to see if the file is already open in an editor for ed in self.editors: if ed._filepath == fp: # If it is, raise the window and get out ed.activateWindow() ed.raise_() return te = TextEditor(self) self.editors.append(te) te.openfile(fp) te.show() if efdir is None: # Opening from Main Window. Remember directory. self._fdir = te._fdir def newRobot(self): te = TextEditor(self) self.editors.append(te) te.openfile() # Open the template for a new robot te.show() def newBattle(self): self.com = CombatantsEditor(self) self.com.show() def newTournament(self): self.notImplementedYet() def deleteLayoutItems(self, layout): if layout is not None: while layout.count(): item = layout.takeAt(0) widget = item.widget() if widget is not None: widget.deleteLater() else: self.deleteLayoutItems(item.layout()) def restart(self): rinfo = self.ui.rinfo for name, robot in self.game.w.robots.items(): robot.v.kill() self.game.finish() import world world.Robot.nrobots = 0 Robot.nrobots = 0 self.scene.removeItem(self.scene.arenarect) self.deleteLayoutItems(rinfo) self.scene.add_arenarect() self.start_game() paused = self.paused self.singleStep() self.pauseBattle(paused) def help(self): QtGui.QDesktopServices().openUrl(QtCore.QUrl(conf.help_url)) def about(self): AboutDialog().exec_()
def newBattle(self): self.com = CombatantsEditor(self) self.com.show()