class MinimapShop(MinimapObject): SORT = 2 SIGN_DICT = {'blacksmith': '**/shopCoin_blacksmith','shipwright': '**/shopCoin_shipwright','gunsmith': '**/shopCoin_gunsmith','weapons': '**/shopCoin_gunsmith','tailor': '**/shopCoin_tailor','barber': '**/shopCoin_barber','jeweler': '**/shopCoin_jeweler','tattoo': '**/shopCoin_tattoo','voodoo': '**/shopCoin_voodoo','gypsy': '**/shopCoin_voodoo','tavern': '**/shopCoin_tavern','fishmaster': '**/shopCoin_fishing','cannonmaster': '**/shopCoin_cannon','stowaway': '**/shopCoin_stowaway','catalogrep': '**/shopCoin_catalog'} SIGNS = {} HELP_DICT = {'blacksmith': PLocalizer.ShopBlacksmith,'shipwright': PLocalizer.ShopShipwright,'gunsmith': PLocalizer.ShopGunsmith,'weapons': PLocalizer.ShopGunsmith,'tailor': PLocalizer.ShopTailor,'barber': PLocalizer.ShopBarber,'jeweler': PLocalizer.ShopJewelry,'tattoo': PLocalizer.ShopTattoo,'voodoo': PLocalizer.ShopGypsy,'gypsy': PLocalizer.ShopGypsy,'tavern': PLocalizer.ShopTavern,'fishmaster': PLocalizer.ShopFishmaster,'cannonmaster': PLocalizer.ShopCannoneer,'stowaway': PLocalizer.ShopStowaway,'catalogrep': PLocalizer.ShopCatalogRep} @classmethod def loadSigns(cls): if not MinimapShop.SIGNS: coins = loader.loadModel('models/textureCards/shopCoins') for coin in coins.findAllMatches('**/shopCoin_*'): coin.setP(-90) coin.flattenStrong() for pattern, signName in MinimapShop.SIGN_DICT.iteritems(): MinimapShop.SIGNS[pattern] = coins.find(signName) @classmethod def getShopType(cls, shopString): for pattern in MinimapShop.SIGN_DICT: if pattern in shopString: return pattern return None def __init__(self, uid, worldNode, shopType): self.loadSigns() worldNode.setHpr(0, 0, 0) MinimapObject.__init__(self, uid, worldNode, MinimapShop.SIGNS[shopType]) self.shopType = shopType self.button = None return def _addedToMap(self, map): self.mapGeom.setScale(aspect2d, 0.06) overlayNode = map.getOverlayNode() transform = self.mapGeom.getTransform(overlayNode) self.button = GuiButton(parent=overlayNode, state=DGG.NORMAL, image=self.mapGeom, pos=transform.getPos(), image_hpr=transform.getHpr(), image_scale=transform.getScale(), helpText=MinimapShop.HELP_DICT[self.shopType], helpPos=(-0.27, 0, 0.07), helpDelay=0, helpOpaque=True, sortOrder=MinimapShop.SORT) self.button.setAlphaScale(1, 1) self.mapGeom.detachNode() def _removedFromMap(self, map): if self.button: self.button.destroy() self.button = None return def _updateOnMap(self, map): MinimapObject._updateOnMap(self, map) if self.button: if base.localAvatar.guiMgr.invasionScoreboard or base.localAvatar.isInInvasion(): self.button.hide() else: self.button.show()
class PotionInfo(DirectFrame): def __init__(self, potionGame): self.potionGame = potionGame DirectFrame.__init__(self, parent = potionGame.dialogs, relief = None) self.setPos((-0.5, 0, 0.074999999999999997)) guiAssets = loader.loadModel('models/minigames/pir_m_gui_pot_textureCard') parch = guiAssets.find('**/pir_t_gui_pot_potionIngredients') parch.setScale(3.4500000000000002, 1, 3.4500000000000002) parch.setPos(0.5, 0, -0.02) self.background = parch.copyTo(self) self.bQuit = GuiButton(image = (guiAssets.find('**/pir_t_gui_pot_exitIngredients'), guiAssets.find('**/pir_t_gui_pot_exitIngredientsOn'), guiAssets.find('**/pir_t_gui_pot_exitIngredientsOn'), guiAssets.find('**/pir_t_gui_pot_exitIngredients')), scale = (0.29999999999999999, 0.29999999999999999, 0.29999999999999999), command = self.quit) self.bQuit.reparentTo(self) self.bQuit.setPos(1.673, 0, 0.76700000000000002) self.messageText = PLocalizer.PotionGui['InfoText'] self.message = DirectLabel(parent = self, relief = None, text = self.messageText, text_scale = PiratesGuiGlobals.TextScaleTitleSmall, text_align = TextNode.ARight, text_fg = PotionGlobals.TextColor, text_shadow = None, pos = (-0.17000000000000001, 0, 0.71999999999999997), textMayChange = 0) self.pieces = [] self.pieceLabels = [] for color in range(6): for level in range(6): piece = PotionBoardPiece(self, color, level + 1) piece.setPiecePosition(level * 0.112 - 0.27700000000000002, 0.17000000000000001 - color * 0.070900000000000005) piece.background.setDepthTest(False) piece.background.setDepthWrite(False) piece.setScale(0.34999999999999998) self.pieces.append(piece) piecelabel = DirectLabel(parent = self, relief = None, text = PLocalizer.PotionIngredients[color][level], text_scale = PiratesGuiGlobals.TextScaleMed, text_align = TextNode.ACenter, text_fg = PotionGlobals.TextColor, text_shadow = None, pos = (level * 0.38600000000000001 - 0.45200000000000001, 0, 0.438 - color * 0.245), textMayChange = 0) self.message = DirectLabel(parent = self, relief = None, text = PLocalizer.PotionIngredients[color][level], text_scale = PiratesGuiGlobals.TextScaleMed, text_align = TextNode.ACenter, text_fg = PotionGlobals.TextColor, text_shadow = None, pos = (level * 0.38600000000000001 - 0.45200000000000001, 0, 0.438 - color * 0.245), textMayChange = 0) self.pieceLabels.append(piecelabel) guiAssets.removeNode() def destroy(self): self.bQuit.destroy() DirectFrame.destroy(self) def show(self): if self.potionGame.closeCurrentDialog is not None: self.potionGame.closeCurrentDialog() self.potionGame.closeCurrentDialog = self.cleanUp self.potionGame.disableButtons() self.unstash() def toggle(self): if self.isStashed(): self.show() else: self.quit() def cleanUp(self): self.potionGame.closeCurrentDialog = None self.potionGame.enableButtons() self.stash() def quit(self): self.cleanUp() if self.potionGame.gameFSM.gameStarted: self.potionGame.gameFSM.request('Eval') else: self.potionGame.gameFSM.request('RecipeSelect')
def destroy(self): GuiButton.destroy(self)
class RepairGameGUI(DirectFrame): completeSound = None guiDownSound = None guiUpSound = None shipRepairMusic = None def __init__(self, repairGame): DirectFrame.__init__(self, parent=base.a2dBackground, relief=None) self.repairGame = repairGame base.loadingScreen.beginStep('Sound', 1, 10) self._initSound() base.loadingScreen.endStep('Sound') base.loadingScreen.beginStep('GUI', 1, 43) self._initGUI() base.loadingScreen.endStep('GUI') self.accept('clientLogout', self.handleExitGame) if base.localAvatar.guiMgr.seaChestActive: base.localAvatar.guiMgr.hideSeaChest() if base.localAvatar.guiMgr.minimap: base.localAvatar.guiMgr.hideMinimap() self.accept('seachestOpened', self.handleExitGame) self.accept('avatarDetailsOpened', self.handleExitGame) self.accept('minimapOpened', self.handleExitGame) self.setBin('fixed', 30) self.setZ(-0.20000000000000001) base.loadingScreen.beginStep('Intervals') self._initIntervals() base.loadingScreen.endStep('Intervals') def _initSound(self): if not self.completeSound: RepairGameGUI.completeSound = loadSfx( SoundGlobals.SFX_MINIGAME_REPAIR_GENERAL_CYCLECOMPLETE) RepairGameGUI.guiDownSound = loadSfx( SoundGlobals.SFX_MINIGAME_REPAIR_GENERAL_GUIDOWN) RepairGameGUI.guiUpSound = loadSfx( SoundGlobals.SFX_MINIGAME_REPAIR_GENERAL_GUIUP) RepairGameGUI.guiDownSound.setVolume(0.5) RepairGameGUI.guiUpSound.setVolume(0.5) RepairGameGUI.shipRepairMusic = [ SoundGlobals.MUSIC_PERFORMERS_02, SoundGlobals.MUSIC_PERFORMERS_07, SoundGlobals.MUSIC_PERFORMERS_09 ] base.musicMgr.request(random.choice(self.shipRepairMusic), priority=1, volume=0.5) def _initGUI(self): self.model = loader.loadModel('models/gui/pir_m_gui_srp_main') self.repairGamePicker = RepairGamePickerGUI( self, self.repairGame, self.model.find('**/group_picker')) self.staticElements = GUIFactory.generateStaticElements( self.model.getChild(0), self) self.textElements = {} self.textElements['title'] = DirectLabel( text='', text_fg=(1.0, 1.0, 1.0, 1.0), text_shadow=(0.0, 0.0, 0.0, 1.0), scale=(0.087499999999999994, 0.087499999999999994, 0.087499999999999994), pos=(0.0, 0.0, 0.91000000000000003), relief=None, textMayChange=1, text_font=PiratesGlobals.getPirateFont(), parent=self.staticElements['bg']) self.textElements['tutorial'] = DirectLabel( text='', text_fg=(1.0, 1.0, 1.0, 1.0), text_shadow=(0.0, 0.0, 0.0, 1.0), text_wordwrap=14, scale=(0.044999999999999998, 0.044999999999999998, 0.044999999999999998), pos=(0.0, 0.0, 0.79500000000000004), relief=None, textMayChange=1, text_font=PiratesGlobals.getPirateFont(), parent=self.staticElements['bg']) self.textElements['level'] = DirectLabel( text='', text_fg=(1.0, 1.0, 1.0, 1.0), scale=(0.052499999999999998, 0.052499999999999998, 0.052499999999999998), pos=(0.315, 0.0, 0.69999999999999996), relief=None, textMayChange=1, text_align=TextNode.ARight, text_font=PiratesGlobals.getPirateFont(), parent=self.staticElements['bg']) self.textElements['level'].stash() self.textElements['idleMessage'] = DirectLabel( text='', text_fg=(1.0, 1.0, 1.0, 1.0), text_shadow=(0.0, 0.0, 0.0, 1.0), text_wordwrap=15, scale=(0.087499999999999994, 0.087499999999999994, 0.087499999999999994), pos=(0.0, 0.0, 0.0), relief=None, textMayChange=1, text_font=PiratesGlobals.getPirateFont(), parent=self.staticElements['bg']) self.textElements['cycleCompleteMessage'] = DirectLabel( text='', text_fg=(1.0, 1.0, 1.0, 1.0), text_shadow=(0.0, 0.0, 0.0, 1.0), text_wordwrap=20, scale=(0.087499999999999994, 0.087499999999999994, 0.087499999999999994), pos=(0.0, 0.0, 0.0), relief=None, textMayChange=1, text_font=PiratesGlobals.getPirateFont(), parent=self.staticElements['bg']) self.closeButton = GuiButton( image=(self.model.find('**/esc_button/idle'), self.model.find('**/esc_button/over'), self.model.find('**/esc_button/over'), self.model.find('**/esc_button/idle')), image_scale=(0.75, 0.75, 0.75), image_pos=(0.074999999999999997, 0, 0.080000000000000002), hotkeys=['Escape'], hotkeyLabel=PLocalizer.Minigame_Repair_Leave_Game_Text, pos=(-0.40000000000000002, 0.0, 0.01), parent=base.a2dBottomRight, command=self.handleExitGame) self.closeButton.setBin('background', -90) self.model.removeNode() del self.model def setPickerOutroStartPos(self): self.pickerOutroLerp.setStartPos(self.repairGamePicker.getPos()) def setBGOutroStartPos(self): self.bgOutroLerp.setStartPos(self.staticElements['bg'].getPos()) def _initIntervals(self): self.bgIntroLerp = LerpPosInterval( self.staticElements['bg'], duration=1.0, pos=self.staticElements['bg'].getPos(), startPos=(0.0, 0.0, 2.0)) self.pickerIntroLerp = LerpPosInterval( self.repairGamePicker, duration=1.0, pos=self.repairGamePicker.getPos(), startPos=(0.0, 0.0, -1.0)) self.introSequence = Sequence( Func(self.repairGamePicker.setEnabled, False), Parallel(Sequence(Wait(0.25), Func(self.guiDownSound.play)), self.bgIntroLerp, self.pickerIntroLerp), Func(self.repairGamePicker.setEnabled, True), Func(self.repairGame.gameFSM.request, 'Idle'), name='RepairGame.introSequence') self.pickerOutroLerp = LerpPosInterval( self.repairGamePicker, duration=1.0, startPos=self.repairGamePicker.getPos(), pos=(0.0, 0.0, -1.0)) self.bgOutroLerp = LerpPosInterval( self.staticElements['bg'], duration=1.0, startPos=self.repairGamePicker.getPos(), pos=(0.0, 0.0, 2.0)) self.outroSequence = Sequence( Func(self.repairGamePicker.stashTab), Func(self.closeButton.stash), Parallel(Func(self.guiUpSound.play), Func(self.setPickerOutroStartPos), Func(self.setBGOutroStartPos), self.pickerOutroLerp, self.bgOutroLerp), Func(self.repairGame.cleanup), name='RepairGame.outroSequence') self.cycleCompleteSequence = Sequence( Func(self.showCycleCompleteMessage), Func(self.repairGamePicker.stashTab), Wait(self.getCycleCompleteWaitTime()), Func(self.completeSound.play), Func(self.hideCycleCompleteMessage), LerpPosInterval(self.repairGamePicker, duration=0.5, pos=self.repairGamePicker.getPos() - (0, 0, 1.0)), Func(self.repairGame.resetMincroGameProgress), LerpPosInterval(self.repairGamePicker, duration=0.5, pos=self.repairGamePicker.getPos()), Func(self.repairGame.gameFSM.request, 'Idle'), name='RepairGame.cycleCompleteSequence') self.shakeSequence = Sequence(name='RepairGameGUI.shakeSequence') def handleExitGame(self): messenger.send('escape') def getCycleCompleteWaitTime(self): if self.repairGame.location == ON_LAND: return 5.5 else: return 1.5 def showCycleCompleteMessage(self): if self.repairGame.location == ON_LAND: tpMgr = TextPropertiesManager.getGlobalPtr() tpGold = TextProperties() tpGold.setTextColor(0.97999999999999998, 0.76000000000000001, 0, 1) tpMgr.setProperties('gold', tpGold) completionTime = self.repairGame.getCycleCompleteTime() seconds = completionTime % 60 minutes = int(completionTime / 60.0) if minutes == 0: time = '\x1gold\x1%i %s\x2' % ( seconds, PLocalizer.Minigame_Repair_Seconds) elif seconds < 10: time = '\x1gold\x1%i:0%i %s\x2' % ( minutes, seconds, PLocalizer.Minigame_Repair_Minutes) else: time = '\x1gold\x1%i:%i %s\x2' % ( minutes, seconds, PLocalizer.Minigame_Repair_Minutes) goldAmount = self.repairGame.getReward(localAvatar.doId) goldBonus = self.repairGame.getGoldBonus() if goldBonus: reward = PLocalizer.Minigame_Repair_GoldBonus % ( str(goldAmount), str(goldBonus)) else: reward = PLocalizer.Minigame_Repair_Gold % str(goldAmount) text = PLocalizer.Minigame_Repair_BenchOutro % (time, reward) self.textElements['cycleCompleteMessage'].setPos( 0.0, 0.0, 0.34999999999999998) else: text = PLocalizer.Minigame_Repair_ShipOutro self.textElements['cycleCompleteMessage'].setPos( 0.0, 0.0, 0.14999999999999999) self.textElements['cycleCompleteMessage']['text'] = text self.textElements['cycleCompleteMessage'].setText() def hideCycleCompleteMessage(self): self.textElements['cycleCompleteMessage']['text'] = '' self.textElements['cycleCompleteMessage'].setText() def showIdleMessage(self): if self.repairGame.location == ON_LAND: text = PLocalizer.Minigame_Repair_BenchIntro self.textElements['idleMessage'].setPos(0.0, 0.0, 0.34999999999999998) else: text = PLocalizer.Minigame_Repair_ShipIntro self.textElements['idleMessage'].setPos(0.0, 0.0, 0.17499999999999999) self.textElements['idleMessage']['text'] = text self.textElements['idleMessage'].setText() def hideIdleMessage(self): self.textElements['idleMessage']['text'] = '' self.textElements['idleMessage'].setText() def onShipDamaged(self, wasGrapeshot=False): if wasGrapeshot: shakeDelta = 0.050000000000000003 randomX = random.random() * 2 * shakeDelta - shakeDelta randomZ = random.random() * 2 * shakeDelta - shakeDelta if self.shakeSequence.isPlaying(): self.shakeSequence.finish() self.shakeSequence = Parallel( Sequence( LerpColorScaleInterval( self, duration=0.5, colorScale=(1.0, 0.20000000000000001, 0.20000000000000001, 1.0)), LerpColorScaleInterval( self, duration=RepairGlobals.Common.guiShakeCooldownTime / 2.0, colorScale=(1.0, 1.0, 1.0, 1.0))), Sequence( LerpPosInterval(self, duration=0.10000000000000001, pos=self.getPos() - (randomX, 0.0, randomZ)), LerpPosInterval(self, duration=0.20000000000000001, pos=self.getPos() + (randomX, 0.0, randomZ)), LerpPosInterval(self, duration=0.10000000000000001, pos=self.getPos()), Wait(RepairGlobals.Common.guiShakeCooldownTime)), name='RepairGameGUI.shakeSequence') self.shakeSequence.start() else: shakeDelta = 0.025000000000000001 randomX = random.random() * 2 * shakeDelta - shakeDelta randomZ = random.random() * 2 * shakeDelta - shakeDelta if not self.shakeSequence.isPlaying(): self.shakeSequence = Sequence( LerpPosInterval(self, duration=0.10000000000000001, pos=self.getPos() - (randomX, 0.0, randomZ)), LerpPosInterval(self, duration=0.20000000000000001, pos=self.getPos() + (randomX, 0.0, randomZ)), LerpPosInterval(self, duration=0.10000000000000001, pos=self.getPos()), Wait(RepairGlobals.Common.guiShakeCooldownTime), name='RepairGameGUI.shakeSequence') self.shakeSequence.start() def setTutorial(self, game, index=None): text = PLocalizer.Minigame_Tutorials[game] if index is not None: text = text[index] self.textElements['tutorial']['text'] = text self.textElements['tutorial'].setText() def clearTutorial(self): self.textElements['tutorial']['text'] = '' self.textElements['tutorial'].setText() def setRepairTitle(self): self.setTitle('repair') def setTitle(self, game): text = (PLocalizer.Minigame_Repair_Names[game], ) self.textElements['title']['text'] = text self.textElements['title'].setText() def clearTitle(self): self.textElements['title']['text'] = '' self.textElements['title'].setText() def setDifficulty(self, difficulty): self.textElements['level'][ 'text'] = PLocalizer.Minigame_Repair_Level % str(difficulty + 1) self.textElements['level'].setText() def setReward(self, reward): self.currentReward = reward def setGames(self, gameList): self.repairGamePicker.setGames(gameList) def resetGames(self): self.repairGamePicker.setEnabled(True) def setProgress(self, gameIndex, percent): self.repairGamePicker.setProgress(gameIndex, percent) def updatePirateNamesPerMincrogame(self, avIds2CurrentGameIndex): self.repairGamePicker.updatePirateNamesPerMincrogame( avIds2CurrentGameIndex) def destroy(self): self.ignore('clientLogout') self.ignore('seachestOpened') self.ignore('avatarDetailsOpened') self.ignore('minimapOpened') self.introSequence.clearToInitial() self.outroSequence.clearToInitial() self.cycleCompleteSequence.clearToInitial() self.shakeSequence.clearToInitial() del self.introSequence del self.outroSequence del self.cycleCompleteSequence del self.shakeSequence self.closeButton.destroy() self.closeButton.removeNode() del self.closeButton GUIFactory.destroyDirectGUIDict(self.staticElements) del self.staticElements self.repairGamePicker.destroy() del self.repairGamePicker self.removeNode()
class PotionInfo(DirectFrame): def __init__(self, potionGame): self.potionGame = potionGame DirectFrame.__init__(self, parent=potionGame.dialogs, relief=None) self.setPos((-0.5, 0, 0.074999999999999997)) guiAssets = loader.loadModel( 'models/minigames/pir_m_gui_pot_textureCard') parch = guiAssets.find('**/pir_t_gui_pot_potionIngredients') parch.setScale(3.4500000000000002, 1, 3.4500000000000002) parch.setPos(0.5, 0, -0.02) self.background = parch.copyTo(self) self.bQuit = GuiButton( image=(guiAssets.find('**/pir_t_gui_pot_exitIngredients'), guiAssets.find('**/pir_t_gui_pot_exitIngredientsOn'), guiAssets.find('**/pir_t_gui_pot_exitIngredientsOn'), guiAssets.find('**/pir_t_gui_pot_exitIngredients')), scale=(0.29999999999999999, 0.29999999999999999, 0.29999999999999999), command=self.quit) self.bQuit.reparentTo(self) self.bQuit.setPos(1.673, 0, 0.76700000000000002) self.messageText = PLocalizer.PotionGui['InfoText'] self.message = DirectLabel( parent=self, relief=None, text=self.messageText, text_scale=PiratesGuiGlobals.TextScaleTitleSmall, text_align=TextNode.ARight, text_fg=PotionGlobals.TextColor, text_shadow=None, pos=(-0.17000000000000001, 0, 0.71999999999999997), textMayChange=0) self.pieces = [] self.pieceLabels = [] for color in range(6): for level in range(6): piece = PotionBoardPiece(self, color, level + 1) piece.setPiecePosition( level * 0.112 - 0.27700000000000002, 0.17000000000000001 - color * 0.070900000000000005) piece.background.setDepthTest(False) piece.background.setDepthWrite(False) piece.setScale(0.34999999999999998) self.pieces.append(piece) piecelabel = DirectLabel( parent=self, relief=None, text=PLocalizer.PotionIngredients[color][level], text_scale=PiratesGuiGlobals.TextScaleMed, text_align=TextNode.ACenter, text_fg=PotionGlobals.TextColor, text_shadow=None, pos=(level * 0.38600000000000001 - 0.45200000000000001, 0, 0.438 - color * 0.245), textMayChange=0) self.message = DirectLabel( parent=self, relief=None, text=PLocalizer.PotionIngredients[color][level], text_scale=PiratesGuiGlobals.TextScaleMed, text_align=TextNode.ACenter, text_fg=PotionGlobals.TextColor, text_shadow=None, pos=(level * 0.38600000000000001 - 0.45200000000000001, 0, 0.438 - color * 0.245), textMayChange=0) self.pieceLabels.append(piecelabel) guiAssets.removeNode() def destroy(self): self.bQuit.destroy() DirectFrame.destroy(self) def show(self): if self.potionGame.closeCurrentDialog is not None: self.potionGame.closeCurrentDialog() self.potionGame.closeCurrentDialog = self.cleanUp self.potionGame.disableButtons() self.unstash() def toggle(self): if self.isStashed(): self.show() else: self.quit() def cleanUp(self): self.potionGame.closeCurrentDialog = None self.potionGame.enableButtons() self.stash() def quit(self): self.cleanUp() if self.potionGame.gameFSM.gameStarted: self.potionGame.gameFSM.request('Eval') else: self.potionGame.gameFSM.request('RecipeSelect')
class RepairGameGUI(DirectFrame): completeSound = None guiDownSound = None guiUpSound = None shipRepairMusic = None def __init__(self, repairGame): DirectFrame.__init__(self, parent = base.a2dBackground, relief = None) self.repairGame = repairGame base.loadingScreen.beginStep('Sound', 1, 10) self._initSound() base.loadingScreen.endStep('Sound') base.loadingScreen.beginStep('GUI', 1, 43) self._initGUI() base.loadingScreen.endStep('GUI') self.accept('clientLogout', self.handleExitGame) if base.localAvatar.guiMgr.seaChestActive: base.localAvatar.guiMgr.hideSeaChest() if base.localAvatar.guiMgr.minimap: base.localAvatar.guiMgr.hideMinimap() self.accept('seachestOpened', self.handleExitGame) self.accept('avatarDetailsOpened', self.handleExitGame) self.accept('minimapOpened', self.handleExitGame) self.setBin('fixed', 30) self.setZ(-0.20000000000000001) base.loadingScreen.beginStep('Intervals') self._initIntervals() base.loadingScreen.endStep('Intervals') def _initSound(self): if not self.completeSound: RepairGameGUI.completeSound = loadSfx(SoundGlobals.SFX_MINIGAME_REPAIR_GENERAL_CYCLECOMPLETE) RepairGameGUI.guiDownSound = loadSfx(SoundGlobals.SFX_MINIGAME_REPAIR_GENERAL_GUIDOWN) RepairGameGUI.guiUpSound = loadSfx(SoundGlobals.SFX_MINIGAME_REPAIR_GENERAL_GUIUP) RepairGameGUI.guiDownSound.setVolume(0.5) RepairGameGUI.guiUpSound.setVolume(0.5) RepairGameGUI.shipRepairMusic = [ SoundGlobals.MUSIC_PERFORMERS_02, SoundGlobals.MUSIC_PERFORMERS_07, SoundGlobals.MUSIC_PERFORMERS_09] base.musicMgr.request(random.choice(self.shipRepairMusic), priority = 1, volume = 0.5) def _initGUI(self): self.model = loader.loadModel('models/gui/pir_m_gui_srp_main') self.repairGamePicker = RepairGamePickerGUI(self, self.repairGame, self.model.find('**/group_picker')) self.staticElements = GUIFactory.generateStaticElements(self.model.getChild(0), self) self.textElements = { } self.textElements['title'] = DirectLabel(text = '', text_fg = (1.0, 1.0, 1.0, 1.0), text_shadow = (0.0, 0.0, 0.0, 1.0), scale = (0.087499999999999994, 0.087499999999999994, 0.087499999999999994), pos = (0.0, 0.0, 0.91000000000000003), relief = None, textMayChange = 1, text_font = PiratesGlobals.getPirateFont(), parent = self.staticElements['bg']) self.textElements['tutorial'] = DirectLabel(text = '', text_fg = (1.0, 1.0, 1.0, 1.0), text_shadow = (0.0, 0.0, 0.0, 1.0), text_wordwrap = 14, scale = (0.044999999999999998, 0.044999999999999998, 0.044999999999999998), pos = (0.0, 0.0, 0.79500000000000004), relief = None, textMayChange = 1, text_font = PiratesGlobals.getPirateFont(), parent = self.staticElements['bg']) self.textElements['level'] = DirectLabel(text = '', text_fg = (1.0, 1.0, 1.0, 1.0), scale = (0.052499999999999998, 0.052499999999999998, 0.052499999999999998), pos = (0.315, 0.0, 0.69999999999999996), relief = None, textMayChange = 1, text_align = TextNode.ARight, text_font = PiratesGlobals.getPirateFont(), parent = self.staticElements['bg']) self.textElements['level'].stash() self.textElements['idleMessage'] = DirectLabel(text = '', text_fg = (1.0, 1.0, 1.0, 1.0), text_shadow = (0.0, 0.0, 0.0, 1.0), text_wordwrap = 15, scale = (0.087499999999999994, 0.087499999999999994, 0.087499999999999994), pos = (0.0, 0.0, 0.0), relief = None, textMayChange = 1, text_font = PiratesGlobals.getPirateFont(), parent = self.staticElements['bg']) self.textElements['cycleCompleteMessage'] = DirectLabel(text = '', text_fg = (1.0, 1.0, 1.0, 1.0), text_shadow = (0.0, 0.0, 0.0, 1.0), text_wordwrap = 20, scale = (0.087499999999999994, 0.087499999999999994, 0.087499999999999994), pos = (0.0, 0.0, 0.0), relief = None, textMayChange = 1, text_font = PiratesGlobals.getPirateFont(), parent = self.staticElements['bg']) self.closeButton = GuiButton(image = (self.model.find('**/esc_button/idle'), self.model.find('**/esc_button/over'), self.model.find('**/esc_button/over'), self.model.find('**/esc_button/idle')), image_scale = (0.75, 0.75, 0.75), image_pos = (0.074999999999999997, 0, 0.080000000000000002), hotkeys = [ 'Escape'], hotkeyLabel = PLocalizer.Minigame_Repair_Leave_Game_Text, pos = (-0.40000000000000002, 0.0, 0.01), parent = base.a2dBottomRight, command = self.handleExitGame) self.closeButton.setBin('background', -90) self.model.removeNode() del self.model def setPickerOutroStartPos(self): self.pickerOutroLerp.setStartPos(self.repairGamePicker.getPos()) def setBGOutroStartPos(self): self.bgOutroLerp.setStartPos(self.staticElements['bg'].getPos()) def _initIntervals(self): self.bgIntroLerp = LerpPosInterval(self.staticElements['bg'], duration = 1.0, pos = self.staticElements['bg'].getPos(), startPos = (0.0, 0.0, 2.0)) self.pickerIntroLerp = LerpPosInterval(self.repairGamePicker, duration = 1.0, pos = self.repairGamePicker.getPos(), startPos = (0.0, 0.0, -1.0)) self.introSequence = Sequence(Func(self.repairGamePicker.setEnabled, False), Parallel(Sequence(Wait(0.25), Func(self.guiDownSound.play)), self.bgIntroLerp, self.pickerIntroLerp), Func(self.repairGamePicker.setEnabled, True), Func(self.repairGame.gameFSM.request, 'Idle'), name = 'RepairGame.introSequence') self.pickerOutroLerp = LerpPosInterval(self.repairGamePicker, duration = 1.0, startPos = self.repairGamePicker.getPos(), pos = (0.0, 0.0, -1.0)) self.bgOutroLerp = LerpPosInterval(self.staticElements['bg'], duration = 1.0, startPos = self.repairGamePicker.getPos(), pos = (0.0, 0.0, 2.0)) self.outroSequence = Sequence(Func(self.repairGamePicker.stashTab), Func(self.closeButton.stash), Parallel(Func(self.guiUpSound.play), Func(self.setPickerOutroStartPos), Func(self.setBGOutroStartPos), self.pickerOutroLerp, self.bgOutroLerp), Func(self.repairGame.cleanup), name = 'RepairGame.outroSequence') self.cycleCompleteSequence = Sequence(Func(self.showCycleCompleteMessage), Func(self.repairGamePicker.stashTab), Wait(self.getCycleCompleteWaitTime()), Func(self.completeSound.play), Func(self.hideCycleCompleteMessage), LerpPosInterval(self.repairGamePicker, duration = 0.5, pos = self.repairGamePicker.getPos() - (0, 0, 1.0)), Func(self.repairGame.resetMincroGameProgress), LerpPosInterval(self.repairGamePicker, duration = 0.5, pos = self.repairGamePicker.getPos()), Func(self.repairGame.gameFSM.request, 'Idle'), name = 'RepairGame.cycleCompleteSequence') self.shakeSequence = Sequence(name = 'RepairGameGUI.shakeSequence') def handleExitGame(self): messenger.send('escape') def getCycleCompleteWaitTime(self): if self.repairGame.location == ON_LAND: return 5.5 else: return 1.5 def showCycleCompleteMessage(self): if self.repairGame.location == ON_LAND: tpMgr = TextPropertiesManager.getGlobalPtr() tpGold = TextProperties() tpGold.setTextColor(0.97999999999999998, 0.76000000000000001, 0, 1) tpMgr.setProperties('gold', tpGold) completionTime = self.repairGame.getCycleCompleteTime() seconds = completionTime % 60 minutes = int(completionTime / 60.0) if minutes == 0: time = 'gold %i %s' % (seconds, PLocalizer.Minigame_Repair_Seconds) elif seconds < 10: time = 'gold %i:0%i %s' % (minutes, seconds, PLocalizer.Minigame_Repair_Minutes) else: time = 'gold %i:%i %s' % (minutes, seconds, PLocalizer.Minigame_Repair_Minutes) goldAmount = self.repairGame.getReward(localAvatar.doId) goldBonus = self.repairGame.getGoldBonus() if goldBonus: reward = PLocalizer.Minigame_Repair_GoldBonus % (str(goldAmount), str(goldBonus)) else: reward = PLocalizer.Minigame_Repair_Gold % str(goldAmount) text = PLocalizer.Minigame_Repair_BenchOutro % (time, reward) self.textElements['cycleCompleteMessage'].setPos(0.0, 0.0, 0.34999999999999998) else: text = PLocalizer.Minigame_Repair_ShipOutro self.textElements['cycleCompleteMessage'].setPos(0.0, 0.0, 0.14999999999999999) self.textElements['cycleCompleteMessage']['text'] = text self.textElements['cycleCompleteMessage'].setText() def hideCycleCompleteMessage(self): self.textElements['cycleCompleteMessage']['text'] = '' self.textElements['cycleCompleteMessage'].setText() def showIdleMessage(self): if self.repairGame.location == ON_LAND: text = PLocalizer.Minigame_Repair_BenchIntro self.textElements['idleMessage'].setPos(0.0, 0.0, 0.34999999999999998) else: text = PLocalizer.Minigame_Repair_ShipIntro self.textElements['idleMessage'].setPos(0.0, 0.0, 0.17499999999999999) self.textElements['idleMessage']['text'] = text self.textElements['idleMessage'].setText() def hideIdleMessage(self): self.textElements['idleMessage']['text'] = '' self.textElements['idleMessage'].setText() def onShipDamaged(self, wasGrapeshot = False): if wasGrapeshot: shakeDelta = 0.050000000000000003 randomX = random.random() * 2 * shakeDelta - shakeDelta randomZ = random.random() * 2 * shakeDelta - shakeDelta if self.shakeSequence.isPlaying(): self.shakeSequence.finish() self.shakeSequence = Parallel(Sequence(LerpColorScaleInterval(self, duration = 0.5, colorScale = (1.0, 0.20000000000000001, 0.20000000000000001, 1.0)), LerpColorScaleInterval(self, duration = RepairGlobals.Common.guiShakeCooldownTime / 2.0, colorScale = (1.0, 1.0, 1.0, 1.0))), Sequence(LerpPosInterval(self, duration = 0.10000000000000001, pos = self.getPos() - (randomX, 0.0, randomZ)), LerpPosInterval(self, duration = 0.20000000000000001, pos = self.getPos() + (randomX, 0.0, randomZ)), LerpPosInterval(self, duration = 0.10000000000000001, pos = self.getPos()), Wait(RepairGlobals.Common.guiShakeCooldownTime)), name = 'RepairGameGUI.shakeSequence') self.shakeSequence.start() else: shakeDelta = 0.025000000000000001 randomX = random.random() * 2 * shakeDelta - shakeDelta randomZ = random.random() * 2 * shakeDelta - shakeDelta if not self.shakeSequence.isPlaying(): self.shakeSequence = Sequence(LerpPosInterval(self, duration = 0.10000000000000001, pos = self.getPos() - (randomX, 0.0, randomZ)), LerpPosInterval(self, duration = 0.20000000000000001, pos = self.getPos() + (randomX, 0.0, randomZ)), LerpPosInterval(self, duration = 0.10000000000000001, pos = self.getPos()), Wait(RepairGlobals.Common.guiShakeCooldownTime), name = 'RepairGameGUI.shakeSequence') self.shakeSequence.start() def setTutorial(self, game, index = None): text = PLocalizer.Minigame_Tutorials[game] if index is not None: text = text[index] self.textElements['tutorial']['text'] = text self.textElements['tutorial'].setText() def clearTutorial(self): self.textElements['tutorial']['text'] = '' self.textElements['tutorial'].setText() def setRepairTitle(self): self.setTitle('repair') def setTitle(self, game): text = (PLocalizer.Minigame_Repair_Names[game],) self.textElements['title']['text'] = text self.textElements['title'].setText() def clearTitle(self): self.textElements['title']['text'] = '' self.textElements['title'].setText() def setDifficulty(self, difficulty): self.textElements['level']['text'] = PLocalizer.Minigame_Repair_Level % str(difficulty + 1) self.textElements['level'].setText() def setReward(self, reward): self.currentReward = reward def setGames(self, gameList): self.repairGamePicker.setGames(gameList) def resetGames(self): self.repairGamePicker.setEnabled(True) def setProgress(self, gameIndex, percent): self.repairGamePicker.setProgress(gameIndex, percent) def updatePirateNamesPerMincrogame(self, avIds2CurrentGameIndex): self.repairGamePicker.updatePirateNamesPerMincrogame(avIds2CurrentGameIndex) def destroy(self): self.ignore('clientLogout') self.ignore('seachestOpened') self.ignore('avatarDetailsOpened') self.ignore('minimapOpened') self.introSequence.clearToInitial() self.outroSequence.clearToInitial() self.cycleCompleteSequence.clearToInitial() self.shakeSequence.clearToInitial() del self.introSequence del self.outroSequence del self.cycleCompleteSequence del self.shakeSequence self.closeButton.destroy() self.closeButton.removeNode() del self.closeButton GUIFactory.destroyDirectGUIDict(self.staticElements) del self.staticElements self.repairGamePicker.destroy() del self.repairGamePicker self.removeNode()
class MinimapShop(MinimapObject): SORT = 2 SIGN_DICT = { 'blacksmith': '**/shopCoin_blacksmith', 'shipwright': '**/shopCoin_shipwright', 'gunsmith': '**/shopCoin_gunsmith', 'weapons': '**/shopCoin_gunsmith', 'tailor': '**/shopCoin_tailor', 'barber': '**/shopCoin_barber', 'jeweler': '**/shopCoin_jeweler', 'tattoo': '**/shopCoin_tattoo', 'voodoo': '**/shopCoin_voodoo', 'gypsy': '**/shopCoin_voodoo', 'tavern': '**/shopCoin_tavern', 'fishmaster': '**/shopCoin_fishing', 'cannonmaster': '**/shopCoin_cannon', 'stowaway': '**/shopCoin_stowaway', 'catalogrep': '**/shopCoin_catalog' } SIGNS = { } HELP_DICT = { 'blacksmith': PLocalizer.ShopBlacksmith, 'shipwright': PLocalizer.ShopShipwright, 'gunsmith': PLocalizer.ShopGunsmith, 'weapons': PLocalizer.ShopGunsmith, 'tailor': PLocalizer.ShopTailor, 'barber': PLocalizer.ShopBarber, 'jeweler': PLocalizer.ShopJewelry, 'tattoo': PLocalizer.ShopTattoo, 'voodoo': PLocalizer.ShopGypsy, 'gypsy': PLocalizer.ShopGypsy, 'tavern': PLocalizer.ShopTavern, 'fishmaster': PLocalizer.ShopFishmaster, 'cannonmaster': PLocalizer.ShopCannoneer, 'stowaway': PLocalizer.ShopStowaway, 'catalogrep': PLocalizer.ShopCatalogRep } def loadSigns(cls): if not MinimapShop.SIGNS: coins = loader.loadModel('models/textureCards/shopCoins') for coin in coins.findAllMatches('**/shopCoin_*'): coin.setP(-90) coin.flattenStrong() for (pattern, signName) in MinimapShop.SIGN_DICT.iteritems(): MinimapShop.SIGNS[pattern] = coins.find(signName) loadSigns = classmethod(loadSigns) def getShopType(cls, shopString): for pattern in MinimapShop.SIGN_DICT: if pattern in shopString: return pattern continue getShopType = classmethod(getShopType) def __init__(self, uid, worldNode, shopType): self.loadSigns() worldNode.setHpr(0, 0, 0) MinimapObject.__init__(self, uid, worldNode, MinimapShop.SIGNS[shopType]) self.shopType = shopType self.button = None def _addedToMap(self, map): self.mapGeom.setScale(aspect2d, 0.059999999999999998) overlayNode = map.getOverlayNode() transform = self.mapGeom.getTransform(overlayNode) self.button = GuiButton(parent = overlayNode, state = DGG.NORMAL, image = self.mapGeom, pos = transform.getPos(), image_hpr = transform.getHpr(), image_scale = transform.getScale(), helpText = MinimapShop.HELP_DICT[self.shopType], helpPos = (-0.27000000000000002, 0, 0.070000000000000007), helpDelay = 0, helpOpaque = True, sortOrder = MinimapShop.SORT) self.button.setAlphaScale(1, 1) self.mapGeom.detachNode() def _removedFromMap(self, map): if self.button: self.button.destroy() self.button = None def _updateOnMap(self, map): MinimapObject._updateOnMap(self, map) if self.button: if base.localAvatar.guiMgr.invasionScoreboard or base.localAvatar.isInInvasion(): self.button.hide() else: self.button.show()