class GuiButton(DirectButton): notify = directNotify.newCategory('GuiButton') genericButton = None redGenericButton = None blueGenericButton = None def __init__(self, parent = None, hotkeys = (), hotkeyLabel = None, hotkeyLabelX = 0.091999999999999998, hotkeyArgs = True, helpText = '', helpPos = (0, 0, 0), helpDelay = PiratesGuiGlobals.HelpPopupTime, helpColorOff = False, helpLeftAlign = False, helpCenterAlign = False, **kw): self.loadGui() self.helpBox = None self.helpWatcher = None self.canRepositon = False optiondefs = (('relief', None, None), ('pos', (0, 0, 0), None), ('image', GuiButton.genericButton, None), ('image_scale', (0.23999999999999999, 0.22, 0.22), None), ('image_pos', (0, 0, 0), None), ('pressEffect', 0, None), ('text', '', None), ('text_font', PiratesGlobals.getInterfaceFont(), None), ('text_scale', PiratesGuiGlobals.TextScaleLarge, None), ('text0_fg', PiratesGuiGlobals.TextFG2, None), ('text1_fg', PiratesGuiGlobals.TextFG2, None), ('text2_fg', PiratesGuiGlobals.TextFG2, None), ('text3_fg', PiratesGuiGlobals.TextFG3, None), ('text_shadow', PiratesGuiGlobals.TextShadow, None), ('text_pos', (0, -0.01), None), ('text_wordwrap', 8, None), ('text_align', TextNode.ACenter, None), ('textMayChange', 1, None), ('helpText', helpText, self.helpTextUpdated), ('helpPos', helpPos, self.setHelpPos), ('helpDelay', helpDelay, None), ('helpColorOff', helpColorOff, None), ('helpLeftAlign', helpLeftAlign, None), ('helpCenterAlign', helpCenterAlign, None), ('helpBin', 'gui-popup', None), ('helpBinSort', 0, None), ('helpOpaque', 0, None), ('canReposition', False, None), ('sortOrder', 100, None), ('baseImage', None, None), ('selected', False, None), ('selectedImage', GuiButton.genericButton, None), ('state', DGG.NORMAL, self.setState)) self.defineoptions(kw, optiondefs) DirectButton.__init__(self, parent = NodePath()) self.initialiseoptions(GuiButton) self.hotkeys = () self.setupHotkeys(hotkeys, hotkeyLabel, self['command'], self['extraArgs'], hotkeyLabelX, hotkeyArgs) if not parent: pass self.reparentTo(aspect2d) self.helpTaskName = None def destroy(self): self.hideDetails() if self.helpWatcher: self.helpWatcher.unbind(DGG.WITHIN) self.helpWatcher.unbind(DGG.WITHOUT) self.helpWatcher.destroy() self.helpWatcher = None self.unbind(DGG.ENTER) self.unbind(DGG.EXIT) self.ignoreAll() DirectButton.destroy(self) def loadGui(self): if GuiButton.genericButton: return None gui = loader.loadModel('models/gui/toplevel_gui') GuiButton.genericButton = (gui.find('**/generic_button'), gui.find('**/generic_button_down'), gui.find('**/generic_button_over'), gui.find('**/generic_button_disabled')) GuiButton.redGenericButton = (gui.find('**/pir_t_gui_but_generic'), gui.find('**/pir_t_gui_but_generic_down'), gui.find('**/pir_t_gui_but_generic_over'), gui.find('**/pir_t_gui_but_generic_disabled')) GuiButton.blueGenericButton = (gui.find('**/pir_t_gui_but_generic_blue'), gui.find('**/pir_t_gui_but_generic_blue_down'), gui.find('**/pir_t_gui_but_generic_blue_over'), gui.find('**/pir_t_gui_but_generic_blue_disabled')) def setupHotkeys(self, hotkeys, hotkeyLabel, command, extraArgs, hotkeyLabelX = 0.091999999999999998, hotkeyArgs = True): if self.hotkeys: self.ignoreHotkeys() self.hotkeyLabel.destroy() self.hotkeys = hotkeys self.command = command self.extraArgs = extraArgs self.hotkeyLabel = hotkeyLabel self.hotkeyLabelX = hotkeyLabelX self.hotkeyArgs = hotkeyArgs if self.hotkeys: self.hotkeyLabel = DirectLabel(parent = self, relief = None, state = DGG.DISABLED, text = hotkeyLabel, text_font = PiratesGlobals.getPirateBoldOutlineFont(), text_scale = PiratesGuiGlobals.TextScaleMed, text_pos = (hotkeyLabelX, 0.01), text_fg = PiratesGuiGlobals.TextFG2, text_shadow = PiratesGuiGlobals.TextShadow, textMayChange = 1) self.acceptHotkeys() def ignoreHotkeys(self): if self.hotkeys: for hotkey in self.hotkeys: self.ignore(hotkey) def acceptHotkeys(self): if self.hotkeys: for hotkey in self.hotkeys: if self.hotkeyArgs: self.accept(hotkey, self.command, self.extraArgs + [ hotkey]) continue self.accept(hotkey, self.command, self.extraArgs) def createHelpWatcher(self): if self['helpOpaque']: self.bind(DGG.ENTER, self.waitShowDetails) self.bind(DGG.EXIT, self.hideDetails) else: w = self.getWidth() h = self.getHeight() pos = self._GuiButton__discoverHelpWatcherPos() if not self['frameSize']: pass frameSize = self.getBounds() self.helpWatcher = DirectFrame(parent = self, relief = base.config.GetBool('show-helpwatchers', 0), state = DGG.NORMAL, frameColor = (1, 1, 0, 0.5), frameSize = frameSize, sortOrder = self['sortOrder'] - 1) self.helpWatcher.wrtReparentTo(self.getParent()) self.reparentTo(self.getParent()) self.helpWatcher.bind(DGG.WITHIN, self.waitShowDetails) self.helpWatcher.bind(DGG.WITHOUT, self.hideDetails) def _GuiButton__discoverHelpWatcherPos(self): w = self.getWidth() h = self.getHeight() if not self['frameSize']: pass bounds = self.getBounds() pos = Vec3(bounds[0] + w / 2, 0, bounds[2] + h / 2) return pos def resetHelpWatcher(self): if self.helpWatcher: self.helpWatcher.setPos(self, 0, 0, 0) def createHelpBox(self): if not self.helpWatcher: self.createHelpWatcher() helpLabel = DirectLabel(relief = None, state = DGG.DISABLED, text = self['helpText'], text_align = TextNode.ACenter, text_scale = PiratesGuiGlobals.TextScaleMed, text_fg = PiratesGuiGlobals.TextFG1, text_wordwrap = 12, text_shadow = (0, 0, 0, 1), textMayChange = 0, sortOrder = 91) height = helpLabel.getHeight() width = helpLabel.getWidth() + 0.050000000000000003 if self['helpLeftAlign']: fs = [ 0.0, width, -height, 0.044999999999999998] pos = [ width / 2.0, 0, -0.01] elif self['helpCenterAlign']: pos = [ 0.0, 0.0, -0.01] fs = [ -(width / 2 + 0.01), width / 2 + 0.01, -(height / 2 + 0.014999999999999999), height / 2 + 0.014999999999999999] else: fs = [ 0.25 - width, 0.25, -height, 0.044999999999999998] pos = [ 0.25 - width / 2.0, 0, -0.01] self.helpBox = BorderFrame(parent = self, state = DGG.DISABLED, frameSize = (fs[0], fs[1], fs[2], fs[3]), modelName = 'general_frame_f', pos = self['helpPos'], sortOrder = 90) helpLabel.reparentTo(self.helpBox) helpLabel.setPos(pos[0], pos[1], pos[2]) self.helpBox.hide() self.helpBox.setClipPlaneOff() pos = self.helpBox.getPos(aspect2d) x = min(pos[0], base.a2dRight - width) z = max(pos[2], base.a2dBottom - height) self.helpBox.setPos(aspect2d, x, 0, z) if self['helpColorOff']: self.helpBox.setColorOff() else: self.helpBox.flattenLight() if self['helpBin']: self.helpBox.setBin(self['helpBin'], self['helpBinSort']) def helpTextUpdated(self): if self.helpBox and self.helpBox['text'] != self['helpText']: self.helpBox.destroy() self.createHelpBox() elif self['helpText']: self.createHelpBox() def setHelpPos(self): if self.helpBox: self.helpTextUpdated() def waitShowDetails(self, event): try: self['helpDelay'] except AttributeError: return None if not self.helpBox: self.createHelpBox() if self['helpDelay']: self.hideDetails() self.helpTaskName = 'helpInfoTask-%s' % self.getName() taskMgr.doMethodLater(self['helpDelay'], self.helpBox.show, self.helpTaskName, extraArgs = []) else: self.helpBox.show() def hideDetails(self, event = None): if self.helpTaskName: taskMgr.remove(self.helpTaskName) if self.helpBox and not self.helpBox.isEmpty(): self.helpBox.hide() def setImage(self): DirectButton.setImage(self) if not self['baseImage']: self['baseImage'] = self['image'] def setSelected(self): if self['selected']: self['image'] = self['selectedImage'] else: self['image'] = self['baseImage'] def setState(self): DirectButton.setState(self) if self.helpWatcher: self.helpWatcher['state'] = self['state'] def removeNode(self): DirectButton.removeNode(self) if self.helpWatcher: self.helpWatcher.removeNode() def remove(self): DirectButton.remove(self) if self.helpWatcher: self.helpWatcher.remove() def detachNode(self): DirectButton.detachNode(self) if self.helpWatcher: self.helpWatcher.detachNode() def hide(self): DirectButton.hide(self) if self.helpWatcher: self.helpWatcher.hide() def show(self): DirectButton.show(self) if self.helpWatcher: self.helpWatcher.show() def stash(self): DirectButton.stash(self) if self.helpWatcher: self.helpWatcher.stash() def unstash(self): DirectButton.unstash(self) self.reparentTo(self.getParent(), sort = self['sortOrder']) if self.helpWatcher: self.helpWatcher.unstash() self.helpWatcher.reparentTo(self.helpWatcher.getParent(), sort = self.helpWatcher['sortOrder'])
class GuiButton(DirectButton): notify = directNotify.newCategory('GuiButton') genericButton = None redGenericButton = None blueGenericButton = None def __init__(self, parent=None, hotkeys=(), hotkeyLabel=None, hotkeyLabelX=0.091999999999999998, hotkeyArgs=True, helpText='', helpPos=(0, 0, 0), helpDelay=PiratesGuiGlobals.HelpPopupTime, helpColorOff=False, helpLeftAlign=False, helpCenterAlign=False, **kw): self.loadGui() self.helpBox = None self.helpWatcher = None self.canRepositon = False optiondefs = (('relief', None, None), ('pos', (0, 0, 0), None), ('image', GuiButton.genericButton, None), ('image_scale', (0.23999999999999999, 0.22, 0.22), None), ('image_pos', (0, 0, 0), None), ('pressEffect', 0, None), ('text', '', None), ('text_font', PiratesGlobals.getInterfaceFont(), None), ('text_scale', PiratesGuiGlobals.TextScaleLarge, None), ('text0_fg', PiratesGuiGlobals.TextFG2, None), ('text1_fg', PiratesGuiGlobals.TextFG2, None), ('text2_fg', PiratesGuiGlobals.TextFG2, None), ('text3_fg', PiratesGuiGlobals.TextFG3, None), ('text_shadow', PiratesGuiGlobals.TextShadow, None), ('text_pos', (0, -0.01), None), ('text_wordwrap', 8, None), ('text_align', TextNode.ACenter, None), ('textMayChange', 1, None), ('helpText', helpText, self.helpTextUpdated), ('helpPos', helpPos, self.setHelpPos), ('helpDelay', helpDelay, None), ('helpColorOff', helpColorOff, None), ('helpLeftAlign', helpLeftAlign, None), ('helpCenterAlign', helpCenterAlign, None), ('helpBin', 'gui-popup', None), ('helpBinSort', 0, None), ('helpOpaque', 0, None), ('canReposition', False, None), ('sortOrder', 100, None), ('baseImage', None, None), ('selected', False, None), ('selectedImage', GuiButton.genericButton, None), ('state', DGG.NORMAL, self.setState)) self.defineoptions(kw, optiondefs) DirectButton.__init__(self, parent=NodePath(), **None) self.initialiseoptions(GuiButton) self.hotkeys = () self.setupHotkeys(hotkeys, hotkeyLabel, self['command'], self['extraArgs'], hotkeyLabelX, hotkeyArgs) if not parent: pass self.reparentTo(aspect2d) self.helpTaskName = None def destroy(self): self.hideDetails() self.command = None if self.helpWatcher: self.helpWatcher.command = None self.helpWatcher.unbind(DGG.WITHIN) self.helpWatcher.unbind(DGG.WITHOUT) self.helpWatcher.destroy() self.helpWatcher = None self.unbind(DGG.ENTER) self.unbind(DGG.EXIT) self.ignoreAll() DirectButton.destroy(self) def loadGui(self): if GuiButton.genericButton: return None gui = loader.loadModel('models/gui/toplevel_gui') GuiButton.genericButton = (gui.find('**/generic_button'), gui.find('**/generic_button_down'), gui.find('**/generic_button_over'), gui.find('**/generic_button_disabled')) GuiButton.redGenericButton = ( gui.find('**/pir_t_gui_but_generic'), gui.find('**/pir_t_gui_but_generic_down'), gui.find('**/pir_t_gui_but_generic_over'), gui.find('**/pir_t_gui_but_generic_disabled')) GuiButton.blueGenericButton = ( gui.find('**/pir_t_gui_but_generic_blue'), gui.find('**/pir_t_gui_but_generic_blue_down'), gui.find('**/pir_t_gui_but_generic_blue_over'), gui.find('**/pir_t_gui_but_generic_blue_disabled')) def setupHotkeys(self, hotkeys, hotkeyLabel, command, extraArgs, hotkeyLabelX=0.091999999999999998, hotkeyArgs=True): if self.hotkeys: self.ignoreHotkeys() self.hotkeyLabel.destroy() self.hotkeys = hotkeys self.command = command self.extraArgs = extraArgs self.hotkeyLabel = hotkeyLabel self.hotkeyLabelX = hotkeyLabelX self.hotkeyArgs = hotkeyArgs if self.hotkeys: self.hotkeyLabel = DirectLabel( parent=self, relief=None, state=DGG.DISABLED, text=hotkeyLabel, text_font=PiratesGlobals.getPirateBoldOutlineFont(), text_scale=PiratesGuiGlobals.TextScaleMed, text_pos=(hotkeyLabelX, 0.01), text_fg=PiratesGuiGlobals.TextFG2, text_shadow=PiratesGuiGlobals.TextShadow, textMayChange=1) self.acceptHotkeys() def ignoreHotkeys(self): if self.hotkeys: for hotkey in self.hotkeys: self.ignore(hotkey) def acceptHotkeys(self): if self.hotkeys: for hotkey in self.hotkeys: if self.hotkeyArgs: self.accept(hotkey, self.command, self.extraArgs + [hotkey]) continue self.accept(hotkey, self.command, self.extraArgs) def createHelpWatcher(self): if self['helpOpaque']: self.bind(DGG.ENTER, self.waitShowDetails) self.bind(DGG.EXIT, self.hideDetails) else: w = self.getWidth() h = self.getHeight() pos = self._GuiButton__discoverHelpWatcherPos() if not self['frameSize']: pass frameSize = self.getBounds() self.helpWatcher = DirectFrame(parent=self, relief=base.config.GetBool( 'show-helpwatchers', 0), state=DGG.NORMAL, frameColor=(1, 1, 0, 0.5), frameSize=frameSize, sortOrder=self['sortOrder'] - 1) self.helpWatcher.wrtReparentTo(self.getParent()) self.reparentTo(self.getParent()) self.helpWatcher.bind(DGG.WITHIN, self.waitShowDetails) self.helpWatcher.bind(DGG.WITHOUT, self.hideDetails) def _GuiButton__discoverHelpWatcherPos(self): w = self.getWidth() h = self.getHeight() if not self['frameSize']: pass bounds = self.getBounds() pos = Vec3(bounds[0] + w / 2, 0, bounds[2] + h / 2) return pos def resetHelpWatcher(self): if self.helpWatcher: self.helpWatcher.setPos(self, 0, 0, 0) def createHelpBox(self): if not self.helpWatcher: self.createHelpWatcher() helpLabel = DirectLabel(relief=None, state=DGG.DISABLED, text=self['helpText'], text_align=TextNode.ACenter, text_scale=PiratesGuiGlobals.TextScaleMed, text_fg=PiratesGuiGlobals.TextFG1, text_wordwrap=12, text_shadow=(0, 0, 0, 1), textMayChange=0, sortOrder=91) height = helpLabel.getHeight() width = helpLabel.getWidth() + 0.050000000000000003 if self['helpLeftAlign']: fs = [0.0, width, -height, 0.044999999999999998] pos = [width / 2.0, 0, -0.01] elif self['helpCenterAlign']: pos = [0.0, 0.0, -0.01] fs = [ -(width / 2 + 0.01), width / 2 + 0.01, -(height / 2 + 0.014999999999999999), height / 2 + 0.014999999999999999 ] else: fs = [0.25 - width, 0.25, -height, 0.044999999999999998] pos = [0.25 - width / 2.0, 0, -0.01] self.helpBox = BorderFrame(parent=self, state=DGG.DISABLED, frameSize=(fs[0], fs[1], fs[2], fs[3]), modelName='general_frame_f', pos=self['helpPos'], sortOrder=90) helpLabel.reparentTo(self.helpBox) helpLabel.setPos(pos[0], pos[1], pos[2]) self.helpBox.hide() self.helpBox.setClipPlaneOff() pos = self.helpBox.getPos(aspect2d) x = min(pos[0], base.a2dRight - width) z = max(pos[2], base.a2dBottom - height) self.helpBox.setPos(aspect2d, x, 0, z) if self['helpColorOff']: self.helpBox.setColorOff() else: self.helpBox.flattenLight() if self['helpBin']: self.helpBox.setBin(self['helpBin'], self['helpBinSort']) def helpTextUpdated(self): if self.helpBox and self.helpBox['text'] != self['helpText']: self.helpBox.destroy() self.createHelpBox() elif self['helpText']: self.createHelpBox() def setHelpPos(self): if self.helpBox: self.helpTextUpdated() def waitShowDetails(self, event): try: self['helpDelay'] except AttributeError: return None if not self.helpBox: self.createHelpBox() if self['helpDelay']: self.hideDetails() self.helpTaskName = 'helpInfoTask-%s' % self.getName() taskMgr.doMethodLater(self['helpDelay'], self.helpBox.show, self.helpTaskName, extraArgs=[]) else: self.helpBox.show() def hideDetails(self, event=None): if self.helpTaskName: taskMgr.remove(self.helpTaskName) if self.helpBox and not self.helpBox.isEmpty(): self.helpBox.hide() def setImage(self): DirectButton.setImage(self) if not self['baseImage']: self['baseImage'] = self['image'] def setSelected(self): if self['selected']: self['image'] = self['selectedImage'] else: self['image'] = self['baseImage'] def setPos(self, *args, **kw): DirectButton.setPos(self, *args, **args) def setX(self, *args, **kw): DirectButton.setX(self, *args, **args) def setY(self, *args, **kw): DirectButton.setY(self, *args, **args) def setZ(self, *args, **kw): DirectButton.setZ(self, *args, **args) def setState(self): DirectButton.setState(self) if self.helpWatcher: self.helpWatcher['state'] = self['state'] def removeNode(self): DirectButton.removeNode(self) if self.helpWatcher: self.helpWatcher.removeNode() def remove(self): DirectButton.remove(self) if self.helpWatcher: self.helpWatcher.remove() def detachNode(self): DirectButton.detachNode(self) if self.helpWatcher: self.helpWatcher.detachNode() def hide(self): DirectButton.hide(self) if self.helpWatcher: self.helpWatcher.hide() def show(self): DirectButton.show(self) if self.helpWatcher: self.helpWatcher.show() def stash(self): DirectButton.stash(self) if self.helpWatcher: self.helpWatcher.stash() def unstash(self): DirectButton.unstash(self) self.reparentTo(self.getParent(), sort=self['sortOrder']) if self.helpWatcher: self.helpWatcher.unstash() self.helpWatcher.reparentTo(self.helpWatcher.getParent(), sort=self.helpWatcher['sortOrder'])
class RepairGameButton(GuiButton): def __init__(self, parent, **kw): optiondefs = (('nodePath', None, None), ('image_scale', (1.0, 1.0, 1.0), None)) self.defineoptions(kw, optiondefs) GuiButton.__init__(self, parent) self.initialiseoptions(RepairGameButton) self.disabledStateNode = self.stateNodePath[3].getChild(0) self.downStateNode = self.stateNodePath[1].getChild(0) self.overStateNode = self.stateNodePath[2].getChild(0) self.inProgress = False self._initGUI() def _initGUI(self): self.setBin('fixed', 33) mainGui = loader.loadModel('models/gui/gui_main') gui = loader.loadModel('models/gui/toplevel_gui') self.checkMark = gui.find('**/generic_check') self.checkMark.reparentTo(self) self.checkMark.stash() self.checkMark.setScale(1.0) self.checkMark.setColorScale(0.0, 1.0, 0.0, 1.0) self.checkMark.setPos(0.02, 0.0, 0.02) self.checkMark.setBin('fixed', 34) self.skillRing = DialMeter(self, wantCover=False, dangerRatio=0.0, meterColor=Vec4(0.90000000000000002, 0.90000000000000002, 0.10000000000000001, 1.0), baseColor=Vec4(0.14999999999999999, 0.070000000000000007, 0.029999999999999999, 1.0), completeColor=Vec4(0.10000000000000001, 0.90000000000000002, 0.10000000000000001, 1.0)) self.skillRing.reparentTo(self) self.skillRing.setScale(0.28499999999999998, 0.29999999999999999, 0.26500000000000001) self.skillRing.setBin('fixed', 32) self.skillGlow = OnscreenImage(parent=self, image=mainGui.find('**/icon_glow'), scale=(1.0, 1.0, 1.0), color=(1.0, 1.0, 0.59999999999999998, 1.0)) self.glow = OnscreenImage(parent=self, image=mainGui.find('**/icon_glow'), scale=(1.0, 1.0, 1.0), color=(1.0, 1.0, 0.59999999999999998, 1.0)) self.skillGlow.reparentTo(self) self.skillGlow.setBin('fixed', 31) self.skillGlow.stash() self.pirateNameBox = None self.pirateNameLabel = None def showGlow(self): self.inProgress = False if self.pirateNameLabel == None and self.checkMark.isStashed(): self.skillGlow.unstash() def hideGlow(self): self.inProgress = True self.skillGlow.stash() def setProgress(self, percent): self.skillGlow.stash() ratio = max(0.0, percent / 100.0) if ratio >= 1.0: if self.checkMark.isStashed(): self.checkMark.unstash() elif not self.checkMark.isStashed(): self.checkMark.stash() if self.pirateNameLabel == None and not (self.inProgress): self.skillGlow.unstash() self.skillRing.update(ratio, 1.0) self.skillRing.wrtReparentTo(self.getParent()) self.reparentTo(self.getParent()) def updatePirateNameBox(self, pirateName): if self.pirateNameLabel != None and self.pirateNameLabel[ 'text'] != pirateName: if self.pirateNameBox: self.pirateNameBox.destroy() if self.pirateNameLabel: self.pirateNameLabel.destroy() self.pirateNameBox = None self.pirateNameLabel = None if pirateName != '': if self.pirateNameBox: pass if not (self.pirateNameLabel['text'] == pirateName): self.createPirateNameBox(pirateName) def createPirateNameBox(self, pirateName): self.pirateNameLabel = DirectLabel( relief=None, state=DGG.DISABLED, text=pirateName, text_align=TextNode.ACenter, text_scale=PiratesGuiGlobals.TextScaleMed, text_fg=PiratesGuiGlobals.TextFG1, text_wordwrap=12, textMayChange=0, sortOrder=91) self.pirateNameLabel.setBin('fixed', 33) height = self.pirateNameLabel.getHeight() width = self.pirateNameLabel.getWidth() + 0.050000000000000003 pos = [0.0, 0.0, height / 2 - 0.035000000000000003] fs = [ -(width / 2 + 0.01), width / 2 + 0.01, -(height / 2 + 0.014999999999999999), height / 2 + 0.014999999999999999 ] self.pirateNameBox = BorderFrame(parent=self, state=DGG.DISABLED, frameSize=(fs[0], fs[1], fs[2], fs[3]), modelName='general_frame_f', pos=(0.0, 0.0, 0.0)) self.pirateNameLabel.reparentTo(self.pirateNameBox) self.pirateNameLabel.setPos(pos[0], pos[1], pos[2]) self.pirateNameBox.setClipPlaneOff() pos = self.pirateNameBox.getPos(aspect2d) x = min(pos[0], base.a2dRight - width) z = max(pos[2], base.a2dBottom - height) self.pirateNameBox.setPos(aspect2d, x, 0, z - 0.17499999999999999) self.pirateNameBox.flattenLight() self.pirateNameBox.setBin('fixed', 32) self.pirateNameBox.reparentTo(self)
class RepairGameButton(GuiButton): def __init__(self, parent, **kw): optiondefs = (('nodePath', None, None), ('image_scale', (1.0, 1.0, 1.0), None)) self.defineoptions(kw, optiondefs) GuiButton.__init__(self, parent) self.initialiseoptions(RepairGameButton) self.disabledStateNode = self.stateNodePath[3].getChild(0) self.downStateNode = self.stateNodePath[1].getChild(0) self.overStateNode = self.stateNodePath[2].getChild(0) self.inProgress = False self._initGUI() def _initGUI(self): self.setBin('fixed', 33) mainGui = loader.loadModel('models/gui/gui_main') gui = loader.loadModel('models/gui/toplevel_gui') self.checkMark = gui.find('**/generic_check') self.checkMark.reparentTo(self) self.checkMark.stash() self.checkMark.setScale(1.0) self.checkMark.setColorScale(0.0, 1.0, 0.0, 1.0) self.checkMark.setPos(0.02, 0.0, 0.02) self.checkMark.setBin('fixed', 34) self.skillRing = DialMeter(self, wantCover = False, dangerRatio = 0.0, meterColor = Vec4(0.90000000000000002, 0.90000000000000002, 0.10000000000000001, 1.0), baseColor = Vec4(0.14999999999999999, 0.070000000000000007, 0.029999999999999999, 1.0), completeColor = Vec4(0.10000000000000001, 0.90000000000000002, 0.10000000000000001, 1.0)) self.skillRing.reparentTo(self) self.skillRing.setScale(0.28499999999999998, 0.29999999999999999, 0.26500000000000001) self.skillRing.setBin('fixed', 32) self.skillGlow = OnscreenImage(parent = self, image = mainGui.find('**/icon_glow'), scale = (1.0, 1.0, 1.0), color = (1.0, 1.0, 0.59999999999999998, 1.0)) self.glow = OnscreenImage(parent = self, image = mainGui.find('**/icon_glow'), scale = (1.0, 1.0, 1.0), color = (1.0, 1.0, 0.59999999999999998, 1.0)) self.skillGlow.reparentTo(self) self.skillGlow.setBin('fixed', 31) self.skillGlow.stash() self.pirateNameBox = None self.pirateNameLabel = None def showGlow(self): self.inProgress = False if self.pirateNameLabel == None and self.checkMark.isStashed(): self.skillGlow.unstash() def hideGlow(self): self.inProgress = True self.skillGlow.stash() def setProgress(self, percent): self.skillGlow.stash() ratio = max(0.0, percent / 100.0) if ratio >= 1.0: if self.checkMark.isStashed(): self.checkMark.unstash() elif not self.checkMark.isStashed(): self.checkMark.stash() if self.pirateNameLabel == None and not (self.inProgress): self.skillGlow.unstash() self.skillRing.update(ratio, 1.0) self.skillRing.wrtReparentTo(self.getParent()) self.reparentTo(self.getParent()) def updatePirateNameBox(self, pirateName): if self.pirateNameLabel != None and self.pirateNameLabel['text'] != pirateName: if self.pirateNameBox: self.pirateNameBox.destroy() if self.pirateNameLabel: self.pirateNameLabel.destroy() self.pirateNameBox = None self.pirateNameLabel = None if pirateName != '': if self.pirateNameBox: pass if not (self.pirateNameLabel['text'] == pirateName): self.createPirateNameBox(pirateName) def createPirateNameBox(self, pirateName): self.pirateNameLabel = DirectLabel(relief = None, state = DGG.DISABLED, text = pirateName, text_align = TextNode.ACenter, text_scale = PiratesGuiGlobals.TextScaleMed, text_fg = PiratesGuiGlobals.TextFG1, text_wordwrap = 12, textMayChange = 0, sortOrder = 91) self.pirateNameLabel.setBin('fixed', 33) height = self.pirateNameLabel.getHeight() width = self.pirateNameLabel.getWidth() + 0.050000000000000003 pos = [ 0.0, 0.0, height / 2 - 0.035000000000000003] fs = [ -(width / 2 + 0.01), width / 2 + 0.01, -(height / 2 + 0.014999999999999999), height / 2 + 0.014999999999999999] self.pirateNameBox = BorderFrame(parent = self, state = DGG.DISABLED, frameSize = (fs[0], fs[1], fs[2], fs[3]), modelName = 'general_frame_f', pos = (0.0, 0.0, 0.0)) self.pirateNameLabel.reparentTo(self.pirateNameBox) self.pirateNameLabel.setPos(pos[0], pos[1], pos[2]) self.pirateNameBox.setClipPlaneOff() pos = self.pirateNameBox.getPos(aspect2d) x = min(pos[0], base.a2dRight - width) z = max(pos[2], base.a2dBottom - height) self.pirateNameBox.setPos(aspect2d, x, 0, z - 0.17499999999999999) self.pirateNameBox.flattenLight() self.pirateNameBox.setBin('fixed', 32) self.pirateNameBox.reparentTo(self)