def __init__(self, main=None): self.main = main self.parent = main.bookModel self.avatar = main.avatar self.mode = None self.maleDNA = HumanDNA.HumanDNA('m') self.maleDNA.makeMakeAPirate() self.femaleDNA = HumanDNA.HumanDNA('f') self.femaleDNA.makeMakeAPirate() self.navyDNA = HumanDNA.HumanDNA('n') self.navyDNA.makeMakeAPirate()
def createAIPlayers(self, AIList): self.AIPlayers = [0] * self.NumSeats for i in range(len(AIList)): if AIList[i] == 0: pass else: aiplayer = self._getActor(AIList[i]) self.AIPlayers[i] = aiplayer self.actors[i] = aiplayer if AIList[i] == PiratesGlobals.VILLAGER_TEAM: dna = HumanDNA.HumanDNA() dna.makeNPCPirate(seed=self.doId + i) aiplayer.setDNAString(dna) aiplayer.generateHuman(dna.gender, self.cr.human) name = None else: name = aiplayer.getName() aiplayer.reparentTo(self.SeatInfo[i]) aiplayer.setX(self.sittingOffset) female = False if AIList[ i] == PiratesGlobals.VILLAGER_TEAM and dna.gender == 'f': female = True seed = self.doId + i if not name: name = self.createAiPlayerName(female, seed) self.setAiPlayerName(aiplayer, name) if AIList[i] == PiratesGlobals.VILLAGER_TEAM: aiplayer.hideShadow() aiplayer.disableMixing() aiplayer.loop('sit_idle') return
def __init__(self, cr, numdice=5, public=1, name='dice game'): DistributedGameTable.DistributedGameTable.__init__(self, cr) self.round = 0 self.buttonSeat = 0 self.gameState = DiceGlobals.DSTATE_GETREADY self.public = public self.numDice = numdice self.ante = 10 self.lastSeat = -1 self.gameName = name self.dicevals = {} dna = HumanDNA.HumanDNA() dna.setGender('f') dna.setBodyShape(2) dna.setBodyHeight(-0.376766204834) dna.setHeadSize(0.0) dna.setBodySkin(5) dna.setClothesShirt(1, 13) dna.setClothesVest(3, 0) dna.setClothesCoat(0, 0) dna.setClothesPant(2, 0) dna.setClothesBelt(0, 0) dna.setClothesSock(0) dna.setClothesShoe(3) dna.setHeadWidth(-0.104657292366) dna.setHeadHeight(0.303506076336) dna.setHeadRoundness(0.0741384625435) dna.setJawWidth(0.0104657411575) dna.setJawRoundness(-0.0732600092888) dna.setJawAngle(0.189869761467) dna.setJawLength(0.0209314227104) self.dealer = self.createDealer('Dealer', dna, Vec3(0, 6.5, 0), Vec3(180, 0, 0))
def createDealer(self, type): self.dealer = self._getActor(self._getAvTeamFromVariation()) name = 'Dealer' if self._getAvTeamFromVariation() == PiratesGlobals.VILLAGER_TEAM: dna = HumanDNA.HumanDNA() dna.makeNPCTownfolk(seed=self.doId) dna.setName(name) dna.clothes.coat = 0 dna.clothes.vest = 2 dna.clothes.vestTexture = 4 dna.clothes.vestColor = 13 dna.clothes.shirt = 10 self.dealer.setDNAString(dna) self.dealer.generateHuman(dna.gender, self.cr.human) self.setAiPlayerName(self.dealer, name) else: self.setAiPlayerName(self.dealer, name) self.dealer.reparentTo(self.SeatInfo[-1]) self.dealer.setX(self.sittingOffset) self.dealer.hideShadow() self.dealer.disableMixing() self.dealer.loop('deal_idle') deck = loader.loadModel('models/handheld/cards_deck_high') deck.flattenStrong() topCard = loader.loadModel('models/handheld/cards_1_high') topCard.flattenStrong() deck.reparentTo(self.dealer.leftHandNode) topCard.reparentTo(self.dealer.leftHandNode)
def doDanIntro(self, object): self.notify.debug('doDanIntro') self.NPCDan = object if localAvatar.style.getTutorial() > PiratesGlobals.TUT_GOT_SEACHEST: if not self.debugTutorial: self.NPCDan.stash() self.NPCDan.setInteractOptions(allowInteract=False) return None dnaDict = NPCList.NPC_LIST[TutorialGlobals.DAN_UID] customDNA = HumanDNA.HumanDNA() customDNA.loadFromNPCDict(dnaDict) self.NPCDan.setDNA(customDNA) self.NPCDan.generateHuman('m', base.cr.humanHigh, useFaceTex=True) self.NPCDan.hideName() self.NPCDan.setPurgeInteractGui(1) self.NPCDan.disableBodyCollisions() self.NPCDan.loop('tut_1_1_5_a_idle_dan') self.NPCDan.setInteractOptions(allowInteract=False) self.NPCDan.tutorialCharacter = 1 def setupTalkToDan(talkToDan): if talkToDan: self.doneDanIntro(None) else: self.NPCDan.setAllowInteract(False) self.playerNeedsToTalkToDan(setupTalkToDan)
def setDNAString(self, dnaString=None): if dnaString == None: self.setDefaultDNA() elif isinstance(dnaString, HumanDNA.HumanDNA): self.style = copy.deepcopy(dnaString) else: self.style = HumanDNA.HumanDNA() self.style.makeFromNetString(dnaString)
def createDealer(self, type): self.dealer = self._getActor(self._getAvTeamFromVariation()) name = 'Dealer' if self._getAvTeamFromVariation() == PiratesGlobals.VILLAGER_TEAM: if self.tableType == TableGlobals.CARD_TABLE: dna = HumanDNA.HumanDNA() dna.makeNPCDealer(seed=self.doId) dna.setName(name) dna.clothes.coat = 0 dna.clothes.vest = 2 dna.clothes.vestTexture = 4 dna.clothes.vestColor = 13 dna.clothes.shirt = 10 self.dealer.setDNAString(dna) self.dealer.generateHuman(dna.gender, self.cr.human) self.setAiPlayerName(self.dealer, name) elif self.tableType == TableGlobals.DICE_TABLE: dna = HumanDNA.HumanDNA() dna.makeNPCTownfolk(seed=self.doId, gender='f') dna.setName(name) dna.setBodyHeight(0.57) dna.setClothesShirt(1, 13) dna.setClothesVest(3, 0) dna.setClothesCoat(0, 0) dna.setHat(0) dna.setClothesPant(2, 0) dna.setClothesBelt(0, 0) dna.setClothesSock(0) dna.setClothesShoe(3) self.dealer.setDNAString(dna) self.dealer.generateHuman(dna.gender, self.cr.human) self.setAiPlayerName(self.dealer, name) else: self.setAiPlayerName(self.dealer, name) self.dealer.reparentTo(self.SeatInfo[-1]) self.dealer.setX(self.sittingOffset) self.dealer.hideShadow() self.dealer.disableMixing() self.dealer.loop('deal_idle') deck = loader.loadModel('models/handheld/cards_deck_high') deck.flattenStrong() topCard = loader.loadModel('models/handheld/cards_1_high') topCard.flattenStrong() deck.reparentTo(self.dealer.leftHandNode) topCard.reparentTo(self.dealer.leftHandNode)
def __init__(self, cr): DistributedGameTable.DistributedGameTable.__init__(self, cr) self.pendingStakes = 0 self.activeStakes = 0 self.runningStakes = 0 self.seatStatus = [[0, -1] for x in range(self.NumSeats)] dna = HumanDNA.HumanDNA() self.dealer = self.createDealer('Dealer', dna, Vec3(0, 6.5, 0), Vec3(180, 0, 0)) self.timerLabel = None self.resultsFrame = None self.game = None
def setDNAId(self, dnaId): if dnaId and NPCList.NPC_LIST.has_key(dnaId): dnaDict = NPCList.NPC_LIST[dnaId] customDNA = HumanDNA.HumanDNA() customDNA.loadFromNPCDict(dnaDict) self.setDNAString(customDNA) self.checkState() else: self.setDNAString(None) self.setDefaultDNA() gender = random.choice(['m', 'f']) self.style.makeNPCZombie(seed=None, gender=gender) self.checkState()
def setDNAId(self, dnaId): if dnaId and NPCList.NPC_LIST.has_key(dnaId): dnaDict = NPCList.NPC_LIST[dnaId] customDNA = HumanDNA.HumanDNA() customDNA.loadFromNPCDict(dnaDict) self.setDNAString(customDNA) else: self.setDNAString(None) self.setDefaultDNA() if self.avatarType.isA(AvatarTypes.TradingCo): self.style.makeNPCIndiaNavySailor() else: self.style.makeNPCNavySailor()
def doStumpyIntro(self, object): self.notify.debug('doStumpyIntro') self.NPCStumpy = object dnaDict = NPCList.NPC_LIST['1153439632.21darren'] customDNA = HumanDNA.HumanDNA() customDNA.loadFromNPCDict(dnaDict) self.NPCStumpy.setDNA(customDNA) self.NPCStumpy.generateHuman('m', base.cr.humanHigh) self.NPCStumpy.setInteractOptions(allowInteract=False) self.NPCStumpy.setIgnoreProximity(True) self.NPCStumpy.disableBodyCollisions() self.NPCStumpy.setZ(9) self.notify.debug('collision event for Stumpy %s' % self.NPCStumpy.proximityCollisionEvent) stumpyBoat = base.cr.getDo(self.BoatStumpyDoId) self.acceptOnce(stumpyBoat.uniqueName('localAvBoardedShip'), self.doneStumpyIntro)
def enterCreateAvatar(self, avList, index, subId): if self.skipTutorial: self.tutorial = 0 self.avCreate = MakeAPirate(avList, 'makeAPirateComplete', subId, index, self.isPaid()) self.avCreate.load() self.avCreate.enter() self.accept('makeAPirateComplete', self.__handleMakeAPirate) else: self.tutorial = 1 dna = HumanDNA.HumanDNA() dna.makeMakeAPirate() newPotAv = PotentialAvatar(0, ['dbp', '', '', ''], dna, index, 0) self.csm.sendCreateAvatar(newPotAv.dna, '', newPotAv.position) self.accept('createdNewAvatar', self.handleAvatarCreated, [newPotAv])
def enterCreateAvatar(self, avList, index, subId): self.handler = self.handleCreateAvatar if self.skipTutorial: self.tutorial = 0 self.avCreate = MakeAPirate(avList, 'makeAPirateComplete', subId, index, self.isPaid()) self.avCreate.load() self.avCreate.enter() self.accept('makeAPirateComplete', self._PiratesClientRepository__handleMakeAPirate) self.accept('nameShopCreateAvatar', self.sendCreateAvatarMsg) else: self.tutorial = 1 dna = HumanDNA.HumanDNA() newPotAv = PotentialAvatar(0, ['dbp', '', '', ''], dna, index, 0) self.avatarManager.sendRequestCreateAvatar(subId) self.accept('createdNewAvatar', self.handleAvatarCreated, [newPotAv])
def doNellIntro(self, object): self.notify.debug('doNellIntro') self.NPCNell = object if localAvatar.style.getTutorial() > 1: if not self.debugTutorial: self.NPCNell.stash() self.NPCNell.setInteractOptions(allowInteract=False) return None dnaDict = NPCList.NPC_LIST[TutorialGlobals.NELL_UID] customDNA = HumanDNA.HumanDNA() customDNA.loadFromNPCDict(dnaDict) self.NPCNell.setDNA(customDNA) self.NPCNell.generateHuman('f', base.cr.humanHigh) self.NPCNell.hideName() self.NPCNell.setPurgeInteractGui(1) self.NPCNell.loop('tut_1_1_5_a_idle_dan') self.NPCNell.setInteractOptions(allowInteract=False) self.accept('playNellAnimationDan_a', self.playNellAnimationDan_a) UserFunnel.logSubmit(1, 'CUTSCENE_TWO_START') UserFunnel.logSubmit(0, 'CUTSCENE_TWO_START') base.cr.centralLogger.writeClientEvent('CUTSCENE_TWO_START')
def setDefaultDNA(self): newDNA = HumanDNA.HumanDNA() self.style = newDNA
def __init__(self, serverVersion, launcher=None): self.loadingScreen = base.loadingScreen self.loadingScreen.parent = self self.accept('connectionIssue', self.loadingScreen.hide) self.accept('connectionRetrying', self.loadingScreen.show) OTPClientRepository.__init__(self, serverVersion, launcher, playGame=PlayGame.PlayGame) self.createAvatarClass = DistributedPlayerPirate.DistributedPlayerPirate self.tradeManager = None self.pvpManager = None self.csm = self.generateGlobalObject( OtpDoGlobals.OTP_DO_ID_CLIENT_SERVICES_MANAGER, 'ClientServicesManager') #self.avatarManager = self.generateGlobalObject(OtpDoGlobals.OTP_DO_ID_PIRATES_AVATAR_MANAGER, 'DistributedAvatarManager') #self.chatManager = self.generateGlobalObject(OtpDoGlobals.OTP_DO_ID_CHAT_MANAGER, 'DistributedChatManager') #self.crewMatchManager = self.generateGlobalObject(OtpDoGlobals.OTP_DO_ID_PIRATES_CREW_MATCH_MANAGER, 'DistributedCrewMatchManager') #self.avatarFriendsManager = self.generateGlobalObject(OtpDoGlobals.OTP_DO_ID_AVATAR_FRIENDS_MANAGER, 'PCAvatarFriendsManager') #self.playerFriendsManager = self.generateGlobalObject(OtpDoGlobals.OTP_DO_ID_PLAYER_FRIENDS_MANAGER, 'PCPlayerFriendsManager') #self.guildManager = self.generateGlobalObject(OtpDoGlobals.OTP_DO_ID_PIRATES_GUILD_MANAGER, 'PCGuildManager') #self.speedchatRelay = self.generateGlobalObject(OtpDoGlobals.OTP_DO_ID_PIRATES_SPEEDCHAT_RELAY, 'PiratesSpeedchatRelay') #self.shipLoader = self.generateGlobalObject(OtpDoGlobals.OTP_DO_ID_PIRATES_SHIP_MANAGER, 'DistributedShipLoader') #self.matchMaker = self.generateGlobalObject(OtpDoGlobals.OTP_DO_ID_PIRATES_MATCH_MAKER, 'DistributedMatchMaker') base.loadingScreen.tick() #self.codeRedemption = self.generateGlobalObject(OtpDoGlobals.OTP_DO_ID_PIRATES_CODE_REDEMPTION, 'CodeRedemption') base.loadingScreen.tick() #self.settingsMgr = self.generateGlobalObject(OtpDoGlobals.OTP_DO_ID_PIRATES_SETTINGS_MANAGER, 'PiratesSettingsMgr') #self.statusDatabase = self.generateGlobalObject(OtpDoGlobals.OTP_DO_ID_STATUS_DATABASE, 'StatusDatabase') self.wantSeapatch = base.config.GetBool('want-seapatch', 1) self.wantSpecialEffects = base.config.GetBool('want-special-effects', 1) self.wantMakeAPirate = base.config.GetBool('wantMakeAPirate', 0) self.forceTutorial = base.config.GetBool('force-tutorial', 0) self.skipTutorial = base.config.GetBool('skip-tutorial', 0) self.tutorialObject = None self.avChoiceDoneEvent = None self.avChoice = None self.avCreate = None self.currentCutscene = None self.activeWorld = None self.oldWorld = None self.teleportMgr = None self.treasureMap = None self.newsManager = None self.distributedDistrict = None self.district = None self.profileMgr = None self.battleMgr = BattleManager.BattleManager(self) self.combatAnims = CombatAnimations.CombatAnimations() self.interactionMgr = InteractionManager.InteractionManager() self.currCamParent = None self.uidMgr = UniqueIdManager.UniqueIdManager(self) self.fakeMSP = None self.questDynMap = QuestLadderDynMap.QuestLadderDynMap() self.questDependency = QuestLadderDependency() self.questChoiceSibsMap = QuestChoiceDynMap() base.loadingScreen.beginStep('MasterHumans', 52, 45) self.humanHigh = [MasterHuman.MasterHuman(), MasterHuman.MasterHuman()] self.humanHigh[0].billboardNode.removeNode() self.humanHigh[1].billboardNode.removeNode() self.humanHigh[0].style = HumanDNA.HumanDNA('m') self.humanHigh[1].style = HumanDNA.HumanDNA('f') self.humanHigh[0].generateHuman('m') base.loadingScreen.tick() self.humanHigh[1].generateHuman('f') base.loadingScreen.tick() self.humanHigh[0].ignoreAll() self.humanHigh[1].ignoreAll() self.humanHigh[0].stopBlink() self.humanHigh[1].stopBlink() self.humanLow = [MasterHuman.MasterHuman(), MasterHuman.MasterHuman()] self.humanLow[0].billboardNode.removeNode() self.humanLow[1].billboardNode.removeNode() self.humanLow[0].style = HumanDNA.HumanDNA('m') self.humanLow[1].style = HumanDNA.HumanDNA('f') self.humanLow[0].generateHuman('m') base.loadingScreen.tick() self.humanLow[1].generateHuman('f') base.loadingScreen.tick() base.loadingScreen.endStep('MasterHumans') self.humanLow[0].ignoreAll() self.humanLow[1].ignoreAll() self.humanLow[0].stopBlink() self.humanLow[1].stopBlink() for i in range(2): self.humanLow[i]._Actor__sortedLODNames = ['500'] del self.humanLow[i]._Actor__partBundleDict['2000'] del self.humanLow[i]._Actor__partBundleDict['1000'] self.humanLow[i].getLOD('2000').detachNode() self.humanLow[i].getLOD('1000').detachNode() self.humanLow[i].getLODNode().clearSwitches() self.humanLow[i].getLODNode().addSwitch(10000, 0) if base.options.getCharacterDetailSetting() == 0: self.human = self.humanLow else: self.human = self.humanHigh A = AvatarTypes del A self.preloadedCutscenes = {} self.defaultShard = 0 if __dev__: __builtin__.go = self.getDo self.effectTypes = { 'damageSmoke': ['BlackSmoke'], 'damageFire': ['Fire'], 'cannonDeckFire': ['CannonSmokeSimple', 'CannonBlastSmoke'], 'cannonBSFire': [ 'MuzzleFlameBS', 'CannonSmokeSimpleBS', 'CannonBlastSmokeBS', 'GrapeshotEffectBS' ], 'cannonHit': ['SimpleSmokeCloud', 'ExplosionFlip'], 'cannonSplash': ['CannonSplash'] } self.effectToggles = {} self.cannonballCollisionDebug = 1 self.npcManager = NPCManager.NPCManager() self.accountDetailRecord = AccountDetailRecord()
def showDetails(self, cell, detailsPos, detailsHeight, event=None): self.notify.debug('Item showDetails') if self.manager.heldItem and self.manager.locked and cell.isEmpty( ) or not (self.itemTuple): self.notify.debug(' early exit') return None itemId = self.getId() self.helpFrame = DirectFrame(parent=self.manager, relief=None, state=DGG.DISABLED, sortOrder=1) self.helpFrame.setBin('gui-popup', -5) detailGui = loader.loadModel('models/gui/gui_card_detail') topGui = loader.loadModel('models/gui/toplevel_gui') coinImage = topGui.find('**/treasure_w_coin*') halfWidth = 0.29999999999999999 halfHeight = 0.20000000000000001 basePosX = cell.getX(aspect2d) basePosZ = cell.getZ(aspect2d) cellSizeX = 0.0 cellSizeZ = 0.0 if cell: cellSizeX = cell.cellSizeX cellSizeZ = cell.cellSizeZ textScale = PiratesGuiGlobals.TextScaleMed titleScale = PiratesGuiGlobals.TextScaleTitleSmall if len(self.getName()) >= 30: titleNameScale = PiratesGuiGlobals.TextScaleLarge else: titleNameScale = PiratesGuiGlobals.TextScaleExtraLarge subtitleScale = PiratesGuiGlobals.TextScaleMed iconScalar = 1.5 borderScaler = 0.25 splitHeight = 0.01 vMargin = 0.029999999999999999 runningVertPosition = 0.29999999999999999 runningSize = 0.0 labels = [] titleColor = PiratesGuiGlobals.TextFG6 rarity = ItemGlobals.getRarity(itemId) rarityText = PLocalizer.getItemRarityName(rarity) typeText = ClothingGlobals.getClothingTypeName( ItemGlobals.getType(itemId)) if rarity == ItemGlobals.CRUDE: titleColor = PiratesGuiGlobals.TextFG24 elif rarity == ItemGlobals.COMMON: titleColor = PiratesGuiGlobals.TextFG13 elif rarity == ItemGlobals.RARE: titleColor = PiratesGuiGlobals.TextFG4 elif rarity == ItemGlobals.FAMED: titleColor = PiratesGuiGlobals.TextFG5 titleLabel = DirectLabel(parent=self, relief=None, text=self.getName(), text_scale=titleNameScale, text_fg=titleColor, text_shadow=PiratesGuiGlobals.TextShadow, text_align=TextNode.ACenter, pos=(0.0, 0.0, runningVertPosition), text_pos=(0.0, -textScale)) self.bg.setColor(titleColor) tHeight = 0.070000000000000007 titleLabel.setZ(runningVertPosition) runningVertPosition -= tHeight runningSize += tHeight labels.append(titleLabel) subtitleLabel = DirectLabel(parent=self, relief=None, text='\x001slant\x001%s %s\x002' % (rarityText, typeText), text_scale=subtitleScale, text_fg=PiratesGuiGlobals.TextFG2, text_shadow=PiratesGuiGlobals.TextShadow, text_align=TextNode.ACenter, pos=(0.0, 0.0, runningVertPosition), text_pos=(0.0, -textScale)) subtHeight = 0.050000000000000003 subtitleLabel.setZ(subtHeight * 0.5 + runningVertPosition) runningVertPosition -= subtHeight runningSize += subtHeight labels.append(subtitleLabel) clothingType = ItemGlobals.getType(itemId) if localAvatar.style.getGender() == 'm': maleModelId = ItemGlobals.getMaleModelId(itemId) if maleModelId != -1: modelId = maleModelId texId = ItemGlobals.getMaleTextureId(itemId) dna = HumanDNA.HumanDNA(localAvatar.style.gender) dna.copy(localAvatar.style) gender = 'm' else: modelId = ItemGlobals.getFemaleModelId(itemId) texId = ItemGlobals.getFemaleTextureId(itemId) dna = HumanDNA.HumanDNA('f') gender = 'f' else: femaleModelId = ItemGlobals.getFemaleModelId(itemId) if femaleModelId != -1: modelId = femaleModelId texId = ItemGlobals.getFemaleTextureId(itemId) dna = HumanDNA.HumanDNA(localAvatar.style.gender) dna.copy(localAvatar.style) gender = 'f' else: modelId = ItemGlobals.getMaleModelId(itemId) texId = ItemGlobals.getMaleTextureId(itemId) dna = HumanDNA.HumanDNA('m') gender = 'm' bodyShape = localAvatar.style.getBodyShape() bodyHeight = localAvatar.style.getBodyHeight() bodyOffset = 0.5 headOffset = 0 topOffset = 0 pantOffset = 0 beltOffset = 0 shoeOffset = 0 if bodyShape == 0: bodyOffset = 1 headOffset = 0.69999999999999996 topOffset = 0.69999999999999996 pantOffset = 0.20000000000000001 beltOffset = 0.5 elif bodyShape == 1: bodyOffset = 0 if gender == 'm': headOffset = -0.10000000000000001 beltOffset = 0.10000000000000001 shoeOffset = 0.10000000000000001 elif gender == 'f': headOffset = 0.59999999999999998 topOffset = 0.40000000000000002 beltOffset = 0.40000000000000002 shoeOffset = 0.10000000000000001 elif bodyShape == 2: bodyOffset = 0.5 elif bodyShape == 3: bodyOffset = 1 if gender == 'm': topOffset = 0.10000000000000001 beltOffset = 0.10000000000000001 elif gender == 'f': headOffset = -0.40000000000000002 topOffset = -0.10000000000000001 beltOffset = -0.10000000000000001 pantOffset = -0.10000000000000001 elif bodyShape == 4: bodyOffset = 0.5 if gender == 'm': headOffset = -0.20000000000000001 topOffset = -0.29999999999999999 elif gender == 'f': headOffset = 0.10000000000000001 beltOffset = 0.10000000000000001 elif bodyShape == 5: bodyOffset = 0.5 elif bodyShape == 6: bodyOffset = 0.5 if gender == 'f': headOffset = 0.40000000000000002 topOffset = 0.40000000000000002 beltOffset = 0.29999999999999999 elif bodyShape == 7: bodyOffset = 0.5 elif bodyShape == 8: bodyOffset = 0.5 headOffset = -0.20000000000000001 topOffset = -0.20000000000000001 elif bodyShape == 9: bodyOffset = 0.5 headOffset = -0.20000000000000001 topOffset = -0.20000000000000001 m = Mat4(Mat4.identMat()) topColor = localAvatar.style.getClothesBotColor() botColor = localAvatar.style.getClothesTopColor() hatColor = localAvatar.style.getHatColor() (shirtIdx, shirtTex) = localAvatar.style.getClothesShirt() (hatIdx, hatTex) = localAvatar.style.getClothesHat() (coatIdx, coatTex) = localAvatar.style.getClothesCoat() (beltIdx, beltTex) = localAvatar.style.getClothesBelt() (shoeIdx, shoeTex) = localAvatar.style.getClothesShoe() (vestIdx, vestTex) = localAvatar.style.getClothesVest() (pantIdx, pantTex) = localAvatar.style.getClothesPant() dna.setClothesBotColor(topColor[0], topColor[1], topColor[2]) dna.setClothesTopColor(botColor[0], botColor[1], botColor[2]) dna.setHatColor(hatColor) dna.setClothesShirt(shirtIdx, shirtTex) dna.setClothesHat(hatIdx, hatTex) dna.setClothesBelt(beltIdx, beltTex) dna.setClothesPant(pantIdx, pantTex) dna.setClothesShoe(shoeIdx, shoeTex) if clothingType == ClothingGlobals.SHIRT: dna.setClothesVest(0) dna.setClothesCoat(0) elif clothingType == ClothingGlobals.VEST: dna.setClothesCoat(0) elif clothingType == ClothingGlobals.BELT: dna.setClothesCoat(0) dna.setClothesVest(0) else: dna.setClothesVest(vestIdx, vestTex) dna.setClothesCoat(coatIdx, coatTex) dna.setClothesByType(ClothingGlobals.CLOTHING_STRING[clothingType], modelId, texId, self.itemTuple[3]) self.displayHuman.setDNAString(dna) self.displayHuman.generateHuman(gender, self.masterHuman) self.displayHuman.stopBlink() self.displayHuman.pose('idle', 1) lodNode = self.displayHuman.find('**/+LODNode').node() lodNode.forceSwitch(lodNode.getHighestSwitch()) if clothingType == ClothingGlobals.HAT: self.displayHuman.getLOD('2000').getChild(0).node().findJoint( 'def_head01').getNetTransform(m) headHeight = TransformState.makeMat(m).getPos().getZ() offsetZ = (-headHeight - 0.40000000000000002) + headOffset - bodyHeight * 1.0 offsetY = 2.0 + bodyOffset offsetH = 200 elif clothingType == ClothingGlobals.SHIRT: self.displayHuman.getLOD('2000').getChild(0).node().findJoint( 'def_spine03').getNetTransform(m) spine3Height = TransformState.makeMat(m).getPos().getZ() offsetZ = -spine3Height + topOffset - bodyHeight * 1.3999999999999999 offsetY = 3.25 + bodyOffset offsetH = 200 elif clothingType == ClothingGlobals.VEST: self.displayHuman.getLOD('2000').getChild(0).node().findJoint( 'def_spine03').getNetTransform(m) spine3Height = TransformState.makeMat(m).getPos().getZ() offsetZ = -spine3Height + topOffset - bodyHeight * 1.3999999999999999 offsetY = 3.5 + bodyOffset offsetH = 200 elif clothingType == ClothingGlobals.COAT: self.displayHuman.getLOD('2000').getChild(0).node().findJoint( 'def_spine02').getNetTransform(m) spine2Height = TransformState.makeMat(m).getPos().getZ() offsetZ = -spine2Height + topOffset - bodyHeight * 1.3999999999999999 offsetY = 4.5 + bodyOffset offsetH = 200 elif clothingType == ClothingGlobals.PANT: self.displayHuman.getLOD('2000').getChild(0).node().findJoint( 'def_right_knee').getNetTransform(m) kneeHeight = TransformState.makeMat(m).getPos().getZ() offsetZ = -kneeHeight + pantOffset - 0.5 - bodyHeight * 0.29999999999999999 offsetY = 4.5 + bodyOffset offsetH = 200 elif clothingType == ClothingGlobals.BELT: self.displayHuman.getLOD('2000').getChild(0).node().findJoint( 'def_hips').getNetTransform(m) hipHeight = TransformState.makeMat(m).getPos().getZ() offsetZ = -hipHeight + beltOffset - bodyHeight * 0.5 offsetY = 1.7 + bodyOffset offsetH = 180 elif clothingType == ClothingGlobals.SHOE: self.displayHuman.getLOD('2000').getChild(0).node().findJoint( 'def_right_ankle').getNetTransform(m) ankleHeight = TransformState.makeMat(m).getPos().getZ() offsetZ = -ankleHeight + shoeOffset - 0.14999999999999999 - bodyHeight * -0.10000000000000001 offsetY = 3.25 + bodyOffset offsetH = 200 else: offsetZ = 0 offsetY = 0 offsetH = 0 offsetX = 0 self.displayHuman.setY(offsetY) self.displayHuman.setZ(offsetZ) self.displayHuman.setX(offsetX) self.displayHuman.setH(offsetH) self.displayHuman.reparentTo(self.portraitSceneGraph) iHeight = 0.17999999999999999 self.createBuffer() self.itemCard.setZ(runningVertPosition - 0.059999999999999998) runningVertPosition -= iHeight runningSize += iHeight labels.append(self.itemCard) if self.showResaleValue: value = int( ItemGlobals.getGoldCost(itemId) * ItemGlobals.GOLD_SALE_MULTIPLIER) else: value = ItemGlobals.getGoldCost(itemId) itemCost = int(ItemGlobals.getGoldCost(itemId)) if self.cell and self.cell.container: itemCost = int(itemCost * self.cell.container.getItemPriceMult()) goldLabel = DirectLabel( parent=self, relief=None, image=coinImage, image_scale=0.12, image_pos=Vec3(0.025000000000000001, 0, -0.02), text=str(itemCost), text_scale=subtitleScale, text_align=TextNode.ARight, text_fg=PiratesGuiGlobals.TextFG1, text_shadow=PiratesGuiGlobals.TextShadow, pos=(halfWidth - 0.050000000000000003, 0.0, runningVertPosition + 0.080000000000000002), text_pos=(0.0, -textScale)) labels.append(goldLabel) descriptionLabel = DirectLabel( parent=self, relief=None, text=PLocalizer.getItemFlavorText(itemId), text_scale=textScale, text_wordwrap=halfWidth * 2.0 * (0.94999999999999996 / textScale), text_fg=PiratesGuiGlobals.TextFG0, text_align=TextNode.ALeft, pos=(-halfWidth + textScale * 0.5, 0.0, runningVertPosition), text_pos=(0.0, -textScale)) dHeight = descriptionLabel.getHeight() + 0.02 runningVertPosition -= dHeight runningSize += dHeight labels.append(descriptionLabel) if not Freebooter.getPaidStatus(localAvatar.getDoId()): if rarity != ItemGlobals.CRUDE: unlimitedLabel = DirectLabel( parent=self, relief=None, text=PLocalizer.UnlimitedAccessRequirement, text_scale=textScale, text_wordwrap=halfWidth * 2.0 * (1.5 / titleScale), text_fg=PiratesGuiGlobals.TextFG6, text_shadow=PiratesGuiGlobals.TextShadow, text_align=TextNode.ACenter, pos=(0.0, 0.0, runningVertPosition), text_pos=(0.0, -textScale)) uHeight = unlimitedLabel.getHeight() runningVertPosition -= uHeight runningSize += uHeight labels.append(unlimitedLabel) runningVertPosition -= 0.02 runningSize += 0.02 panels = self.helpFrame.attachNewNode('panels') topPanel = panels.attachNewNode('middlePanel') detailGui.find('**/top_panel').copyTo(topPanel) topPanel.setScale(0.080000000000000002) topPanel.reparentTo(self.helpFrame) middlePanel = panels.attachNewNode('middlePanel') detailGui.find('**/middle_panel').copyTo(middlePanel) middlePanel.setScale(0.080000000000000002) middlePanel.reparentTo(self.helpFrame) placement = 0 i = 0 heightMax = -0.080000000000000002 currentHeight = runningVertPosition if detailsHeight: currentHeight = -detailsHeight while currentHeight < heightMax: middlePanel = panels.attachNewNode('middlePanel%s' % 1) detailGui.find('**/middle_panel').copyTo(middlePanel) middlePanel.setScale(0.080000000000000002) middlePanel.reparentTo(self.helpFrame) if currentHeight + 0.20000000000000001 >= heightMax: difference = heightMax - currentHeight placement += (0.16800000000000001 / 0.20000000000000001) * difference currentHeight += difference else: placement += 0.16800000000000001 currentHeight += 0.20000000000000001 middlePanel.setZ(-placement) i += 1 bottomPanel = panels.attachNewNode('bottomPanel') detailGui.find('**/bottom_panel').copyTo(bottomPanel) bottomPanel.setScale(0.080000000000000002) bottomPanel.setZ(-placement) bottomPanel.reparentTo(self.helpFrame) colorPanel = self.helpFrame.attachNewNode('colorPanel') detailGui.find('**/color').copyTo(colorPanel) colorPanel.setScale(0.080000000000000002) colorPanel.setColor(titleColor) colorPanel.reparentTo(self.helpFrame) lineBreakTopPanel = panels.attachNewNode('lineBreakTopPanel') detailGui.find('**/line_break_top').copyTo(lineBreakTopPanel) lineBreakTopPanel.setScale(0.080000000000000002, 0.080000000000000002, 0.070000000000000007) lineBreakTopPanel.setZ(0.0080000000000000002) lineBreakTopPanel.reparentTo(self.helpFrame) panels.flattenStrong() self.helpFrame['frameSize'] = (-halfWidth, halfWidth, -(runningSize + vMargin), vMargin) totalHeight = self.helpFrame.getHeight() - 0.10000000000000001 for label in labels: label.reparentTo(self.helpFrame) if basePosX > 0.0: newPosX = basePosX - halfWidth + cellSizeX * 0.45000000000000001 else: newPosX = basePosX + halfWidth + cellSizeX * 0.45000000000000001 if basePosZ > 0.0: newPosZ = basePosZ + cellSizeZ * 0.45000000000000001 else: newPosZ = basePosZ + totalHeight - cellSizeZ * 0.75 if detailsPos: (newPosX, newPosZ) = detailsPos self.helpFrame.setPos(newPosX, 0, newPosZ)
def showDetails(self, cell, detailsPos, detailsHeight, event=None): self.notify.debug('Item showDetails') if self.manager.heldItem and self.manager.locked and cell.isEmpty( ) or not (self.itemTuple): self.notify.debug(' early exit') return None itemId = self.getId() self.helpFrame = DirectFrame(parent=self.manager, relief=None, state=DGG.DISABLED, sortOrder=1) self.helpFrame.setBin('gui-popup', -5) detailGui = loader.loadModel('models/gui/gui_card_detail') topGui = loader.loadModel('models/gui/toplevel_gui') coinImage = topGui.find('**/treasure_w_coin*') halfWidth = 0.29999999999999999 halfHeight = 0.20000000000000001 basePosX = cell.getX(aspect2d) basePosZ = cell.getZ(aspect2d) cellSizeX = 0.0 cellSizeZ = 0.0 if cell: cellSizeX = cell.cellSizeX cellSizeZ = cell.cellSizeZ textScale = PiratesGuiGlobals.TextScaleMed titleScale = PiratesGuiGlobals.TextScaleTitleSmall if len(self.getName()) >= 30: titleNameScale = PiratesGuiGlobals.TextScaleLarge else: titleNameScale = PiratesGuiGlobals.TextScaleExtraLarge subtitleScale = PiratesGuiGlobals.TextScaleMed iconScalar = 1.5 borderScaler = 0.25 splitHeight = 0.01 vMargin = 0.029999999999999999 runningVertPosition = 0.29999999999999999 runningSize = 0.0 labels = [] titleColor = PiratesGuiGlobals.TextFG6 rarity = ItemGlobals.getRarity(itemId) rarityText = PLocalizer.getItemRarityName(rarity) typeText = PLocalizer.getTattooTypeName(ItemGlobals.getType(itemId)) if rarity == ItemGlobals.CRUDE: titleColor = PiratesGuiGlobals.TextFG24 elif rarity == ItemGlobals.COMMON: titleColor = PiratesGuiGlobals.TextFG13 elif rarity == ItemGlobals.RARE: titleColor = PiratesGuiGlobals.TextFG4 elif rarity == ItemGlobals.FAMED: titleColor = PiratesGuiGlobals.TextFG5 titleLabel = DirectLabel(parent=self, relief=None, text=self.getName(), text_scale=titleNameScale, text_fg=titleColor, text_shadow=PiratesGuiGlobals.TextShadow, text_align=TextNode.ACenter, pos=(0.0, 0.0, runningVertPosition), text_pos=(0.0, -textScale)) self.bg.setColor(titleColor) tHeight = 0.070000000000000007 titleLabel.setZ(runningVertPosition) runningVertPosition -= tHeight runningSize += tHeight labels.append(titleLabel) subtitleLabel = DirectLabel(parent=self, relief=None, text='\x001slant\x001%s %s\x002' % (rarityText, typeText), text_scale=subtitleScale, text_fg=PiratesGuiGlobals.TextFG2, text_shadow=PiratesGuiGlobals.TextShadow, text_align=TextNode.ACenter, pos=(0.0, 0.0, runningVertPosition), text_pos=(0.0, -textScale)) subtHeight = 0.050000000000000003 subtitleLabel.setZ(subtHeight * 0.5 + runningVertPosition) runningVertPosition -= subtHeight runningSize += subtHeight labels.append(subtitleLabel) gender = localAvatar.style.gender dna = HumanDNA.HumanDNA(gender) dna.copy(localAvatar.style) bodyShape = localAvatar.style.getBodyShape() bodyHeight = localAvatar.style.getBodyHeight() bodyOffset = 0.5 headOffset = 0 armOffset = 0 chestOffset = 0 if bodyShape == 0: bodyOffset = 0.5 if gender == 'm': headOffset = 0.69999999999999996 armOffset = 0.59999999999999998 chestOffset = 0.5 elif gender == 'f': headOffset = 0.55000000000000004 armOffset = 0.5 chestOffset = 0.5 elif bodyShape == 1: bodyOffset = 0.5 if gender == 'm': headOffset = 0.10000000000000001 armOffset = 0.14999999999999999 elif gender == 'f': headOffset = 0.40000000000000002 armOffset = 0.40000000000000002 chestOffset = 0.29999999999999999 elif bodyShape == 2: bodyOffset = 0.5 if gender == 'f': headOffset = -0.10000000000000001 elif bodyShape == 3: bodyOffset = 0.5 if gender == 'm': headOffset = 0.10000000000000001 armOffset = 0.14999999999999999 elif gender == 'f': headOffset = -0.40000000000000002 armOffset = -0.20000000000000001 chestOffset = -0.29999999999999999 elif bodyShape == 4: bodyOffset = 0.5 if gender == 'm': headOffset = -0.25 armOffset = -0.14999999999999999 chestOffset = -0.25 elif gender == 'f': headOffset = 0.050000000000000003 armOffset = 0.10000000000000001 elif bodyShape == 5: bodyOffset = 0.5 if gender == 'f': headOffset = -0.10000000000000001 elif bodyShape == 6: bodyOffset = 0.5 if gender == 'f': headOffset = 0.29999999999999999 armOffset = 0.29999999999999999 chestOffset = 0.29999999999999999 elif bodyShape == 7: bodyOffset = 0.5 if gender == 'f': headOffset = -0.10000000000000001 elif bodyShape == 8: bodyOffset = 0.5 if gender == 'm': headOffset = -0.14999999999999999 armOffset = -0.10000000000000001 chestOffset = -0.20000000000000001 elif gender == 'f': headOffset = -0.20000000000000001 armOffset = -0.10000000000000001 chestOffset = -0.20000000000000001 elif bodyShape == 9: bodyOffset = 0.5 if gender == 'm': headOffset = -0.29999999999999999 armOffset = -0.20000000000000001 chestOffset = -0.29999999999999999 elif gender == 'f': headOffset = -0.40000000000000002 armOffset = -0.20000000000000001 chestOffset = -0.29999999999999999 m = Mat4(Mat4.identMat()) itemType = ItemGlobals.getType(itemId) if itemType == ItemGlobals.CHEST: tattooType = TattooGlobals.ZONE1 elif itemType == ItemGlobals.ARM: tattooType = TattooGlobals.ZONE2 elif itemType == ItemGlobals.FACE: tattooType = TattooGlobals.ZONE4 if localAvatar.style.gender == 'm': maleModelId = ItemGlobals.getMaleModelId(itemId) if maleModelId: tattooId = maleModelId tattooOrientation = ItemGlobals.getOrientation( ItemGlobals.getMaleOrientation(itemId)) dna = HumanDNA.HumanDNA(localAvatar.style.gender) dna.copy(localAvatar.style) gender = 'm' else: tattooId = ItemGlobals.getFemaleModelId(itemId) tattooOrientation = ItemGlobals.getOrientation( ItemGlobals.getFemaleOrientation(itemId)) dna = HumanDNA.HumanDNA('f') gender = 'f' else: femaleModelId = ItemGlobals.getFemaleModelId(itemId) if femaleModelId: tattooId = femaleModelId tattooOrientation = ItemGlobals.getOrientation( ItemGlobals.getFemaleOrientation(itemId)) dna = HumanDNA.HumanDNA(localAvatar.style.gender) dna.copy(localAvatar.style) gender = 'f' else: tattooId = ItemGlobals.getMaleModelId(itemId) tattooOrientation = ItemGlobals.getOrientation( ItemGlobals.getMaleOrientation(itemId)) dna = HumanDNA.HumanDNA('m') gender = 'm' offsetx = tattooOrientation[0] offsety = tattooOrientation[1] scale = tattooOrientation[2] rotate = tattooOrientation[3] color = 0 S = Vec2(1 / float(scale), 1 / float(scale)) Iv = Vec2(offsetx, offsety) Vm = Vec2(sin(rotate * pi / 180.0), cos(rotate * pi / 180.0)) Vms = Vec2(Vm[0] * S[0], Vm[1] * S[1]) Vn = Vec2(Vm[1], -Vm[0]) Vns = Vec2(Vn[0] * S[0], Vn[1] * S[1]) F = Vec2(-Vns.dot(Iv) + 0.5, -Vms.dot(Iv) + 0.5) if tattooType == 0: dna.setClothesShirt(0) dna.setClothesVest(0) dna.setClothesCoat(0) dna.setTattooChest(tattooId, F[0], F[1], S[0], rotate, color) elif tattooType == 1: dna.setClothesShirt(0) dna.setClothesCoat(0) dna.setTattooZone2(tattooId, F[0], F[1], S[0], rotate, color) elif tattooType == 2: dna.setClothesShirt(0) dna.setClothesCoat(0) dna.setTattooZone3(tattooId, F[0], F[1], S[0], rotate, color) elif tattooType == 3: dna.setTattooZone4(tattooId, F[0], F[1], S[0], rotate, color) elif tattooType == 4: dna.setTattooZone5(tattooId, F[0], F[1], S[0], rotate, color) elif tattooType == 5: dna.setTattooZone6(tattooId, F[0], F[1], S[0], rotate, color) elif tattooType == 6: dna.setTattooZone7(tattooId, F[0], F[1], S[0], rotate, color) elif tattooType == 7: dna.setTattooZone8(tattooId, F[0], F[1], S[0], rotate, color) self.displayHuman.setDNAString(dna) self.displayHuman.generateHuman(gender, self.masterHuman) self.displayHuman.stopBlink() self.displayHuman.pose('idle', 1) lodNode = self.displayHuman.find('**/+LODNode').node() lodNode.forceSwitch(lodNode.getHighestSwitch()) self.displayHuman.reparentTo(self.portraitSceneGraph) if tattooType == TattooGlobals.ZONE1: self.displayHuman.getLOD('2000').getChild(0).node().findJoint( 'def_spine03').getNetTransform(m) spine3Height = TransformState.makeMat(m).getPos().getZ() offsetZ = -spine3Height + chestOffset - bodyHeight * 1.2 offsetX = 0.0 offsetY = 3.25 + bodyOffset offsetH = 180 elif tattooType == TattooGlobals.ZONE2: self.displayHuman.getLOD('2000').getChild(0).node().findJoint( 'def_left_shoulder').getNetTransform(m) leftShoulderHeight = TransformState.makeMat(m).getPos().getZ() if gender == 'f': offsetZ = -leftShoulderHeight + 1.2 + armOffset - bodyHeight * 0.80000000000000004 offsetX = 0.0 offsetY = 2.0 + bodyOffset else: offsetZ = -leftShoulderHeight + 0.45000000000000001 + armOffset - bodyHeight * 0.80000000000000004 if bodyShape == 4: offsetY = 2.5 + bodyOffset else: offsetY = 2.0 + bodyOffset offsetX = -0.20000000000000001 offsetH = 105 elif tattooType == TattooGlobals.ZONE4: self.displayHuman.getLOD('2000').getChild(0).node().findJoint( 'def_head01').getNetTransform(m) headHeight = TransformState.makeMat(m).getPos().getZ() offsetZ = (-headHeight - 0.10000000000000001 ) + headOffset - bodyHeight * 1.1000000000000001 offsetX = 0.0 offsetY = 1.5 + bodyOffset offsetH = 180 else: offsetZ = 0 offsetY = 0 offsetX = 0 offsetH = 0 self.displayHuman.setY(offsetY) self.displayHuman.setZ(offsetZ) self.displayHuman.setX(offsetX) self.displayHuman.setH(offsetH) iHeight = 0.17999999999999999 self.createBuffer() self.itemCard.setZ(runningVertPosition - 0.059999999999999998) runningVertPosition -= iHeight runningSize += iHeight labels.append(self.itemCard) itemCost = int(ItemGlobals.getGoldCost(itemId)) if self.cell and self.cell.container: itemCost = int(itemCost * self.cell.container.getItemPriceMult()) goldLabel = DirectLabel( parent=self, relief=None, image=coinImage, image_scale=0.12, image_pos=Vec3(0.025000000000000001, 0, -0.02), text=str(itemCost), text_scale=subtitleScale, text_align=TextNode.ARight, text_fg=PiratesGuiGlobals.TextFG1, text_shadow=PiratesGuiGlobals.TextShadow, pos=(halfWidth - 0.050000000000000003, 0.0, runningVertPosition + 0.080000000000000002), text_pos=(0.0, -textScale)) labels.append(goldLabel) descriptionLabel = DirectLabel( parent=self, relief=None, text=PLocalizer.getItemFlavorText(itemId), text_scale=textScale, text_wordwrap=halfWidth * 2.0 * (0.94999999999999996 / textScale), text_fg=PiratesGuiGlobals.TextFG0, text_align=TextNode.ALeft, pos=(-halfWidth + textScale * 0.5, 0.0, runningVertPosition), text_pos=(0.0, -textScale)) dHeight = descriptionLabel.getHeight() + 0.02 runningVertPosition -= dHeight runningSize += dHeight labels.append(descriptionLabel) if not Freebooter.getPaidStatus(localAvatar.getDoId()): if rarity != ItemGlobals.CRUDE: unlimitedLabel = DirectLabel( parent=self, relief=None, text=PLocalizer.UnlimitedAccessRequirement, text_scale=textScale, text_wordwrap=halfWidth * 2.0 * (1.5 / titleScale), text_fg=PiratesGuiGlobals.TextFG6, text_shadow=PiratesGuiGlobals.TextShadow, text_align=TextNode.ACenter, pos=(0.0, 0.0, runningVertPosition), text_pos=(0.0, -textScale)) uHeight = unlimitedLabel.getHeight() runningVertPosition -= uHeight runningSize += uHeight labels.append(unlimitedLabel) runningVertPosition -= 0.02 runningSize += 0.02 panels = self.helpFrame.attachNewNode('panels') topPanel = panels.attachNewNode('middlePanel') detailGui.find('**/top_panel').copyTo(topPanel) topPanel.setScale(0.080000000000000002) topPanel.reparentTo(self.helpFrame) middlePanel = panels.attachNewNode('middlePanel') detailGui.find('**/middle_panel').copyTo(middlePanel) middlePanel.setScale(0.080000000000000002) middlePanel.reparentTo(self.helpFrame) placement = 0 i = 0 heightMax = -0.080000000000000002 currentHeight = runningVertPosition if detailsHeight: currentHeight = -detailsHeight while currentHeight < heightMax: middlePanel = panels.attachNewNode('middlePanel%s' % 1) detailGui.find('**/middle_panel').copyTo(middlePanel) middlePanel.setScale(0.080000000000000002) middlePanel.reparentTo(self.helpFrame) if currentHeight + 0.20000000000000001 >= heightMax: difference = heightMax - currentHeight placement += (0.16800000000000001 / 0.20000000000000001) * difference currentHeight += difference else: placement += 0.16800000000000001 currentHeight += 0.20000000000000001 middlePanel.setZ(-placement) i += 1 bottomPanel = panels.attachNewNode('bottomPanel') detailGui.find('**/bottom_panel').copyTo(bottomPanel) bottomPanel.setScale(0.080000000000000002) bottomPanel.setZ(-placement) bottomPanel.reparentTo(self.helpFrame) colorPanel = self.helpFrame.attachNewNode('colorPanel') detailGui.find('**/color').copyTo(colorPanel) colorPanel.setScale(0.080000000000000002) colorPanel.setColor(titleColor) colorPanel.reparentTo(self.helpFrame) lineBreakTopPanel = panels.attachNewNode('lineBreakTopPanel') detailGui.find('**/line_break_top').copyTo(lineBreakTopPanel) lineBreakTopPanel.setScale(0.080000000000000002, 0.080000000000000002, 0.070000000000000007) lineBreakTopPanel.setZ(0.0080000000000000002) lineBreakTopPanel.reparentTo(self.helpFrame) panels.flattenStrong() self.helpFrame['frameSize'] = (-halfWidth, halfWidth, -(runningSize + vMargin), vMargin) totalHeight = self.helpFrame.getHeight() - 0.10000000000000001 for label in labels: label.reparentTo(self.helpFrame) if basePosX > 0.0: newPosX = basePosX - halfWidth + cellSizeX * 0.45000000000000001 else: newPosX = basePosX + halfWidth + cellSizeX * 0.45000000000000001 if basePosZ > 0.0: newPosZ = basePosZ + cellSizeZ * 0.45000000000000001 else: newPosZ = basePosZ + totalHeight - cellSizeZ * 0.75 if detailsPos: (newPosX, newPosZ) = detailsPos self.helpFrame.setPos(newPosX, 0, newPosZ)
def setDefaultDNA(self): self.style = HumanDNA.HumanDNA()
def showDetails(self, cell, detailsPos, detailsHeight, event=None): self.notify.debug('Item showDetails') if self.manager.heldItem and self.manager.locked and cell.isEmpty( ) or not (self.itemTuple): self.notify.debug(' early exit') return None itemId = self.getId() self.helpFrame = DirectFrame(parent=self.manager, relief=None, state=DGG.DISABLED, sortOrder=1) self.helpFrame.setBin('gui-popup', -5) detailGui = loader.loadModel('models/gui/gui_card_detail') topGui = loader.loadModel('models/gui/toplevel_gui') coinImage = topGui.find('**/treasure_w_coin*') halfWidth = 0.29999999999999999 halfHeight = 0.20000000000000001 basePosX = cell.getX(aspect2d) basePosZ = cell.getZ(aspect2d) cellSizeX = 0.0 cellSizeZ = 0.0 if cell: cellSizeX = cell.cellSizeX cellSizeZ = cell.cellSizeZ textScale = PiratesGuiGlobals.TextScaleMed titleScale = PiratesGuiGlobals.TextScaleTitleSmall if len(self.getName()) >= 30: titleNameScale = PiratesGuiGlobals.TextScaleLarge else: titleNameScale = PiratesGuiGlobals.TextScaleExtraLarge subtitleScale = PiratesGuiGlobals.TextScaleMed iconScalar = 1.5 borderScaler = 0.25 splitHeight = 0.01 vMargin = 0.029999999999999999 runningVertPosition = 0.29999999999999999 runningSize = 0.0 labels = [] titleColor = PiratesGuiGlobals.TextFG6 rarity = ItemGlobals.getRarity(itemId) rarityText = PLocalizer.getItemRarityName(rarity) typeText = PLocalizer.getJewelryTypeName(ItemGlobals.getType(itemId)) if rarity == ItemGlobals.CRUDE: titleColor = PiratesGuiGlobals.TextFG24 elif rarity == ItemGlobals.COMMON: titleColor = PiratesGuiGlobals.TextFG13 elif rarity == ItemGlobals.RARE: titleColor = PiratesGuiGlobals.TextFG4 elif rarity == ItemGlobals.FAMED: titleColor = PiratesGuiGlobals.TextFG5 titleLabel = DirectLabel(parent=self, relief=None, text=self.getName(), text_scale=titleNameScale, text_fg=titleColor, text_shadow=PiratesGuiGlobals.TextShadow, text_align=TextNode.ACenter, pos=(0.0, 0.0, runningVertPosition), text_pos=(0.0, -textScale)) self.bg.setColor(titleColor) tHeight = 0.070000000000000007 titleLabel.setZ(runningVertPosition) runningVertPosition -= tHeight runningSize += tHeight labels.append(titleLabel) subtitleLabel = DirectLabel(parent=self, relief=None, text='\x1slant\x1%s %s\x2' % (rarityText, typeText), text_scale=subtitleScale, text_fg=PiratesGuiGlobals.TextFG2, text_shadow=PiratesGuiGlobals.TextShadow, text_align=TextNode.ACenter, pos=(0.0, 0.0, runningVertPosition), text_pos=(0.0, -textScale)) subtHeight = 0.050000000000000003 subtitleLabel.setZ(subtHeight * 0.5 + runningVertPosition) runningVertPosition -= subtHeight runningSize += subtHeight labels.append(subtitleLabel) gender = localAvatar.style.gender dna = HumanDNA.HumanDNA(gender) dna.copy(localAvatar.style) bodyShape = localAvatar.style.getBodyShape() bodyHeight = localAvatar.style.getBodyHeight() bodyOffset = 0.5 browOffset = 0 earOffset = 0 noseOffset = 0 mouthOffset = 0 handOffset = 0 if bodyShape == 0: bodyOffset = 0.5 if gender == 'm': browOffset = 0.75 earOffset = 0.65000000000000002 noseOffset = 0.69999999999999996 mouthOffset = 0.75 handOffset = 0.40000000000000002 elif gender == 'f': browOffset = 0.55000000000000004 earOffset = 0.55000000000000004 noseOffset = 0.45000000000000001 mouthOffset = 0.65000000000000002 handOffset = 0.29999999999999999 elif bodyShape == 1: bodyOffset = 0.5 if gender == 'm': browOffset = 0.20000000000000001 earOffset = 0.20000000000000001 noseOffset = 0.10000000000000001 mouthOffset = 0.20000000000000001 handOffset = 0.20000000000000001 elif gender == 'f': browOffset = 0.5 earOffset = 0.5 noseOffset = 0.40000000000000002 mouthOffset = 0.5 handOffset = 0.20000000000000001 elif bodyShape == 2: bodyOffset = 0.5 if gender == 'm': browOffset = 0.10000000000000001 earOffset = 0.10000000000000001 noseOffset = -0.050000000000000003 mouthOffset = 0.10000000000000001 handOffset = 0.10000000000000001 elif gender == 'f': browOffset = -0.10000000000000001 earOffset = -0.10000000000000001 noseOffset = -0.20000000000000001 mouthOffset = -0.10000000000000001 handOffset = -0.10000000000000001 elif bodyShape == 3: bodyOffset = 0.5 if gender == 'm': browOffset = 0.20000000000000001 earOffset = 0.20000000000000001 noseOffset = 0.050000000000000003 mouthOffset = 0.20000000000000001 handOffset = 0.20000000000000001 elif gender == 'f': browOffset = -0.40000000000000002 earOffset = -0.40000000000000002 noseOffset = -0.45000000000000001 mouthOffset = -0.29999999999999999 handOffset = -0.20000000000000001 elif bodyShape == 4: bodyOffset = 0.5 if gender == 'm': browOffset = -0.20000000000000001 earOffset = -0.20000000000000001 noseOffset = -0.29999999999999999 mouthOffset = -0.14999999999999999 handOffset = -0.050000000000000003 elif gender == 'f': browOffset = 0.10000000000000001 earOffset = 0.10000000000000001 noseOffset = 0.0 mouthOffset = 0.10000000000000001 handOffset = 0.0 elif bodyShape == 5: bodyOffset = 0.5 if gender == 'm': browOffset = 0.10000000000000001 earOffset = 0.10000000000000001 noseOffset = -0.050000000000000003 mouthOffset = 0.10000000000000001 handOffset = 0.10000000000000001 elif gender == 'f': browOffset = -0.050000000000000003 earOffset = -0.10000000000000001 noseOffset = -0.14999999999999999 mouthOffset = -0.050000000000000003 handOffset = -0.10000000000000001 elif bodyShape == 6: bodyOffset = 0.5 if gender == 'm': browOffset = 0.10000000000000001 earOffset = 0.10000000000000001 noseOffset = -0.050000000000000003 mouthOffset = 0.10000000000000001 handOffset = 0.10000000000000001 elif gender == 'f': browOffset = 0.40000000000000002 earOffset = 0.40000000000000002 noseOffset = 0.25 mouthOffset = 0.40000000000000002 handOffset = 0.10000000000000001 elif bodyShape == 7: bodyOffset = 0.5 if gender == 'm': browOffset = 0.10000000000000001 earOffset = 0.10000000000000001 noseOffset = -0.050000000000000003 mouthOffset = 0.10000000000000001 handOffset = 0.10000000000000001 elif gender == 'f': browOffset = 0.0 earOffset = -0.050000000000000003 noseOffset = -0.10000000000000001 mouthOffset = 0.0 handOffset = -0.050000000000000003 elif bodyShape == 8: bodyOffset = 0.5 if gender == 'm': browOffset = -0.10000000000000001 earOffset = -0.10000000000000001 noseOffset = -0.20000000000000001 mouthOffset = -0.050000000000000003 handOffset = -0.050000000000000003 elif gender == 'f': browOffset = -0.14999999999999999 earOffset = -0.14999999999999999 noseOffset = -0.25 mouthOffset = -0.14999999999999999 handOffset = -0.10000000000000001 elif bodyShape == 9: bodyOffset = 0.5 if gender == 'm': browOffset = -0.20000000000000001 earOffset = -0.20000000000000001 noseOffset = -0.29999999999999999 mouthOffset = -0.10000000000000001 handOffset = -0.050000000000000003 elif gender == 'f': browOffset = -0.34999999999999998 earOffset = -0.34999999999999998 noseOffset = -0.45000000000000001 mouthOffset = -0.34999999999999998 handOffset = -0.20000000000000001 m = Mat4(Mat4.identMat()) itemType = ItemGlobals.getType(itemId) if itemType == ItemGlobals.BROW: jewelType = JewelryGlobals.LBROW elif itemType == ItemGlobals.EAR: jewelType = JewelryGlobals.LEAR elif itemType == ItemGlobals.NOSE: jewelType = JewelryGlobals.NOSE elif itemType == ItemGlobals.MOUTH: jewelType = JewelryGlobals.MOUTH elif itemType == ItemGlobals.HAND: jewelType = JewelryGlobals.LHAND primaryColor = ItemGlobals.getPrimaryColor(itemId) secondaryColor = ItemGlobals.getSecondaryColor(itemId) if localAvatar.style.gender == 'm': maleModelId = ItemGlobals.getMaleModelId(itemId) if maleModelId: jewelId = maleModelId dna = HumanDNA.HumanDNA(localAvatar.style.gender) dna.copy(localAvatar.style) gender = 'm' else: jewelId = ItemGlobals.getFemaleModelId(itemId) dna = HumanDNA.HumanDNA('f') gender = 'f' else: femaleModelId = ItemGlobals.getFemaleModelId(itemId) if femaleModelId: jewelId = femaleModelId dna = HumanDNA.HumanDNA(localAvatar.style.gender) dna.copy(localAvatar.style) gender = 'f' else: jewelId = ItemGlobals.getMaleModelId(itemId) dna = HumanDNA.HumanDNA('m') gender = 'm' if jewelType == JewelryGlobals.LBROW: dna.setJewelryZone3(jewelId, primaryColor, secondaryColor) elif jewelType == JewelryGlobals.LEAR: dna.setJewelryZone1(jewelId, primaryColor, secondaryColor) elif jewelType == JewelryGlobals.NOSE: dna.setJewelryZone5(jewelId, primaryColor, secondaryColor) elif jewelType == JewelryGlobals.MOUTH: dna.setJewelryZone6(jewelId, primaryColor, secondaryColor) elif jewelType == JewelryGlobals.LHAND: dna.setJewelryZone7(jewelId, primaryColor, secondaryColor) dna.setClothesHat(0, 0) self.displayHuman.setDNAString(dna) self.displayHuman.generateHuman(gender, self.masterHuman) self.displayHuman.stopBlink() self.displayHuman.pose('idle', 1) lodNode = self.displayHuman.find('**/+LODNode').node() lodNode.forceSwitch(lodNode.getHighestSwitch()) if jewelType == JewelryGlobals.LBROW: self.displayHuman.getLOD('2000').getChild(0).node().findJoint( 'trs_right_eyebrow').getNetTransform(m) rightEyeHeight = TransformState.makeMat(m).getPos().getZ() if gender == 'f': offsetX = 0.40000000000000002 offsetZ = -rightEyeHeight + browOffset - bodyHeight * 1.0 offsetY = 0.25 + bodyOffset else: offsetX = 0.29999999999999999 offsetZ = -rightEyeHeight * 0.98999999999999999 + browOffset - bodyHeight * 1.0 offsetY = 0.14999999999999999 + bodyOffset offsetH = -240 elif jewelType == JewelryGlobals.LEAR: self.displayHuman.getLOD('2000').getChild(0).node().findJoint( 'def_trs_left_ear').getNetTransform(m) leftEarHeight = TransformState.makeMat(m).getPos().getZ() if gender == 'f': offsetZ = -leftEarHeight + earOffset - bodyHeight * 1.0 offsetY = 0.40000000000000002 + bodyOffset offsetX = 0.14999999999999999 else: offsetZ = -leftEarHeight * 0.98999999999999999 + earOffset - bodyHeight * 1.0 offsetY = 0.29999999999999999 + bodyOffset offsetX = 0.040000000000000001 offsetH = -250 elif jewelType == JewelryGlobals.NOSE: self.displayHuman.getLOD('2000').getChild(0).node().findJoint( 'def_trs_mid_nose_bot').getNetTransform(m) noseHeight = TransformState.makeMat(m).getPos().getZ() if gender == 'f': offsetZ = -noseHeight + 0.089999999999999997 + noseOffset - bodyHeight * 0.80000000000000004 offsetY = 0.45000000000000001 + bodyOffset else: offsetZ = -noseHeight + 0.10000000000000001 + noseOffset - bodyHeight * 0.80000000000000004 offsetY = 0.40000000000000002 + bodyOffset offsetX = 0.059999999999999998 offsetH = 180 elif jewelType == JewelryGlobals.MOUTH: self.displayHuman.getLOD('2000').getChild(0).node().findJoint( 'trs_lips_top').getNetTransform(m) mouthHeight = TransformState.makeMat(m).getPos().getZ() offsetZ = -mouthHeight + 0.02 + mouthOffset - bodyHeight * 1.1000000000000001 offsetY = 0.59999999999999998 + bodyOffset offsetX = 0.080000000000000002 offsetH = 180 elif jewelType == JewelryGlobals.LHAND: self.displayHuman.getLOD('2000').getChild(0).node().findJoint( 'def_left_index01').getNetTransform(m) leftIndexHeight = TransformState.makeMat(m).getPos().getZ() if gender == 'f': offsetZ = -leftIndexHeight + 0.050000000000000003 + handOffset - bodyHeight * 0.5 offsetX = -0.69999999999999996 offsetY = 1.25 + bodyOffset else: offsetZ = -leftIndexHeight + handOffset - bodyHeight * 0.5 if bodyShape == 4: offsetX = -1.0 offsetY = 1.75 + bodyOffset elif bodyShape == 3: offsetX = -0.69999999999999996 offsetY = 1.25 + bodyOffset elif bodyShape == 1: offsetX = -0.69999999999999996 offsetY = 1.25 + bodyOffset elif bodyShape == 0: offsetX = -0.69999999999999996 offsetY = 1.25 + bodyOffset else: offsetX = -0.80000000000000004 offsetY = 1.25 + bodyOffset offsetH = 160 else: offsetZ = 0.0 offsetY = 0.0 offsetX = 0.0 offsetH = 0 self.displayHuman.setY(offsetY) self.displayHuman.setZ(offsetZ) self.displayHuman.setX(offsetX) self.displayHuman.setH(offsetH) self.displayHuman.reparentTo(self.portraitSceneGraph) iHeight = 0.17999999999999999 self.createBuffer() self.itemCard.setZ(runningVertPosition - 0.059999999999999998) runningVertPosition -= iHeight runningSize += iHeight labels.append(self.itemCard) itemCost = int(ItemGlobals.getGoldCost(itemId)) if self.cell and self.cell.container: itemCost = int(itemCost * self.cell.container.getItemPriceMult()) goldLabel = DirectLabel( parent=self, relief=None, image=coinImage, image_scale=0.12, image_pos=Vec3(0.025000000000000001, 0, -0.02), text=str(itemCost), text_scale=subtitleScale, text_align=TextNode.ARight, text_fg=PiratesGuiGlobals.TextFG1, text_shadow=PiratesGuiGlobals.TextShadow, pos=(halfWidth - 0.050000000000000003, 0.0, runningVertPosition + 0.080000000000000002), text_pos=(0.0, -textScale)) labels.append(goldLabel) descriptionLabel = DirectLabel( parent=self, relief=None, text=PLocalizer.getItemFlavorText(itemId), text_scale=textScale, text_wordwrap=halfWidth * 2.0 * (0.94999999999999996 / textScale), text_fg=PiratesGuiGlobals.TextFG0, text_align=TextNode.ALeft, pos=(-halfWidth + textScale * 0.5, 0.0, runningVertPosition), text_pos=(0.0, -textScale)) dHeight = descriptionLabel.getHeight() + 0.02 runningVertPosition -= dHeight runningSize += dHeight labels.append(descriptionLabel) if not Freebooter.getPaidStatus(localAvatar.getDoId()): if rarity != ItemGlobals.CRUDE: unlimitedLabel = DirectLabel( parent=self, relief=None, text=PLocalizer.UnlimitedAccessRequirement, text_scale=textScale, text_wordwrap=halfWidth * 2.0 * (1.5 / titleScale), text_fg=PiratesGuiGlobals.TextFG6, text_shadow=PiratesGuiGlobals.TextShadow, text_align=TextNode.ACenter, pos=(0.0, 0.0, runningVertPosition), text_pos=(0.0, -textScale)) uHeight = unlimitedLabel.getHeight() runningVertPosition -= uHeight runningSize += uHeight labels.append(unlimitedLabel) runningVertPosition -= 0.02 runningSize += 0.02 panels = self.helpFrame.attachNewNode('panels') topPanel = panels.attachNewNode('middlePanel') detailGui.find('**/top_panel').copyTo(topPanel) topPanel.setScale(0.080000000000000002) topPanel.reparentTo(self.helpFrame) middlePanel = panels.attachNewNode('middlePanel') detailGui.find('**/middle_panel').copyTo(middlePanel) middlePanel.setScale(0.080000000000000002) middlePanel.reparentTo(self.helpFrame) placement = 0 i = 0 heightMax = -0.080000000000000002 currentHeight = runningVertPosition if detailsHeight: currentHeight = -detailsHeight while currentHeight < heightMax: middlePanel = panels.attachNewNode('middlePanel%s' % 1) detailGui.find('**/middle_panel').copyTo(middlePanel) middlePanel.setScale(0.080000000000000002) middlePanel.reparentTo(self.helpFrame) if currentHeight + 0.20000000000000001 >= heightMax: difference = heightMax - currentHeight placement += (0.16800000000000001 / 0.20000000000000001) * difference currentHeight += difference else: placement += 0.16800000000000001 currentHeight += 0.20000000000000001 middlePanel.setZ(-placement) i += 1 bottomPanel = panels.attachNewNode('bottomPanel') detailGui.find('**/bottom_panel').copyTo(bottomPanel) bottomPanel.setScale(0.080000000000000002) bottomPanel.setZ(-placement) bottomPanel.reparentTo(self.helpFrame) colorPanel = self.helpFrame.attachNewNode('colorPanel') detailGui.find('**/color').copyTo(colorPanel) colorPanel.setScale(0.080000000000000002) colorPanel.setColor(titleColor) colorPanel.reparentTo(self.helpFrame) lineBreakTopPanel = panels.attachNewNode('lineBreakTopPanel') detailGui.find('**/line_break_top').copyTo(lineBreakTopPanel) lineBreakTopPanel.setScale(0.080000000000000002, 0.080000000000000002, 0.070000000000000007) lineBreakTopPanel.setZ(0.0080000000000000002) lineBreakTopPanel.reparentTo(self.helpFrame) panels.flattenStrong() self.helpFrame['frameSize'] = (-halfWidth, halfWidth, -(runningSize + vMargin), vMargin) totalHeight = self.helpFrame.getHeight() - 0.10000000000000001 for label in labels: label.reparentTo(self.helpFrame) if basePosX > 0.0: newPosX = basePosX - halfWidth + cellSizeX * 0.45000000000000001 else: newPosX = basePosX + halfWidth + cellSizeX * 0.45000000000000001 if basePosZ > 0.0: newPosZ = basePosZ + cellSizeZ * 0.45000000000000001 else: newPosZ = basePosZ + totalHeight - cellSizeZ * 0.75 if detailsPos: (newPosX, newPosZ) = detailsPos self.helpFrame.setPos(newPosX, 0, newPosZ)