示例#1
0
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)
示例#2
0
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)
示例#3
0
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()
示例#4
0
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()