class PyHC(Ui_MainWindow): ''' Example class for using SpiralWidget''' def __init__(self, ui, MainWindow): self.mousePosition = [0, 0] self.MainWindow = MainWindow self.ui = ui ui.glFrame.setTitle( " " ) self.board = GameBoard(MainWindow, ui) ui.vLayout.addWidget(self.board) ui.gameLog.keyPressEvent = self.test MainWindow.keyPressEvent = self.test self.board.wheelEvent = self.zoomMap self.board.mouseMoveEvent = self.moveMap self.board.mouseDoubleClickEvent = self.doubleClickMap self.board.mousePressEvent = self.clickMap self.board.mouseReleaseEvent = self.stopMoving self.lastX = False self.lastY = False ui.cmdHeal.mousePressEvent = self.healClix ui.cmdDamage.mousePressEvent = self.damageClix ui.cmdTokenRed.mousePressEvent = self.tokenRed ui.cmdTokenBlue.mousePressEvent = self.tokenBlue ui.rollOne.mousePressEvent = self.rollOne ui.rollTwo.mousePressEvent = self.rollTwo ui.cmdBarrier.mousePressEvent = self.barrier ui.cmdSmokeCloud.mousePressEvent = self.smokeCloud ui.cmdDebris.mousePressEvent = self.debris ui.cmdSpecial.mousePressEvent = self.special ui.cmdLOF.mousePressEvent = self.changeLOF ui.cmdObj.mousePressEvent = self.changeObjectMode self.myActiveClix = False self.theirActiveClix = False self.activeObject = False ui.myDial.setMouseTracking(True) ui.myDial.mouseMoveEvent = self.hoverMyDial def getMyActiveClix(self): c = self.myActiveClix if c: x, y = c f = self.board.boardFigures[x][y] if f: return f return False def changeLOF(self, event): if not self.ui.cmdLOF.isChecked(): self.board.modeLOF = True self.clearOtherToggles( self.ui.cmdLOF ) else: self.board.modeLOF = False self.ui.glFrame.setTitle( " " ) self.board.moving = False self.board.updateGL() return QtGui.QPushButton.mousePressEvent(self.ui.cmdLOF, event) def changeObjectMode(self, event): if not self.ui.cmdObj.isChecked(): self.board.modeObject = True self.clearOtherToggles( self.ui.cmdObj ) else: self.board.modeObject = False self.ui.glFrame.setTitle( " " ) self.board.moving = False self.board.updateGL() return QtGui.QPushButton.mousePressEvent(self.ui.cmdObj, event) def rollOne(self, event): v = random.randint( 1, 6 ) self.board.log( "Me", "Rolled a "+str(v)+" on one die.") return QtGui.QPushButton.mousePressEvent(self.ui.rollOne, event) def rollTwo(self, event): v = random.randint( 2, 12 ) s = "Rolled a "+str(v)+" on two dice." if v == 2: s += " <b>Crit miss!</b>" elif v == 12: s += " <b>Critical hit!</b>" self.board.log( "Me", s ) return QtGui.QPushButton.mousePressEvent(self.ui.rollTwo, event) def healClix(self, event): f = self.getMyActiveClix() if f: f.heal() self.redrawMyDial() return QtGui.QPushButton.mousePressEvent(self.ui.cmdHeal, event) def damageClix(self, event): f = self.getMyActiveClix() if f: f.damage() self.redrawMyDial() return QtGui.QPushButton.mousePressEvent(self.ui.cmdDamage, event) def tokenRed(self, event): f = self.getMyActiveClix() if f: f.token( "red" ) self.board.updateGL() return QtGui.QPushButton.mousePressEvent(self.ui.cmdTokenRed, event) def tokenBlue(self, event): f = self.getMyActiveClix() if f: f.token( "blue" ) self.board.updateGL() return QtGui.QPushButton.mousePressEvent(self.ui.cmdTokenBlue, event) def getBoardXY(self, event): v = self.board.viewport() winY = v[3] - event.y() winX = event.x() winZ = self.board.getMouseZ(winX, winY) posX, posY, posZ = gluUnProject(winX, winY, winZ) x = int(math.ceil(posX)+11) y = int(math.ceil(posZ)+11) return [x, y] def hoverMyDial(self, event): if self.myActiveClix: f = self.board.boardFigures[self.myActiveClix[0]][self.myActiveClix[1]] if f: t = f.getToolTip(event.pos()) if t: QtGui.QToolTip.showText( event.globalPos(), "<p>"+t+"</p>", self.ui.myDial ) else: QtGui.QToolTip.hideText() def clickMap(self, event): x, y = self.getBoardXY(event) if ( x >= 0 and x <= 23 and y >= 0 and y <= 23 ): if event.button() == QtCore.Qt.RightButton and self.board.boardObjects[x][y]: #Picking up an object o = self.board.boardObjects[x][y] f = False if self.myActiveClix: f = self.board.boardFigures[self.myActiveClix[0]][self.myActiveClix[1]] if o and o.canBePickedUp() and f: b = f.takeObject(o) if b: self.board.updateGL() elif isinstance(o, ObjectSimpleSquare): if o.type == "barrier": o.type = "debris" if f: self.board.log( "Me", f.getName() + " destroys a square of blocking terrain." ) else: self.board.log( "Me", "Destroyed a square of blocking terrain.") else: self.board.boardObjects[x][y] = False self.board.log( "Me", "Removed a square of "+o.type+" terrain.") self.board.updateGL() elif event.button() == QtCore.Qt.RightButton and self.board.boardFigures[x][y] and self.board.boardFigures[x][y].hasObject() and self.board.boardFigures[x][y].mine: #Dropping an object f = self.board.boardFigures[x][y] f.dropObject() self.myActiveClix = (x, y) self.board.updateGL() elif (self.ui.cmdBarrier.isChecked() or self.ui.cmdSmokeCloud.isChecked() or self.ui.cmdDebris.isChecked() or self.ui.cmdSpecial.isChecked()) and not self.board.boardObjects[x][y]: if self.ui.cmdBarrier.isChecked(): type = "barrier" elif self.ui.cmdSmokeCloud.isChecked(): type = "smoke cloud" elif self.ui.cmdDebris.isChecked(): type = "debris" elif self.ui.cmdSpecial.isChecked(): type = "special" b = ObjectSimpleSquare(self.board, type) self.board.boardObjects[x][y] = b b.x = x b.y = y self.board.log( "Me", "Placed a "+type+" token." ) self.board.updateGL() else: if ( self.board.boardFigures[x][y] and not self.board.modeObject ): f = self.board.boardFigures[x][y] self.board.moving = True self.board.moveOriginX = self.board.moveDestinationX = x self.board.moveOriginY = self.board.moveDestinationY = y #self.board.clearMyActive() if f.mine: self.board.clearActive(1) self.myActiveClix = (x, y) f.active = 1 self.redrawMyDial() else: self.board.clearActive(2) self.theirActiveClix = (x, y) f.active = 2 self.redrawTheirDial() elif self.board.boardObjects[x][y]: self.board.moving = True self.board.modeObject = True self.board.moveOriginX = self.board.moveDestinationX = x self.board.moveOriginY = self.board.moveDestinationY = y self.activeObject = (x, y) self.redrawMyDial() elif self.ui.cmdLOF.isChecked(): self.board.moving = True self.board.moveOriginX = self.board.moveDestinationX = x self.board.moveOriginY = self.board.moveDestinationY = y def redrawMyDial(self): if self.board.modeObject: f = self.board.boardObjects[self.activeObject[0]][self.activeObject[1]] else: f = self.board.boardFigures[self.myActiveClix[0]][self.myActiveClix[1]] if f: png = f.drawDial() if png: pixmap = QtGui.QPixmap() pixmap.loadFromData(png, "PNG") ui.myDial.setPixmap( pixmap ) ui.myDial.update() def redrawTheirDial(self): f = self.board.boardFigures[self.theirActiveClix[0]][self.theirActiveClix[1]] pixmap = QtGui.QPixmap() pixmap.loadFromData(f.drawDial(), "PNG") ui.theirDial.setPixmap( pixmap ) ui.theirDial.update() def doubleClickMap(self, event): x, y = self.getBoardXY(event) #print "X %s Y %s aX %s aY %s vD %s Xoffset %s Yoffset %s Zoffset %s" % ( x, y, self.board.view_angle_x, self.board.view_angle_y, self.board.view_distance, self.board.x_pos, self.board.y_pos, self.board.z_pos ) # if ( x >= 0 and x <= 23 and y >= 0 and y <= 23 ): # f = self.board.boardFigures[x][y] # if f: # f.damage() # self.redrawMyDial() return def moveMap(self, event): x, y = self.getBoardXY(event) if ( x >= 0 and x <= 23 and y >= 0 and y <= 23 ): if self.board.moving and ( (self.lastX == False and self.lastY == False ) or (self.lastX != x or self.lastY != y ) ) and event.x() > 0 and event.y() > 0: self.board.moveDestinationX = x self.board.moveDestinationY = y self.lastX = x self.lastY = y if self.board.modeObject: f = self.board.boardObjects[self.board.moveOriginX][self.board.moveOriginY] else: f = self.board.boardFigures[self.board.moveOriginX][self.board.moveOriginY] delta = abs( x - self.board.moveOriginX ) dY = abs( y - self.board.moveOriginY ) if dY > delta: delta = dY if self.board.modeLOF: self.ui.glFrame.setTitle( "LOF "+str(delta)+" space(s)..." ) else: self.ui.glFrame.setTitle( "Moving "+f.getName()+" "+str(delta)+" space(s)..." ) #print self.board.moveDestinationX, self.board.moveDestinationY self.board.updateGL() def stopMoving(self, event): if self.board.moving and not self.ui.cmdLOF.isChecked(): x, y = self.getBoardXY(event) doMove = True if not self.board.modeObject: f = self.board.boardFigures[self.board.moveOriginX][self.board.moveOriginY] if self.board.boardFigures[self.board.moveDestinationX][self.board.moveDestinationY]: doMove = False if f and not f.mine: doMove = False else: if self.board.boardObjects[self.board.moveDestinationX][self.board.moveDestinationY]: doMove = False f = self.board.boardObjects[self.board.moveOriginX][self.board.moveOriginY] if doMove: f.x = self.board.moveDestinationX f.y = self.board.moveDestinationY if f and f.mine: self.myActiveClix = (self.board.moveDestinationX, self.board.moveDestinationY) self.board.moveSelectedFigure() self.ui.glFrame.setTitle( " " ) self.board.moving = False if self.board.modeObject: if not self.ui.cmdObj.isChecked(): self.board.modeObject = False self.board.updateGL() def zoomMap(self, event): if (event.orientation() == QtCore.Qt.Vertical): #new_distance = self.board.view_distance + (float(event.delta()) / 8 / 15) #if ( new_distance > 0.05 and new_distance < 1 ): # self.board.view_distance = new_distance # self.board.updateGL() new_distance = self.board.z_pos + float(event.delta()) / 8 if new_distance >= 0 and new_distance <= 40: self.board.z_pos = new_distance self.board.updateGL() return QtGui.QMainWindow.wheelEvent(self.MainWindow, event) def test(self,event): #print event.key() if event.key() == QtCore.Qt.Key_Up and self.board.view_angle_x < 90: self.board.view_angle_x += 1.0 self.board.updateGL() elif event.key() == QtCore.Qt.Key_Down and self.board.view_angle_x > 20: self.board.view_angle_x -= 1.0 self.board.updateGL() elif event.key() == QtCore.Qt.Key_Left: self.board.view_angle_y += 1.0 self.board.updateGL() elif event.key() == QtCore.Qt.Key_Right: self.board.view_angle_y -= 1.0 self.board.updateGL() elif event.key() == 87: self.board.y_pos += 1.0 self.board.updateGL() elif event.key() == 83: self.board.y_pos -= 1.0 self.board.updateGL() elif event.key() == 65: self.board.x_pos -= 1.0 self.board.updateGL() elif event.key() == 68: self.board.x_pos += 1.0 self.board.updateGL() elif event.key() == 81: self.board.z_pos -= 1.0 self.board.updateGL() elif event.key() == 69: self.board.z_pos += 1.0 self.board.updateGL() elif event.key() == 48: self.board.z_pos = 0.0 self.board.y_pos = 0.0 self.board.x_pos = 0.0 self.board.view_angle_x = 90 self.board.view_angle_y = 0 self.board.view_distance = 1 self.board.updateGL() ''' if keystate[K_UP] and view_angle_x < 90: view_angle_x += 1.0 if keystate[K_DOWN] and view_angle_x > 0: view_angle_x -= 1.0 if keystate[K_LEFT]: view_angle_y += 1.0 if keystate[K_RIGHT]: view_angle_y -= 1.0 if keystate[K_PAGEUP] and view_distance < 2.0: view_distance += .03 if keystate[K_PAGEDOWN] and view_distance > 0.5: view_distance -= .03 if keystate[K_END]: view_distance = 1.0; view_angle_y = 0.0; view_angle_x = 90.0 ''' else: return QtGui.QMainWindow.keyPressEvent(self.MainWindow, event) def barrier(self, event): if not self.ui.cmdBarrier.isChecked(): self.clearOtherToggles( self.ui.cmdBarrier ) self.ui.glFrame.setTitle( "Click a square with no figure in it to add a barrier token" ) else: self.ui.glFrame.setTitle( " " ) return QtGui.QPushButton.mousePressEvent(self.ui.cmdBarrier, event) def smokeCloud(self, event): if not self.ui.cmdSmokeCloud.isChecked(): self.clearOtherToggles( self.ui.cmdSmokeCloud ) self.ui.glFrame.setTitle( "Click a square with no figure in it to add a smoke cloud token" ) else: self.ui.glFrame.setTitle( " " ) return QtGui.QPushButton.mousePressEvent(self.ui.cmdSmokeCloud, event) def debris(self, event): if not self.ui.cmdDebris.isChecked(): self.clearOtherToggles( self.ui.cmdDebris ) self.ui.glFrame.setTitle( "Click a square with no figure in it to add a debris token" ) else: self.ui.glFrame.setTitle( " " ) return QtGui.QPushButton.mousePressEvent(self.ui.cmdDebris, event) def special(self, event): if not self.ui.cmdSpecial.isChecked(): self.clearOtherToggles( self.ui.cmdSpecial ) self.ui.glFrame.setTitle( "Click a square with no figure in it to add a special token" ) else: self.ui.glFrame.setTitle( " " ) return QtGui.QPushButton.mousePressEvent(self.ui.cmdSpecial, event) #print self.board.x_pos, self.board.y_pos, self.board.z_pos, self.board.view_angle_x, self.board.view_angle_y, self.board.view_distance def clearOtherToggles(self, button): if button != self.ui.cmdBarrier: self.ui.cmdBarrier.setChecked( False ) if button != self.ui.cmdSmokeCloud: self.ui.cmdSmokeCloud.setChecked( False ) if button != self.ui.cmdDebris: self.ui.cmdDebris.setChecked( False ) if button != self.ui.cmdSpecial: self.ui.cmdSpecial.setChecked( False ) if button != self.ui.cmdLOF: self.ui.cmdLOF.setChecked( False ) self.board.modeLOF = False self.board.moving = False self.board.updateGL() if button != self.ui.cmdObj: self.ui.cmdObj.setChecked( False ) self.board.modeObject = False
class MainWindow(QMainWindow, Ui_MainWindow): """ Class documentation goes here. """ def __init__(self, parent = None): """ Constructor """ QMainWindow.__init__(self, parent) self.ui = Ui_MainWindow() self.mousePosition = [0, 0] self.setupUi(self) self.show() self.glFrame.setTitle( " " ) self.board = GameBoard(MainWindow, self) self.vLayout.addWidget(self.board) self.gameLog.keyPressEvent = self.test self.keyPressEvent = self.test self.board.wheelEvent = self.zoomMap self.board.mouseMoveEvent = self.moveMap self.board.mouseDoubleClickEvent = self.doubleClickMap self.board.mousePressEvent = self.clickMap self.board.mouseReleaseEvent = self.stopMoving self.lastX = False self.lastY = False self.mode = "team" self.myActiveClix = False self.theirActiveClix = False self.chooseMapDialog = None self.activeObject = False self.myDial.setMouseTracking(True) self.currentFigure.setMouseTracking(True) self.currentSet = None self.sets = {} setlistFile = os.path.join(sys.path[0], 'sets', 'setlist') if os.path.exists( setlistFile ): sets = open(setlistFile).readlines() for setname in sets: set, filesize, setname = setname.split(":") if os.path.getsize( set ) != filesize: self.generateSetList( setlistFile ) break else: self.sets[setname] = set else: self.generateSetList( setlistFile ) self.populateSetsDropdown() self.currentSelectedFigure = None self.myDial.mouseMoveEvent = self.hoverMyDial self.currentFigure.mouseMoveEvent = self.hoverCurrentFigure def populateSetsDropdown(self): self.cmbSet.addItem( "- Choose a Set -" ) for key, value in self.sets.items(): self.cmbSet.addItem( key ) return def generateSetList(self, setlistFile): self.sets = {} f = open( setlistFile, 'w' ) for infile in glob.glob( os.path.join(sys.path[0], 'sets', '*.xml' ) ): setXml = etree.parse( infile ) setname = setXml.getroot().get("name") line = infile+":"+str(os.path.getsize( infile ))+":"+setname self.sets[setname] = infile f.write( line ) f.close() @pyqtSignature("") def on_cmdBarrier_clicked(self): """ Slot documentation goes here. """ if self.cmdBarrier.isChecked(): self.clearOtherToggles( self.cmdBarrier ) self.glFrame.setTitle( "Click a square with no figure in it to add a barrier token" ) else: self.glFrame.setTitle( " " ) def test(self,event): if self.mode == "team": return #print event.key() if event.key() == QtCore.Qt.Key_Up and self.board.view_angle_x < 90: self.board.view_angle_x += 5.0 self.board.updateGL() elif event.key() == QtCore.Qt.Key_Down and self.board.view_angle_x > 20: self.board.view_angle_x -= 5.0 self.board.updateGL() elif event.key() == QtCore.Qt.Key_Left: self.board.view_angle_y += 5.0 self.board.updateGL() elif event.key() == QtCore.Qt.Key_Right: self.board.view_angle_y -= 5.0 self.board.updateGL() elif event.key() == 87: self.board.y_pos -= 1.0 self.board.updateGL() elif event.key() == 83: self.board.y_pos += 1.0 self.board.updateGL() elif event.key() == 65: self.board.x_pos += 1.0 self.board.updateGL() elif event.key() == 68: self.board.x_pos -= 1.0 self.board.updateGL() elif event.key() == 81: self.board.z_pos -= 1.0 self.board.updateGL() elif event.key() == 69: self.board.z_pos += 1.0 self.board.updateGL() elif event.key() == 48: self.board.z_pos = 0.0 self.board.y_pos = 0.0 self.board.x_pos = 0.0 self.board.view_angle_x = 90 self.board.view_angle_y = 0 self.board.view_distance = 1 self.board.updateGL() ''' if keystate[K_UP] and view_angle_x < 90: view_angle_x += 1.0 if keystate[K_DOWN] and view_angle_x > 0: view_angle_x -= 1.0 if keystate[K_LEFT]: view_angle_y += 1.0 if keystate[K_RIGHT]: view_angle_y -= 1.0 if keystate[K_PAGEUP] and view_distance < 2.0: view_distance += .03 if keystate[K_PAGEDOWN] and view_distance > 0.5: view_distance -= .03 if keystate[K_END]: view_distance = 1.0; view_angle_y = 0.0; view_angle_x = 90.0 ''' else: return QtGui.QMainWindow.keyPressEvent(self, event) @pyqtSignature("") def on_cmdLOF_clicked(self): if self.cmdLOF.isChecked(): self.board.modeLOF = True self.clearOtherToggles( self.cmdLOF ) else: self.board.modeLOF = False self.glFrame.setTitle( " " ) self.board.moving = False self.board.updateGL() @pyqtSignature("") def on_cmdObj_clicked(self): if self.cmdObj.isChecked(): self.board.modeObject = True self.clearOtherToggles( self.cmdObj ) else: self.board.modeObject = False self.glFrame.setTitle( " " ) self.board.moving = False self.board.updateGL() @pyqtSignature("") def on_cmdStandies_clicked(self): """ Slot documentation goes here. """ # TODO: not implemented yet raise NotImplementedError @pyqtSignature("") def on_cmdRemoveObject_clicked(self): """ Slot documentation goes here. """ # TODO: not implemented yet raise NotImplementedError @pyqtSignature("") def on_cmdSmokeCloud_clicked(self): if self.cmdSmokeCloud.isChecked(): self.clearOtherToggles( self.cmdSmokeCloud ) self.glFrame.setTitle( "Click a square with no figure in it to add a smoke cloud token" ) else: self.glFrame.setTitle( " " ) @pyqtSignature("") def on_cmdDebris_clicked(self): if self.cmdDebris.isChecked(): self.clearOtherToggles( self.cmdDebris ) self.glFrame.setTitle( "Click a square with no figure in it to add a debris token" ) else: self.glFrame.setTitle( " " ) @pyqtSignature("") def on_cmdSpecial_clicked(self): if not self.cmdSpecial.isChecked(): self.clearOtherToggles( self.cmdSpecial ) self.glFrame.setTitle( "Click a square with no figure in it to add a special token" ) else: self.glFrame.setTitle( " " ) @pyqtSignature("") def on_rollTwo_clicked(self): v = random.randint( 2, 12 ) s = "Rolled a "+str(v)+" on two dice." if v == 2: s += " <b>Crit miss!</b>" elif v == 12: s += " <b>Critical hit!</b>" self.board.log( "Me", s ) @pyqtSignature("") def on_rollOne_clicked(self): v = random.randint( 1, 6 ) self.board.log( "Me", "Rolled a "+str(v)+" on one die.") @pyqtSignature("") def on_cmdHeal_clicked(self): f = self.getMyActiveClix() if f: f.heal() self.redrawMyDial() @pyqtSignature("") def on_cmdTokenBlue_clicked(self): f = self.getMyActiveClix() if f: f.token( "blue" ) self.board.updateGL() @pyqtSignature("") def on_cmdTokenRed_clicked(self): f = self.getMyActiveClix() if f: f.token( "red" ) self.board.updateGL() @pyqtSignature("") def on_cmdDamage_clicked(self): f = self.getMyActiveClix() if f: f.damage() self.redrawMyDial() def getMyActiveClix(self): c = self.myActiveClix if c: x, y = c f = self.board.boardFigures[x][y] if f: return f return False def getBoardXY(self, event): v = self.board.viewport() winY = v[3] - event.y() winX = event.x() winZ = self.board.getMouseZ(winX, winY) posX, posY, posZ = gluUnProject(winX, winY, winZ) x = int(math.ceil(posX)+11) y = int(math.ceil(posZ)+11) return [x, y] def hoverCurrentFigure(self, event): if self.currentSelectedFigure is not None: print event.pos() return def hoverMyDial(self, event): if self.myActiveClix: f = self.board.boardFigures[self.myActiveClix[0]][self.myActiveClix[1]] if f: t = f.getToolTip(event.pos()) if t: QtGui.QToolTip.showText( event.globalPos(), "<p>"+t+"</p>", self.myDial ) else: QtGui.QToolTip.hideText() def clickMap(self, event): x, y = self.getBoardXY(event) if ( x >= 0 and x <= 23 and y >= 0 and y <= 23 ): if event.button() == QtCore.Qt.RightButton and self.board.boardObjects[x][y]: #Picking up an object o = self.board.boardObjects[x][y] f = False if self.myActiveClix: f = self.board.boardFigures[self.myActiveClix[0]][self.myActiveClix[1]] if o and o.canBePickedUp() and f: b = f.takeObject(o) if b: self.board.updateGL() elif isinstance(o, ObjectSimpleSquare): if o.type == "barrier": o.type = "debris" if f: self.board.log( "Me", f.getName() + " destroys a square of blocking terrain." ) else: self.board.log( "Me", "Destroyed a square of blocking terrain.") else: self.board.boardObjects[x][y] = False self.board.log( "Me", "Removed a square of "+o.type+" terrain.") self.board.updateGL() elif event.button() == QtCore.Qt.RightButton and self.board.boardFigures[x][y] and self.board.boardFigures[x][y].hasObject() and self.board.boardFigures[x][y].mine: #Dropping an object f = self.board.boardFigures[x][y] f.dropObject() self.myActiveClix = (x, y) self.board.updateGL() elif (self.cmdBarrier.isChecked() or self.cmdSmokeCloud.isChecked() or self.cmdDebris.isChecked() or self.cmdSpecial.isChecked()) and not self.board.boardObjects[x][y]: if self.cmdBarrier.isChecked(): type = "barrier" elif self.cmdSmokeCloud.isChecked(): type = "smoke cloud" elif self.cmdDebris.isChecked(): type = "debris" elif self.cmdSpecial.isChecked(): type = "special" b = ObjectSimpleSquare(self.board, type) self.board.boardObjects[x][y] = b b.x = x b.y = y self.board.log( "Me", "Placed a "+type+" token." ) self.board.updateGL() else: if ( self.board.boardFigures[x][y] and not self.board.modeObject ): f = self.board.boardFigures[x][y] self.board.moving = True self.board.moveOriginX = self.board.moveDestinationX = x self.board.moveOriginY = self.board.moveDestinationY = y #self.board.clearMyActive() if f.mine: self.board.clearActive(1) self.myActiveClix = (x, y) f.active = 1 self.redrawMyDial() else: self.board.clearActive(2) self.theirActiveClix = (x, y) f.active = 2 self.redrawTheirDial() elif self.board.boardObjects[x][y]: self.board.moving = True self.board.modeObject = True self.board.moveOriginX = self.board.moveDestinationX = x self.board.moveOriginY = self.board.moveDestinationY = y self.activeObject = (x, y) self.redrawMyDial() elif self.cmdLOF.isChecked(): self.board.moving = True self.board.moveOriginX = self.board.moveDestinationX = x self.board.moveOriginY = self.board.moveDestinationY = y def redrawMyDial(self): if self.board.modeObject: f = self.board.boardObjects[self.activeObject[0]][self.activeObject[1]] else: f = self.board.boardFigures[self.myActiveClix[0]][self.myActiveClix[1]] if f: png = f.drawDial() if png: pixmap = QtGui.QPixmap() pixmap.loadFromData(png, "PNG") self.myDial.setPixmap( pixmap ) self.myDial.update() def redrawTheirDial(self): f = self.board.boardFigures[self.theirActiveClix[0]][self.theirActiveClix[1]] pixmap = QtGui.QPixmap() pixmap.loadFromData(f.drawDial(), "PNG") self.theirDial.setPixmap( pixmap ) self.theirDial.update() def doubleClickMap(self, event): x, y = self.getBoardXY(event) #print "X %s Y %s aX %s aY %s vD %s Xoffset %s Yoffset %s Zoffset %s" % ( x, y, self.board.view_angle_x, self.board.view_angle_y, self.board.view_distance, self.board.x_pos, self.board.y_pos, self.board.z_pos ) # if ( x >= 0 and x <= 23 and y >= 0 and y <= 23 ): # f = self.board.boardFigures[x][y] # if f: # f.damage() # self.redrawMyDial() return def moveMap(self, event): x, y = self.getBoardXY(event) if ( x >= 0 and x <= 23 and y >= 0 and y <= 23 ): if self.board.moving and ( (self.lastX == False and self.lastY == False ) or (self.lastX != x or self.lastY != y ) ) and event.x() > 0 and event.y() > 0: self.board.moveDestinationX = x self.board.moveDestinationY = y self.lastX = x self.lastY = y if self.board.modeObject: f = self.board.boardObjects[self.board.moveOriginX][self.board.moveOriginY] else: f = self.board.boardFigures[self.board.moveOriginX][self.board.moveOriginY] delta = abs( x - self.board.moveOriginX ) dY = abs( y - self.board.moveOriginY ) if dY > delta: delta = dY if self.board.modeLOF: self.glFrame.setTitle( "LOF "+str(delta)+" space(s)..." ) else: self.glFrame.setTitle( "Moving "+f.getName()+" "+str(delta)+" space(s)..." ) #print self.board.moveDestinationX, self.board.moveDestinationY self.board.updateGL() def stopMoving(self, event): if self.board.moving and not self.cmdLOF.isChecked(): x, y = self.getBoardXY(event) doMove = True if not self.board.modeObject: f = self.board.boardFigures[self.board.moveOriginX][self.board.moveOriginY] if self.board.boardFigures[self.board.moveDestinationX][self.board.moveDestinationY]: doMove = False if f and not f.mine: doMove = False else: if self.board.boardObjects[self.board.moveDestinationX][self.board.moveDestinationY]: doMove = False f = self.board.boardObjects[self.board.moveOriginX][self.board.moveOriginY] if doMove: f.x = self.board.moveDestinationX f.y = self.board.moveDestinationY if f and f.mine: self.myActiveClix = (self.board.moveDestinationX, self.board.moveDestinationY) self.board.moveSelectedFigure() self.glFrame.setTitle( " " ) self.board.moving = False if self.board.modeObject: if not self.cmdObj.isChecked(): self.board.modeObject = False self.board.updateGL() def zoomMap(self, event): if (event.orientation() == QtCore.Qt.Vertical): #new_distance = self.board.view_distance + (float(event.delta()) / 8 / 15) #if ( new_distance > 0.05 and new_distance < 1 ): # self.board.view_distance = new_distance # self.board.updateGL() new_distance = self.board.z_pos + float(event.delta()) / 8 if new_distance >= 0 and new_distance <= 40: self.board.z_pos = new_distance self.board.updateGL() return QtGui.QMainWindow.wheelEvent(self, event) def clearOtherToggles(self, button): if button != self.cmdBarrier: self.cmdBarrier.setChecked( False ) if button != self.cmdSmokeCloud: self.cmdSmokeCloud.setChecked( False ) if button != self.cmdDebris: self.cmdDebris.setChecked( False ) if button != self.cmdSpecial: self.cmdSpecial.setChecked( False ) if button != self.cmdLOF: self.cmdLOF.setChecked( False ) self.board.modeLOF = False self.board.moving = False self.board.updateGL() if button != self.cmdObj: self.cmdObj.setChecked( False ) self.board.modeObject = False @pyqtSignature("") def on_actionTeam_Builder_activated(self): self.wStack.setCurrentIndex(0) self.mode = "team" @pyqtSignature("") def on_actionBattle_Map_activated(self): self.wStack.setCurrentIndex(1) self.mode = "map" @pyqtSignature("") def on_actionChoose_Map_activated(self): if self.chooseMapDialog is None: self.chooseMapDialog = dlgChooseMap(self) self.chooseMapDialog.setMap( self.board.currentMap ) self.chooseMapDialog.show() @pyqtSignature("") def on_txtSearch_returnPressed(self): #print self.txtSearch.text() mnm = etree.parse(os.path.join(sys.path[0], 'sets', 'mnm.xml')) search = str( self.txtSearch.text() ) conditions = [] if search is not None: parts = search.lower().split( " " ) for part in parts: x = part.split(":") if len(x) == 2: conditions.append( ( x[0], x[1] ) ) if len(conditions): for c in conditions: op, val = c print op, val if op == "points": return @pyqtSignature("QString") def on_cmbSet_currentIndexChanged(self, p0): print p0 chosenSet = str(p0) if chosenSet == "- Choose a Set -": return False if self.currentSet and chosenSet == self.currentSet.getroot().get("name"): return False self.currentSet = setXml = etree.parse( self.sets[chosenSet] ) figures = setXml.find("figures") for figure in figures: self.lstFigures.addItem( figure.get("id") + " " + figure.get("name") ) @pyqtSignature("QString") def on_lstFigures_currentTextChanged(self, currentText): ex = str(currentText).split(" ") id = ex[0] figures = self.currentSet.xpath("//figure[@id='"+id+"']") if len(figures): figure = figures[0] self.currentSelectedFigure = figure dial = figure.find("dial") if dial: dialLength = int(dial.get("length")) if dialLength < 11: dialLength = 11 ko_click = "<td width='20'><table border='1' style='border-style: solid;border-color: white' cellspacing='0' cellpadding='0'><tr><td width='20' align='center' style='color:red'>KO</td></tr></table></td>" spd_clicks = dial.xpath("click/spd") atk_clicks = dial.xpath("click/atk") def_clicks = dial.xpath("click/def") dmg_clicks = dial.xpath("click/dmg") text = "<p><b>"+figure.get("name")+"</b></p>" text += "<table bgcolor='white' border='0'>" # text += "<tr><td bgcolor='red'>Doom</td></tr>" text += "<tr>" text += "<td width='20'><table border='1' bgcolor='black' style='border-style: solid;border-color: black' cellspacing='0' cellpadding='0'><tr><td width='20' align='center'><img src='images/units-m-normal.gif'></td></tr></table></td>" for i in range(0, dialLength): i = int(i) if len(spd_clicks)<=i: text += ko_click else: p = spd_clicks[i].get("power") value = spd_clicks[i].text border_color = "white" bg_color = 'white' fg_color = 'black' if p: if p == "SPC": bg_color = "white" border_color = "black" fg_color = 'black' else: c = self.board.PAC.getColors(spd_clicks[i].get("power")) bg_color = c[0] fg_color = "color:"+c[1] text += "<td width='20'><table border='1' style='border-style: solid;border-color: "+border_color+"' cellspacing='0' cellpadding='0'><tr><td width='20' align='center' bgcolor='"+bg_color+"' style='"+fg_color+"'>"+value+"</td></tr></table></td>" text += "</tr>" text += "</table>" self.currentFigure.setText( text )