class Dart(PickableModel): def __init__(self, name, parent, defaultPos, color=Vec4(1), offset=0.0, *args, **kwargs): self.startScale = 0.075 self.highlightScale = 0.1 PickableModel.__init__(self, name, modelName='icon_objective_grey', scale=self.startScale, collisionIndex=17, modelPath='models/gui/compass_main', *args, **kwargs) self.defaultPos = defaultPos self.edgeMode = False self.helpBox = None self.helpLabel = None self.normalModeNode = self.attachNewNode('normal') self.normalModeNode.setColorScale(color) self.normalModeNode.setY(-(offset + 0.0075)) self.geom.instanceTo(self.normalModeNode) self.colNode = self.normalModeNode.attachNewNode(CollisionNode('cNode')) self.colNode.node().addSolid(CollisionSphere(Point3(0, 0, 0), 0.25)) self.colNode.setScale(1 / 20.0) self.colNode.node().setFromCollideMask(BitMask32.allOff()) self.colNode.node().setIntoCollideMask(BitMask32.bit(17)) self.setTag('dart', name) self.setPos(self.defaultPos) self.createHelpBox() questId = localAvatar.activeQuestId qs = localAvatar.getQuestById(questId) if qs: title = qs.getStatusText() self.setHelpLabel(title) return def toggleHelpText(self): if self.helpBox: if not self.helpBox.isHidden(): self.hideDetails() def createHelpBox(self): if not self.helpBox: self.helpLabel = DirectLabel(parent=aspect2d, relief=None, text='', text_align=TextNode.ALeft, text_scale=PiratesGuiGlobals.TextScaleSmall, text_fg=PiratesGuiGlobals.TextFG2, text_wordwrap=12, text_shadow=(0, 0, 0, 1), textMayChange=1, sortOrder=91) height = -(self.helpLabel.getHeight() + 0.01) width = max(0.25, self.helpLabel.getWidth() + 0.04) self.helpBox = BorderFrame(parent=aspect2d, state=DGG.DISABLED, frameSize=(-0.04, width, height, 0.05), pos=(0, 0, 0), sortOrder=90) self.helpLabel.reparentTo(self.helpBox) self.helpBox.hide() return def setHelpLabel(self, text): self.helpLabel['text'] = text self.helpLabel.resetFrameSize() height = -(self.helpLabel.getHeight() + 0.01) width = max(0.25, self.helpLabel.getWidth() + 0.04) self.helpBox['frameSize'] = (-0.04, width, height, 0.05) self.helpBox.resetFrameSize() def showDetails(self, pos): if self.helpLabel['text'] != '': self.helpBox.setPos(pos + Point3(self.helpBox['frameSize'][1] * 0.25, 0, 0)) self.helpBox.setBin('gui-popup', 0) self.helpBox.show() self.geom.setScale(self.highlightScale) def hideDetails(self): if self.helpBox: self.helpBox.hide() self.geom.setScale(self.startScale) def mouseOver(self, pos): self.showDetails(pos) def mouseLeft(self): self.hideDetails() def getDefaultPos(self): return self.defaultPos def setEdgeMode(self, edgeMode): self.edgeMode = edgeMode if self.edgeMode: self.edgeModeNode.unstash() else: self.edgeModeNode.stash() def setColorScale(self, *args, **kwargs): self.edgeModeNode.setColorScale(*args, **kwargs) self.normalModeNode.setColorScale(*args, **kwargs) def setScale(self, *args, **kwargs): self.normalModeNode.setScale(*args, **kwargs) def setPosition(self, worldPos, *args, **kwargs): NodePath.setPos(self, *args, **kwargs) if self.edgeMode: self.edgeModeNode.setPos(*args, **kwargs)
class Dart(PickableModel): def __init__(self, name, parent, defaultPos, color = Vec4(1), offset = 0.0, *args, **kwargs): self.startScale = 0.074999999999999997 self.highlightScale = 0.10000000000000001 PickableModel.__init__(self, name, modelName = 'icon_objective_grey', scale = self.startScale, collisionIndex = 17, modelPath = 'models/gui/compass_main', *args, **kwargs) self.defaultPos = defaultPos self.edgeMode = False self.helpBox = None self.helpLabel = None self.normalModeNode = self.attachNewNode('normal') self.normalModeNode.setColorScale(color) self.normalModeNode.setY(-(offset + 0.0074999999999999997)) self.geom.instanceTo(self.normalModeNode) self.colNode = self.normalModeNode.attachNewNode(CollisionNode('cNode')) self.colNode.node().addSolid(CollisionSphere(Point3(0, 0, 0), 0.25)) self.colNode.setScale(1 / 20.0) self.colNode.node().setFromCollideMask(BitMask32.allOff()) self.colNode.node().setIntoCollideMask(BitMask32.bit(17)) self.setTag('dart', name) self.setPos(self.defaultPos) self.createHelpBox() questId = localAvatar.activeQuestId qs = localAvatar.getQuestById(questId) if qs: title = qs.getStatusText() self.setHelpLabel(title) def toggleHelpText(self): if self.helpBox: if not self.helpBox.isHidden(): self.hideDetails() def createHelpBox(self): if not self.helpBox: self.helpLabel = DirectLabel(parent = aspect2d, relief = None, text = '', text_align = TextNode.ALeft, text_scale = PiratesGuiGlobals.TextScaleSmall, text_fg = PiratesGuiGlobals.TextFG2, text_wordwrap = 12, text_shadow = (0, 0, 0, 1), textMayChange = 1, sortOrder = 91) height = -(self.helpLabel.getHeight() + 0.01) width = max(0.25, self.helpLabel.getWidth() + 0.040000000000000001) self.helpBox = BorderFrame(parent = aspect2d, state = DGG.DISABLED, frameSize = (-0.040000000000000001, width, height, 0.050000000000000003), pos = (0, 0, 0), sortOrder = 90) self.helpLabel.reparentTo(self.helpBox) self.helpBox.hide() def setHelpLabel(self, text): self.helpLabel['text'] = text self.helpLabel.resetFrameSize() height = -(self.helpLabel.getHeight() + 0.01) width = max(0.25, self.helpLabel.getWidth() + 0.040000000000000001) self.helpBox['frameSize'] = (-0.040000000000000001, width, height, 0.050000000000000003) self.helpBox.resetFrameSize() def showDetails(self, pos): if self.helpLabel['text'] != '': self.helpBox.setPos(pos + Point3(self.helpBox['frameSize'][1] * 0.25, 0, 0)) self.helpBox.setBin('gui-popup', 0) self.helpBox.show() self.geom.setScale(self.highlightScale) def hideDetails(self): if self.helpBox: self.helpBox.hide() self.geom.setScale(self.startScale) def mouseOver(self, pos): self.showDetails(pos) def mouseLeft(self): self.hideDetails() def getDefaultPos(self): return self.defaultPos def setEdgeMode(self, edgeMode): self.edgeMode = edgeMode if self.edgeMode: self.edgeModeNode.unstash() else: self.edgeModeNode.stash() def setColorScale(self, *args, **kwargs): self.edgeModeNode.setColorScale(*args, **kwargs) self.normalModeNode.setColorScale(*args, **kwargs) def setScale(self, *args, **kwargs): self.normalModeNode.setScale(*args, **kwargs) def setPosition(self, worldPos, *args, **kwargs): NodePath.setPos(self, *args, **kwargs) if self.edgeMode: self.edgeModeNode.setPos(*args, **kwargs)
class TextIsland(Island): def __init__(self, name, islandUid, modelName, isTeleportIsland, nodePath=NodePath(), offset=0.0, scale=1.0, collisionIndex=17, stencilId=0, *args, **kwargs): Island.__init__(self, name, islandUid, modelName, isTeleportIsland, scale, collisionIndex, stencilId, *args, **kwargs) pencil = self.geom.find('**/pencil*') if not pencil.isEmpty(): pass self.name = name self.helpBox = None self.helpLabel = None self.textScaleNode = self.attachNewNode('textScale') def formatName(name, lineWidth): tokens = name.split() out = '' count = 0 for token in tokens: if count + len(token) < lineWidth: count += len(token) + 1 out = '%s %s' % (out, token) else: count = len(token) + 1 out = '%s\n%s' % (out, token) out.strip() return '\x01smallCaps\x01%s\x02' % (out,) formattedName = formatName(self.name, 10) self.text = Text(name + '-text', nodePath, offset, formattedName, stencilId) self.text.reparentTo(self.textScaleNode) self.text.setBin('background', 2) if self.getNetTag('islandUid') == '1160614528.73sdnaik': mesh = self.geom t, T = self.text.getTightBounds() i, I = mesh.getTightBounds() else: mesh = self.geom.find('**/top_mesh') t, T = self.text.getTightBounds() if not mesh.isEmpty(): i, I = mesh.getTightBounds() else: i, I = self.geom.getTightBounds() i *= self.geom.getScale()[0] I *= self.geom.getScale()[0] self.textScaleNode.setPos(0, (i[1] - I[1]) / 2 - T[2], 0.001) compassGui = loader.loadModel('models/gui/compass_gui') topGui = loader.loadModel('models/gui/toplevel_gui') icons = loader.loadModel('models/textureCards/icons') self.button = self.text.attachNewNode('button') bg = topGui.find('**/treasure_w_b_slot_empty') bg.setScale(0.14) bg.reparentTo(self.button) buttonPos = Point3(t[0] - 0.022, 0, (t[2] + T[2]) / 2.0) self.button.flattenStrong() self.button.setPos(buttonPos) self.button.setColorScaleOff() self.button.hide() self.teleportIconDisabled = compassGui.find('**/compass_icon_objective_grey') self.teleportIconDisabled.setScale(0.14) self.teleportIconDisabled.reparentTo(self.button) self.teleportIconEnabled = compassGui.find('**/compass_icon_objective_green') self.teleportIconEnabled.setScale(0.14) self.teleportIconEnabled.reparentTo(self.button) self.manIcon = icons.find('**/icon_stickman') self.manIcon.setScale(0.035) self.manIcon.reparentTo(self.button) t, T = self.text.getTightBounds() p0 = VBase3(t[0], 0, t[2]) p1 = VBase3(T[0], 0, t[2]) p2 = VBase3(T[0], 0, T[2]) p3 = VBase3(t[0], 0, T[2]) self.colNode = self.text.attachNewNode(CollisionNode('cNode-' + name)) self.colNode.node().addSolid(CollisionPolygon(p0, p1, p2, p3)) self.colNode.node().setFromCollideMask(BitMask32.allOff()) self.colNode.node().setIntoCollideMask(BitMask32.bit(collisionIndex)) self.createHelpBox() self.updateState() return def updateZoom(self, zoom): self.textScaleNode.setScale(1 - zoom / 1.5) def setAsCurrentIsland(self, isCurrent): Island.setAsCurrentIsland(self, isCurrent) self.updateState() def setAsReturnIsland(self, isReturn): Island.setAsReturnIsland(self, isReturn) self.updateState() def setAsPortOfCall(self, isPortOfCall): Island.setAsPortOfCall(self, isPortOfCall) self.updateState() def setHasTeleportToken(self, hasToken): Island.setHasTeleportToken(self, hasToken) self.updateState() def updateState(self, mouseOver=False): if not hasattr(self, 'button'): return self.button.hide() self.teleportIconEnabled.hide() self.teleportIconDisabled.hide() if self.isCurrentIsland(): self.manIcon.show() self.button.show() if self.isTeleportIsland(): self.button.show() self.manIcon.hide() self.teleportIconDisabled.show() self.teleportIconDisabled.clearColorScale() self.button.setColorScale(0.5, 0.5, 0.5, 1) self.setHelpLabel(PLocalizer.MapNeedsTeleportToken) if self.getCanTeleportTo(): self.button.show() self.button.clearColorScale() self.teleportIconDisabled.hide() self.teleportIconEnabled.show() self.text.setBold(1) if not self.isCurrentIsland() and self.isReturnIsland(): self.setHelpLabel(PLocalizer.MapCanTeleportReturn) elif not self.isCurrentIsland() and self.isPortOfCall(): self.setHelpLabel(PLocalizer.MapCanTeleportPortOfCall) else: self.setHelpLabel(PLocalizer.MapCanTeleport) if mouseOver: self.geom.setColorScale(0.5, 1, 0.5, 1) if self.isCurrentIsland() and not mouseOver: self.button.show() self.button.clearColorScale() self.button.setScale(1) self.text.setBold(1) self.teleportIconEnabled.hide() self.teleportIconDisabled.hide() self.manIcon.show() if not self.isTeleportIsland(): self.setHelpLabel(PLocalizer.MapCurrentIsland) if self.isCurrentIsland() and mouseOver: self.button.show() self.button.clearColorScale() self.button.setScale(1) self.text.setBold(1) self.teleportIconEnabled.show() self.teleportIconDisabled.hide() self.manIcon.hide() if not self.isCurrentIsland() and not mouseOver: self.setHelpLabel('') self.text.setBold(0) self.manIcon.hide() def mouseOver(self, pos): self.updateState(mouseOver=True) self.showDetails(pos) def mouseLeft(self): self.geom.clearColorScale() self.hideDetails() self.updateState(mouseOver=False) def createHelpBox(self): if not self.helpBox: self.helpLabel = DirectLabel(parent=aspect2d, relief=None, text='', text_align=TextNode.ALeft, text_scale=PiratesGuiGlobals.TextScaleSmall, text_fg=PiratesGuiGlobals.TextFG2, text_wordwrap=12, text_shadow=(0, 0, 0, 1), textMayChange=1, sortOrder=91) height = -(self.helpLabel.getHeight() + 0.01) width = max(0.25, self.helpLabel.getWidth() + 0.04) self.helpBox = BorderFrame(parent=aspect2d, state=DGG.DISABLED, frameSize=(-0.04, width, height, 0.05), pos=(0, 0, 0), sortOrder=90) self.helpLabel.reparentTo(self.helpBox) self.helpBox.hide() return def setHelpLabel(self, text): self.helpLabel['text'] = text self.helpLabel.resetFrameSize() height = -(self.helpLabel.getHeight() + 0.01) width = max(0.25, self.helpLabel.getWidth() + 0.04) self.helpBox['frameSize'] = (-0.04, width, height, 0.05) self.helpBox.resetFrameSize() def showDetails(self, pos): if self.helpLabel['text'] != '': self.helpBox.setPos(pos - Point3(self.helpBox['frameSize'][1] * 1.25, 0, 0)) self.helpBox.setBin('gui-popup', 0) self.helpBox.show() def hideDetails(self): if self.helpBox: self.helpBox.hide()
class TextIsland(Island): def __init__(self, name, islandUid, modelName, isTeleportIsland, nodePath = NodePath(), offset = 0.0, scale = 1.0, collisionIndex = 17, stencilId = 0, *args, **kwargs): Island.__init__(self, name, islandUid, modelName, isTeleportIsland, scale, collisionIndex, stencilId, *args, **kwargs) pencil = self.geom.find('**/pencil*') if not pencil.isEmpty(): pass 1 self.name = name self.helpBox = None self.helpLabel = None self.textScaleNode = self.attachNewNode('textScale') def formatName(name, lineWidth): tokens = name.split() out = '' count = 0 for token in tokens: if count + len(token) < lineWidth: count += len(token) + 1 out = '%s %s' % (out, token) continue count = len(token) + 1 out = '%s\n%s' % (out, token) out.strip() return 'smallCaps%s' % (out,) formattedName = formatName(self.name, 10) self.text = Text(name + '-text', nodePath, offset, formattedName, stencilId) self.text.reparentTo(self.textScaleNode) self.text.setBin('background', 2) if self.getNetTag('islandUid') == '1160614528.73sdnaik': mesh = self.geom (t, T) = self.text.getTightBounds() (i, I) = mesh.getTightBounds() else: mesh = self.geom.find('**/top_mesh') (t, T) = self.text.getTightBounds() if not mesh.isEmpty(): (i, I) = mesh.getTightBounds() else: (i, I) = self.geom.getTightBounds() i *= self.geom.getScale()[0] I *= self.geom.getScale()[0] self.textScaleNode.setPos(0, (i[1] - I[1]) / 2 - T[2], 0.001) compassGui = loader.loadModel('models/gui/compass_gui') topGui = loader.loadModel('models/gui/toplevel_gui') icons = loader.loadModel('models/textureCards/icons') self.button = self.text.attachNewNode('button') bg = topGui.find('**/treasure_w_b_slot_empty') bg.setScale(0.14000000000000001) bg.reparentTo(self.button) buttonPos = Point3(t[0] - 0.021999999999999999, 0, (t[2] + T[2]) / 2.0) self.button.flattenStrong() self.button.setPos(buttonPos) self.button.setColorScaleOff() self.button.hide() self.teleportIconDisabled = compassGui.find('**/compass_icon_objective_grey') self.teleportIconDisabled.setScale(0.14000000000000001) self.teleportIconDisabled.reparentTo(self.button) self.teleportIconEnabled = compassGui.find('**/compass_icon_objective_green') self.teleportIconEnabled.setScale(0.14000000000000001) self.teleportIconEnabled.reparentTo(self.button) self.manIcon = icons.find('**/icon_stickman') self.manIcon.setScale(0.035000000000000003) self.manIcon.reparentTo(self.button) (t, T) = self.text.getTightBounds() p0 = VBase3(t[0], 0, t[2]) p1 = VBase3(T[0], 0, t[2]) p2 = VBase3(T[0], 0, T[2]) p3 = VBase3(t[0], 0, T[2]) self.colNode = self.text.attachNewNode(CollisionNode('cNode-' + name)) self.colNode.node().addSolid(CollisionPolygon(p0, p1, p2, p3)) self.colNode.node().setFromCollideMask(BitMask32.allOff()) self.colNode.node().setIntoCollideMask(BitMask32.bit(collisionIndex)) self.createHelpBox() self.updateState() def updateZoom(self, zoom): self.textScaleNode.setScale(1 - zoom / 1.5) def setAsCurrentIsland(self, isCurrent): Island.setAsCurrentIsland(self, isCurrent) self.updateState() def setAsReturnIsland(self, isReturn): Island.setAsReturnIsland(self, isReturn) self.updateState() def setAsPortOfCall(self, isPortOfCall): Island.setAsPortOfCall(self, isPortOfCall) self.updateState() def setHasTeleportToken(self, hasToken): Island.setHasTeleportToken(self, hasToken) self.updateState() def updateState(self, mouseOver = False): if not hasattr(self, 'button'): return None self.button.hide() self.teleportIconEnabled.hide() self.teleportIconDisabled.hide() if self.isCurrentIsland(): self.manIcon.show() self.button.show() if self.isTeleportIsland(): self.button.show() self.manIcon.hide() self.teleportIconDisabled.show() self.teleportIconDisabled.clearColorScale() self.button.setColorScale(0.5, 0.5, 0.5, 1) self.setHelpLabel(PLocalizer.MapNeedsTeleportToken) if self.getCanTeleportTo(): self.button.show() self.button.clearColorScale() self.teleportIconDisabled.hide() self.teleportIconEnabled.show() self.text.setBold(1) if not self.isCurrentIsland() and self.isReturnIsland(): self.setHelpLabel(PLocalizer.MapCanTeleportReturn) elif not self.isCurrentIsland() and self.isPortOfCall(): self.setHelpLabel(PLocalizer.MapCanTeleportPortOfCall) else: self.setHelpLabel(PLocalizer.MapCanTeleport) if mouseOver: self.geom.setColorScale(0.5, 1, 0.5, 1) if self.isCurrentIsland() and not mouseOver: self.button.show() self.button.clearColorScale() self.button.setScale(1) self.text.setBold(1) self.teleportIconEnabled.hide() self.teleportIconDisabled.hide() self.manIcon.show() if not self.isTeleportIsland(): self.setHelpLabel(PLocalizer.MapCurrentIsland) if self.isCurrentIsland() and mouseOver: self.button.show() self.button.clearColorScale() self.button.setScale(1) self.text.setBold(1) self.teleportIconEnabled.show() self.teleportIconDisabled.hide() self.manIcon.hide() if not self.isCurrentIsland() and not mouseOver: self.setHelpLabel('') self.text.setBold(0) self.manIcon.hide() def mouseOver(self, pos): self.updateState(mouseOver = True) self.showDetails(pos) def mouseLeft(self): self.geom.clearColorScale() self.hideDetails() self.updateState(mouseOver = False) def createHelpBox(self): if not self.helpBox: self.helpLabel = DirectLabel(parent = aspect2d, relief = None, text = '', text_align = TextNode.ALeft, text_scale = PiratesGuiGlobals.TextScaleSmall, text_fg = PiratesGuiGlobals.TextFG2, text_wordwrap = 12, text_shadow = (0, 0, 0, 1), textMayChange = 1, sortOrder = 91) height = -(self.helpLabel.getHeight() + 0.01) width = max(0.25, self.helpLabel.getWidth() + 0.040000000000000001) self.helpBox = BorderFrame(parent = aspect2d, state = DGG.DISABLED, frameSize = (-0.040000000000000001, width, height, 0.050000000000000003), pos = (0, 0, 0), sortOrder = 90) self.helpLabel.reparentTo(self.helpBox) self.helpBox.hide() def setHelpLabel(self, text): self.helpLabel['text'] = text self.helpLabel.resetFrameSize() height = -(self.helpLabel.getHeight() + 0.01) width = max(0.25, self.helpLabel.getWidth() + 0.040000000000000001) self.helpBox['frameSize'] = (-0.040000000000000001, width, height, 0.050000000000000003) self.helpBox.resetFrameSize() def showDetails(self, pos): if self.helpLabel['text'] != '': self.helpBox.setPos(pos - Point3(self.helpBox['frameSize'][1] * 1.25, 0, 0)) self.helpBox.setBin('gui-popup', 0) self.helpBox.show() def hideDetails(self): if self.helpBox: self.helpBox.hide()