def loadStats(self): self.stats = ShipGlobals.getShipConfig(self.shipClass) self.maxHp = self.stats['hp'] self.maxSp = self.stats['sp'] self.maxMastHealth = ShipGlobals.getMastHealth(self.shipClass, self.maxSp) self.maxArmor = ShipGlobals.getHullArmor(self.modelClass) self.maxHp = int( self.maxHp * ShipUpgradeGlobals.HULL_TYPES[self.customHull]['Armor']) self.Hp = self.maxHp * (self.healthState / 100.0) self.maxCrew = self.stats['maxCrew'] self.acceleration = self.stats['acceleration'] self.maxSpeed = self.stats['maxSpeed'] self.reverseAcceleration = self.stats['reverseAcceleration'] self.maxReverseSpeed = self.stats['maxReverseSpeed'] self.turnRate = self.stats['turn'] self.maxTurn = self.stats['maxTurn'] shipTypeInfo = ShipGlobals.getShipConfig(self.shipClass) self.maxCargo = int( shipTypeInfo['maxCargo'] * ShipUpgradeGlobals.HULL_TYPES[self.customHull]['Cargo']) self.cannonConfig = self.stats['cannons'] self.lBroadsideConfig = self.stats['leftBroadsides'] self.rBroadsideConfig = self.stats['rightBroadsides']
def manufactureCannons(self, detailLevel=2): stats = ShipGlobals.getShipConfig(self.shipClass) cannonConfig = stats['cannons'] leftConfig = stats['leftBroadsides'] rightConfig = stats['rightBroadsides'] cannons = {} for i in range(len(cannonConfig)): cannonType = cannonConfig[i] cannon = Cannon.Cannon(None) cannon.loadModel(None, cannonType) cannons[i] = [cannon, 0] broadsides = [[[], []], None] for i in range(len(leftConfig)): if leftConfig[i] > 0: cannon = CannonPort.CannonPort(leftConfig[i], 0, i) broadsides[0][0].append(cannon) continue broadsides[0][0].append(None) for i in range(len(rightConfig)): if rightConfig[i] > 0: cannon = CannonPort.CannonPort(rightConfig[i], 1, i) broadsides[0][1].append(cannon) continue broadsides[0][1].append(None) self.setupCannons(cannons, broadsides, detailLevel)
def enableStats(self, shipName = '', shipClass = 0, mastInfo = [], hp = 0, sp = 0, cargo = 0, crew = 0, time = 0): hullInfo = ShipGlobals.getShipConfig(shipClass) self.shipClass = shipClass self.snapShot = ShipSnapshot(self, None, self['siegeTeam'], shipName, shipClass, mastInfo, hp, hullInfo['hp'], sp, hullInfo['sp'], cargo, hullInfo['maxCargo'], crew, hullInfo['maxCrew'], time, pos = self['snapShotPos']) typeStr = self['avatarName'] if self['shipType'] is ShipFrameSelect.STBand: self.button['text'] = PLocalizer.BoardShip elif self['shipType'] is ShipFrameSelect.STGuild: self.button['text'] = PLocalizer.BoardShip elif self['shipType'] is ShipFrameSelect.STFriend: self.button['text'] = PLocalizer.BoardShip elif self['shipType'] is ShipFrameSelect.STPublic: self.button['text'] = PLocalizer.BoardShip else: typeStr = '' stateStr = PLocalizer.ShipAtSea if hp <= 0: self.button['state'] = DGG.DISABLED stateStr = '\x01red\x01%s\x02' % (PLocalizer.ShipSunk,) self['shipColorScale'] = VBase4(0.80000000000000004, 0.29999999999999999, 0.29999999999999999, 1) elif crew >= hullInfo['maxCrew']: self.button['state'] = DGG.DISABLED stateStr = '\x01red\x01%s\x02' % (PLocalizer.ShipFull,) self['shipColorScale'] = VBase4(0.40000000000000002, 0.40000000000000002, 0.40000000000000002, 1) else: self.button['state'] = DGG.NORMAL if typeStr: self.typeLabel['text'] = '\x01smallCaps\x01(%s)\x02' % typeStr
def setCargo(self, cargo): self.cargo = cargo shipTypeInfo = ShipGlobals.getShipConfig(self.shipClass) maxCargo = int(shipTypeInfo['maxCargo'] * ShipUpgradeGlobals.HULL_TYPES[self.customHull]['Cargo']) messenger.send('setShipCargo-%s' % self.getDoId(), [self.cargo, maxCargo])
def enableStats(self, shipName='', shipClass=0, mastInfo=[], hp=0, sp=0, cargo=0, crew=0, time=0): hullInfo = ShipGlobals.getShipConfig(shipClass) self.shipClass = shipClass self.snapShot = ShipSnapshot(self, None, self['siegeTeam'], shipName, shipClass, mastInfo, hp, hullInfo['hp'], sp, hullInfo['sp'], cargo, hullInfo['maxCargo'], crew, hullInfo['maxCrew'], time, pos=self['snapShotPos']) typeStr = self['avatarName'] if self['shipType'] is ShipFrameSelect.STBand: self.button['text'] = PLocalizer.BoardShip else: if self['shipType'] is ShipFrameSelect.STGuild: self.button['text'] = PLocalizer.BoardShip else: if self['shipType'] is ShipFrameSelect.STFriend: self.button['text'] = PLocalizer.BoardShip else: if self['shipType'] is ShipFrameSelect.STPublic: self.button['text'] = PLocalizer.BoardShip else: typeStr = '' stateStr = PLocalizer.ShipAtSea if hp <= 0: self.button['state'] = DGG.DISABLED stateStr = '\x01red\x01%s\x02' % (PLocalizer.ShipSunk,) self['shipColorScale'] = VBase4(0.8, 0.3, 0.3, 1) else: if crew >= hullInfo['maxCrew']: self.button['state'] = DGG.DISABLED stateStr = '\x01red\x01%s\x02' % (PLocalizer.ShipFull,) self['shipColorScale'] = VBase4(0.4, 0.4, 0.4, 1) else: self.button['state'] = DGG.NORMAL if typeStr: self.typeLabel['text'] = '\x01smallCaps\x01(%s)\x02' % typeStr return
def manufactureCannons(self, detailLevel = 2): stats = ShipGlobals.getShipConfig(self.shipClass) cannonConfig = stats['cannons'] leftConfig = stats['leftBroadsides'] rightConfig = stats['rightBroadsides'] cannons = { } for i in range(len(cannonConfig)): cannonType = cannonConfig[i] cannon = Cannon.Cannon(None) cannon.loadModel(None, cannonType) cannons[i] = [ cannon, 0] broadsides = [ [ [], []], None] for i in range(len(leftConfig)): if leftConfig[i] > 0: cannon = CannonPort.CannonPort(leftConfig[i], 0, i) broadsides[0][0].append(cannon) continue broadsides[0][0].append(None) for i in range(len(rightConfig)): if rightConfig[i] > 0: cannon = CannonPort.CannonPort(rightConfig[i], 1, i) broadsides[0][1].append(cannon) continue broadsides[0][1].append(None) self.setupCannons(cannons, broadsides, detailLevel)
def updateStats(self): self.statData = [] stats = ShipGlobals.getShipConfig(self.purchaseInventory[0][0]) maxStats = ShipGlobals.getMaxShipStats() self.statData.append([ PLocalizer.Hull, stats['hp'], maxStats['hp']]) self.statData.append([ PLocalizer.Speed, int(stats['sp'] / 10), 4 + maxStats['sp'] / 10]) self.statData.append([ PLocalizer.Speed, int(stats['maxSpeed'] / 10), 4 + maxStats['maxSpeed'] / 10]) self.statData.append([ PLocalizer.Cannon, stats['maxCannons'], maxStats['maxCannons']]) self.statData.append([ PLocalizer.Broadsides, stats['maxBroadsides'], maxStats['maxBroadsides']]) self.statData.append([ PLocalizer.Cargo, stats['maxCargo'], maxStats['maxCargo']]) self.statData.append([ PLocalizer.Crew, stats['maxCrew'], maxStats['maxCrew']])
def updateStats(self): self.statData = [] stats = ShipGlobals.getShipConfig(self.purchaseInventory[0][0]) maxStats = ShipGlobals.getMaxShipStats() self.statData.append([ PLocalizer.Hull, stats['hp'], maxStats['hp']]) self.statData.append([ PLocalizer.Speed, int(stats['sp'] / 10), 4 + maxStats['sp'] / 10]) self.statData.append([ PLocalizer.Speed, int(stats['maxSpeed'] / 10), 4 + maxStats['maxSpeed'] / 10]) self.statData.append([ PLocalizer.Cannon, stats['maxCannons'], maxStats['maxCannons']]) self.statData.append([ PLocalizer.Broadsides, stats['maxBroadsides'], maxStats['maxBroadsides']]) self.statData.append([ PLocalizer.Cargo, stats['maxCargo'], maxStats['maxCargo']]) self.statData.append([ PLocalizer.Crew, stats['maxCrew'], maxStats['maxCrew']])
def setCustomization(self, customHull, customRigging, customPattern, customLogo): shipTypeInfo = ShipGlobals.getShipConfig(self['shipClass']) shipHullInfo = ShipUpgradeGlobals.HULL_TYPES.get(customHull) cargoMult = shipHullInfo['Cargo'] if self['shipOV']: cargo = len(self['shipOV'].cargo) maxCargo = shipTypeInfo['maxCargo'] else: cargo = self['cargo'] maxCargo = shipTypeInfo['maxCargo'] self.cargoMeter['text'] = '%d/%d' % (cargo, maxCargo * cargoMult)
def loadStats(self): self.stats = ShipGlobals.getShipConfig(self.shipClass) self.maxHp = self.stats['hp'] self.maxSp = self.stats['sp'] self.maxMastHealth = ShipGlobals.getMastHealth(self.shipClass, self.maxSp) self.maxArmor = ShipGlobals.getHullArmor(self.modelClass) self.maxCrew = self.stats['maxCrew'] self.acceleration = self.stats['acceleration'] self.maxSpeed = self.stats['maxSpeed'] self.reverseAcceleration = self.stats['reverseAcceleration'] self.maxReverseSpeed = self.stats['maxReverseSpeed'] self.turnRate = self.stats['turn'] self.maxTurn = self.stats['maxTurn'] self.maxCargo = self.stats['maxCargo'] self.cannonConfig = self.stats['cannons'] self.lBroadsideConfig = self.stats['leftBroadsides'] self.rBroadsideConfig = self.stats['rightBroadsides']
def loadStats(self): self.stats = ShipGlobals.getShipConfig(self.shipClass) self.maxHp = self.stats['hp'] self.maxSp = self.stats['sp'] self.maxMastHealth = ShipGlobals.getMastHealth(self.shipClass, self.maxSp) self.maxArmor = ShipGlobals.getHullArmor(self.modelClass) self.maxCrew = self.stats['maxCrew'] self.acceleration = self.stats['acceleration'] self.maxSpeed = self.stats['maxSpeed'] self.reverseAcceleration = self.stats['reverseAcceleration'] self.maxReverseSpeed = self.stats['maxReverseSpeed'] self.turnRate = self.stats['turn'] self.maxTurn = self.stats['maxTurn'] self.maxCargo = self.stats['maxCargo'] self.cannonConfig = self.stats['cannons'] self.lBroadsideConfig = self.stats['leftBroadsides'] self.rBroadsideConfig = self.stats['rightBroadsides']
def getShip( self, shipClass, style=ShipGlobals.Styles.Undefined, logo=ShipGlobals.Logos.Undefined, hullDesign=None, detailLevel=2, wantWheel=True, hullMaterial=None, sailMaterial=None, sailPattern=None, prowType=None, ): Ship = Ship import pirates.ship modelClass = ShipGlobals.getModelClass(shipClass) shipConfig = ShipGlobals.getShipConfig(shipClass) if style == ShipGlobals.Styles.Undefined: style = shipConfig["defaultStyle"] complexCustomization = 0 if sailPattern and sailMaterial and hullMaterial or SailReplace.has_key(shipClass): complexCustomization = 1 if not prowType: prowType = shipConfig["prow"] if not hullMaterial: hullMaterial = style if not sailMaterial: if SailReplace.has_key(shipClass): sailMaterial = SailReplace[shipClass] else: sailMaterial = style if not sailPattern: sailPattern = style shipHullTexture = ShipBlueprints.getShipTexture(hullMaterial) shipTextureSail = ShipBlueprints.getShipTexture(sailMaterial) logoTex = None if logo: logoTex = ShipBlueprints.getLogoTexture(logo) sailPatternTex = None if sailPattern: sailPatternTex = ShipBlueprints.getSailTexture(sailPattern) self.notify.debug("%s %s" % (sailPattern, logo)) if logo == ShipGlobals.Logos.Undefined: logo = shipConfig["sailLogo"] if logo in ShipGlobals.MAST_LOGO_PLACEMENT_LIST: placeLogos = 1 else: placeLogos = 0 if modelClass <= ShipGlobals.INTERCEPTORL3: mastHax = True else: mastHax = False customHull = hullDesign is not None if not logo != 0: pass customMasts = sailPattern != 0 hull = self.getHull(modelClass, customHull) breakAnims = {} metaAnims = {} hitAnims = {} root = NodePath("Ship") hull.locators.reparentTo(root) charRoot = root.attachNewNode(Character("ShipChar")) collisions = root.attachNewNode("collisions") lodNode = charRoot.attachNewNode(LODNode("lod")) if detailLevel == 0: lodNode.node().addSwitch(200, 0) lodNode.node().addSwitch(800, 200) lodNode.node().addSwitch(100000, 800) high = lodNode.attachNewNode("high") low = lodNode.attachNewNode("low") med = NodePath("med") superlow = lodNode.attachNewNode("superlow") elif detailLevel == 1: lodNode.node().addSwitch(300, 0) lodNode.node().addSwitch(1000, 300) lodNode.node().addSwitch(2000, 1000) lodNode.node().addSwitch(100000, 2000) high = lodNode.attachNewNode("high") med = lodNode.attachNewNode("med") low = lodNode.attachNewNode("low") superlow = lodNode.attachNewNode("superlow") else: lodNode.node().addSwitch(750, 0) lodNode.node().addSwitch(3000, 750) lodNode.node().addSwitch(8000, 3000) lodNode.node().addSwitch(100000, 8000) high = lodNode.attachNewNode("high") med = lodNode.attachNewNode("med") low = lodNode.attachNewNode("low") superlow = lodNode.attachNewNode("superlow") mastSetup = ShipGlobals.getMastSetup(shipClass) for data in [ (0, "location_mainmast_0"), (1, "location_mainmast_1"), (2, "location_mainmast_2"), (3, "location_aftmast*"), (4, "location_foremast*"), ]: mastData = mastSetup.get(data[0]) if mastData: mast = self.mastSets[mastData[0]].getMastSet(mastData[1] - 1, customMasts) mastRoot = hull.locators.find("**/%s" % data[1]).getTransform(hull.locators) model = NodePath(mast.charRoot) model.setTransform(mastRoot) if complexCustomization: model.setTexture(shipTextureSail) useLogoTex = logoTex if placeLogos: mastNum = data[0] if mastNum not in ShipGlobals.MAST_LOGO_PLACEMENT.get(modelClass): useLogoTex = None charBundle = mast.charRoot.getBundle(0) if data[0] < 3: for side in ["left", "right"]: ropeNode = hull.locators.find("**/location_ropeLadder_%s_%s" % (side, data[0])) if ropeNode: transform = ropeNode.getTransform(NodePath(mast.charRoot)) charBundle.findChild("def_ladder_0_%s" % side).applyFreeze(transform) continue if sailPatternTex and useLogoTex: for node in model.findAllMatches("**/sails"): node.setTextureOff(TextureStage.getDefault()) node.setTexture(self.colorLayer, sailPatternTex) node.setTexture(self.logoLayer, logoTex) node.setTexture(self.vertLayer, shipTextureSail) node.setTexture(self.baseLayer, shipTextureSail) elif sailPatternTex: for node in model.findAllMatches("**/sails"): node.setTextureOff(TextureStage.getDefault()) node.setTexture(self.colorLayer, sailPatternTex) node.setTexture(self.vertLayer, shipTextureSail) node.setTexture(self.baseLayer, shipTextureSail) elif useLogoTex: for node in model.findAllMatches("**/sails"): node.setTextureOff(TextureStage.getDefault()) node.setTexture(self.logoLayerNoColor, logoTex) node.setTexture(self.vertLayer, shipTextureSail) node.setTexture(self.baseLayer, shipTextureSail) model.flattenLight() if detailLevel == 0: model.find("**/low").copyTo(high) model.find("**/low").copyTo(low) model.find("**/superlow").copyTo(superlow) elif detailLevel == 1: model.find("**/med").copyTo(high) model.find("**/med").copyTo(med) low.node().stealChildren(model.find("**/low").node()) superlow.node().stealChildren(model.find("**/superlow").node()) elif detailLevel == 2: high.node().stealChildren(model.find("**/high").node()) med.node().stealChildren(model.find("**/med").node()) low.node().stealChildren(model.find("**/low").node()) superlow.node().stealChildren(model.find("**/superlow").node()) mastRoot = mast.collisions.find("**/collision_masts") if modelClass > ShipGlobals.INTERCEPTORL3 or data[0] != 3: mastCode = str(data[0]) mastRoot.setTag("Mast Code", mastCode) else: mastRoot.setName("colldision_sub_mast") mastRoot.reparentTo(collisions.find("**/collision_masts")) mastCode = "0" for coll in mast.collisions.findAllMatches("**/collision_sail_*"): coll.setName("Sail-%s" % data[0]) coll.setTag("Mast Code", mastCode) for coll in mast.collisions.findAllMatches("**/sail_*"): coll.setName("Sail-%s" % data[0]) coll.setTag("Mast Code", mastCode) collisions.node().stealChildren(mast.collisions.node()) charBundle = mast.charRoot.getBundle(0) if mastHax and data[0] == 3: breakAnims[0][0].storeAnim( charBundle.loadBindAnim(loader.loader, mast.breakAnim[0], -1, MastSubset, True), "1" ) breakAnims[0][1].storeAnim( charBundle.loadBindAnim(loader.loader, mast.breakAnim[1], -1, MastSubset, True), "1" ) tempHit = hitAnims[0] tempHit[0].storeAnim( charBundle.loadBindAnim(loader.loader, mast.hitAnim, -1, HitMastSubset, True), "1" ) tempHit[1].storeAnim( charBundle.loadBindAnim(loader.loader, mast.hitAnim, -1, PartSubset(), True), "1" ) else: breakAnims[data[0]] = (AnimControlCollection(), AnimControlCollection()) breakAnims[data[0]][0].storeAnim( charBundle.loadBindAnim(loader.loader, mast.breakAnim[0], -1, MastSubset, True), "0" ) breakAnims[data[0]][1].storeAnim( charBundle.loadBindAnim(loader.loader, mast.breakAnim[1], -1, MastSubset, True), "0" ) tempHit = [AnimControlCollection(), AnimControlCollection()] tempHit[0].storeAnim( charBundle.loadBindAnim(loader.loader, mast.hitAnim, -1, HitMastSubset, True), "0" ) tempHit[1].storeAnim( charBundle.loadBindAnim(loader.loader, mast.hitAnim, -1, PartSubset(), True), "0" ) hitAnims[data[0]] = tempHit for (anim, fileName) in mast.metaAnims.iteritems(): if anim not in metaAnims: metaAnims[anim] = AnimControlCollection() if anim not in MissingAnims.get(modelClass, []): ac = charBundle.loadBindAnim(loader.loader, fileName, -1, SailSubset, True) if ac: metaAnims[anim].storeAnim(ac, str(metaAnims[anim].getNumAnims())) charRoot.node().combineWith(mast.charRoot) continue if self.wantProws and prowType: (highSprit, medSprit, lowSprit) = self.sprits[prowType].getAsset() transform = hull.locators.find("**/location_bowsprit").getTransform(hull.locators) highSprit.setTransform(transform) medSprit.setTransform(transform) lowSprit.setTransform(transform) highSprit.reparentTo(hull.geoms[0]) medSprit.reparentTo(hull.geoms[1]) lowSprit.reparentTo(hull.geoms[2]) if wantWheel: shipWheel = ShipBlueprints.getWheel() wheelPoint = hull.locators.find("**/location_wheel;+s").getTransform(hull.locators) shipWheel.setTransform(wheelPoint) shipWheel.flattenLight() shipWheel.find("**/collisions").copyTo(collisions) hull.geoms[0].node().stealChildren(shipWheel.find("**/high").node()) hull.geoms[1].node().stealChildren(shipWheel.find("**/med").node()) hull.geoms[2].node().stealChildren(shipWheel.find("**/low").node()) if complexCustomization: hull.geoms[0].setTexture(shipHullTexture) hull.geoms[0].flattenLight() hull.geoms[1].setTexture(shipHullTexture) hull.geoms[1].flattenLight() hull.geoms[2].setTexture(shipHullTexture) hull.geoms[2].flattenLight() hull.geoms[3].setTexture(shipHullTexture) hull.geoms[3].flattenLight() high.attachNewNode(ModelNode("non-animated")).node().stealChildren(hull.geoms[0].node()) med.attachNewNode(ModelNode("non-animated")).node().stealChildren(hull.geoms[1].node()) low.attachNewNode(ModelNode("non-animated")).node().stealChildren(hull.geoms[2].node()) superlow.attachNewNode(ModelNode("non-animated")).node().stealChildren(hull.geoms[3].node()) collisions.node().stealChildren(hull.collisions.node()) hull.locators.stash() charRoot.flattenStrong() ship = Ship.Ship(shipClass, root, breakAnims, hitAnims, metaAnims, collisions, hull.locators) if not complexCustomization: ship.char.setTexture(shipHullTexture) return ship
def getShip(self, shipClass, style=ShipGlobals.Styles.Undefined, logo=ShipGlobals.Logos.Undefined, hullDesign=None, detailLevel=2, wantWheel=True, hullMaterial=None, sailMaterial=None, sailPattern=None, prowType=None, invertLogo=False): Ship = Ship import pirates.ship modelClass = ShipGlobals.getModelClass(shipClass) shipConfig = ShipGlobals.getShipConfig(shipClass) if style == ShipGlobals.Styles.Undefined: style = shipConfig['defaultStyle'] complexCustomization = 0 if sailPattern and sailMaterial and hullMaterial or SailReplace.has_key( shipClass): complexCustomization = 1 if not prowType: prowType = shipConfig['prow'] if not hullMaterial: hullMaterial = style if not sailMaterial: if SailReplace.has_key(shipClass): sailMaterial = SailReplace[shipClass] else: sailMaterial = style if not sailPattern: sailPattern = style shipHullTexture = ShipBlueprints.getShipTexture(hullMaterial) shipTextureSail = ShipBlueprints.getShipTexture(sailMaterial) logoTex = None if logo: logoTex = ShipBlueprints.getLogoTexture(logo) sailPatternTex = None if sailPattern: sailPatternTex = ShipBlueprints.getSailTexture(sailPattern) self.notify.debug('%s %s' % (sailPattern, logo)) if logo == ShipGlobals.Logos.Undefined: logo = shipConfig['sailLogo'] if logo in ShipGlobals.MAST_LOGO_PLACEMENT_LIST: placeLogos = 1 else: placeLogos = 0 if modelClass <= ShipGlobals.INTERCEPTORL3: mastHax = True else: mastHax = False customHull = hullDesign is not None if not logo != 0: pass customMasts = sailPattern != 0 hull = self.getHull(modelClass, customHull) breakAnims = {} metaAnims = {} hitAnims = {} root = NodePath('Ship') hull.locators.reparentTo(root) charRoot = root.attachNewNode(Character('ShipChar')) collisions = root.attachNewNode('collisions') lodNode = charRoot.attachNewNode(LODNode('lod')) if detailLevel == 0: lodNode.node().addSwitch(200, 0) lodNode.node().addSwitch(800, 200) lodNode.node().addSwitch(100000, 800) high = lodNode.attachNewNode('high') low = lodNode.attachNewNode('low') med = NodePath('med') superlow = lodNode.attachNewNode('superlow') elif detailLevel == 1: lodNode.node().addSwitch(300, 0) lodNode.node().addSwitch(1000, 300) lodNode.node().addSwitch(2000, 1000) lodNode.node().addSwitch(100000, 2000) high = lodNode.attachNewNode('high') med = lodNode.attachNewNode('med') low = lodNode.attachNewNode('low') superlow = lodNode.attachNewNode('superlow') else: lodNode.node().addSwitch(750, 0) lodNode.node().addSwitch(3000, 750) lodNode.node().addSwitch(8000, 3000) lodNode.node().addSwitch(100000, 8000) high = lodNode.attachNewNode('high') med = lodNode.attachNewNode('med') low = lodNode.attachNewNode('low') superlow = lodNode.attachNewNode('superlow') mastSetup = ShipGlobals.getMastSetup(shipClass) for data in [(0, 'location_mainmast_0'), (1, 'location_mainmast_1'), (2, 'location_mainmast_2'), (3, 'location_aftmast*'), (4, 'location_foremast*')]: mastData = mastSetup.get(data[0]) if mastData: mast = self.mastSets[mastData[0]].getMastSet( mastData[1] - 1, customMasts) mastRoot = hull.locators.find('**/%s' % data[1]).getTransform( hull.locators) model = NodePath(mast.charRoot) model.setTransform(mastRoot) if complexCustomization: model.setTexture(shipTextureSail) useLogoTex = logoTex if placeLogos: mastNum = data[0] if mastNum not in ShipGlobals.MAST_LOGO_PLACEMENT.get( modelClass): useLogoTex = None charBundle = mast.charRoot.getBundle(0) if data[0] < 3: for side in ['left', 'right']: ropeNode = hull.locators.find( '**/location_ropeLadder_%s_%s' % (side, data[0])) if ropeNode: transform = ropeNode.getTransform( NodePath(mast.charRoot)) charBundle.findChild('def_ladder_0_%s' % side).applyFreeze(transform) continue if sailPatternTex and useLogoTex: for node in model.findAllMatches('**/sails'): node.setTextureOff(TextureStage.getDefault()) node.setTexture(self.colorLayer, sailPatternTex) if invertLogo: node.setTexture(self.logoLayerInv, logoTex) else: node.setTexture(self.logoLayer, logoTex) node.setTexture(self.vertLayer, shipTextureSail) node.setTexture(self.baseLayer, shipTextureSail) elif sailPatternTex: for node in model.findAllMatches('**/sails'): node.setTextureOff(TextureStage.getDefault()) node.setTexture(self.colorLayer, sailPatternTex) node.setTexture(self.vertLayer, shipTextureSail) node.setTexture(self.baseLayer, shipTextureSail) elif useLogoTex: for node in model.findAllMatches('**/sails'): node.setTextureOff(TextureStage.getDefault()) if invertLogo: node.setTexture(self.logoLayerNoColorInv, logoTex) else: node.setTexture(self.logoLayerNoColor, logoTex) node.setTexture(self.vertLayer, shipTextureSail) node.setTexture(self.baseLayer, shipTextureSail) model.flattenLight() if detailLevel == 0: model.find('**/low').copyTo(high) model.find('**/low').copyTo(low) model.find('**/superlow').copyTo(superlow) elif detailLevel == 1: model.find('**/med').copyTo(high) model.find('**/med').copyTo(med) low.node().stealChildren(model.find('**/low').node()) superlow.node().stealChildren( model.find('**/superlow').node()) elif detailLevel == 2: high.node().stealChildren(model.find('**/high').node()) med.node().stealChildren(model.find('**/med').node()) low.node().stealChildren(model.find('**/low').node()) superlow.node().stealChildren( model.find('**/superlow').node()) mastRoot = mast.collisions.find('**/collision_masts') if modelClass > ShipGlobals.INTERCEPTORL3 or data[0] != 3: mastCode = str(data[0]) mastRoot.setTag('Mast Code', mastCode) else: mastRoot.setName('colldision_sub_mast') mastRoot.reparentTo(collisions.find('**/collision_masts')) mastCode = '0' for coll in mast.collisions.findAllMatches( '**/collision_sail_*'): coll.setName('Sail-%s' % data[0]) coll.setTag('Mast Code', mastCode) for coll in mast.collisions.findAllMatches('**/sail_*'): coll.setName('Sail-%s' % data[0]) coll.setTag('Mast Code', mastCode) collisions.node().stealChildren(mast.collisions.node()) charBundle = mast.charRoot.getBundle(0) if mastHax and data[0] == 3: breakAnims[0][0].storeAnim( charBundle.loadBindAnim(loader.loader, mast.breakAnim[0], -1, MastSubset, True), '1') breakAnims[0][1].storeAnim( charBundle.loadBindAnim(loader.loader, mast.breakAnim[1], -1, MastSubset, True), '1') tempHit = hitAnims[0] tempHit[0].storeAnim( charBundle.loadBindAnim(loader.loader, mast.hitAnim, -1, HitMastSubset, True), '1') tempHit[1].storeAnim( charBundle.loadBindAnim(loader.loader, mast.hitAnim, -1, PartSubset(), True), '1') else: breakAnims[data[0]] = (AnimControlCollection(), AnimControlCollection()) breakAnims[data[0]][0].storeAnim( charBundle.loadBindAnim(loader.loader, mast.breakAnim[0], -1, MastSubset, True), '0') breakAnims[data[0]][1].storeAnim( charBundle.loadBindAnim(loader.loader, mast.breakAnim[1], -1, MastSubset, True), '0') tempHit = [ AnimControlCollection(), AnimControlCollection() ] tempHit[0].storeAnim( charBundle.loadBindAnim(loader.loader, mast.hitAnim, -1, HitMastSubset, True), '0') tempHit[1].storeAnim( charBundle.loadBindAnim(loader.loader, mast.hitAnim, -1, PartSubset(), True), '0') hitAnims[data[0]] = tempHit for (anim, fileName) in mast.metaAnims.iteritems(): if anim not in metaAnims: metaAnims[anim] = AnimControlCollection() if anim not in MissingAnims.get(modelClass, []): ac = charBundle.loadBindAnim(loader.loader, fileName, -1, SailSubset, True) if ac: metaAnims[anim].storeAnim( ac, str(metaAnims[anim].getNumAnims())) charRoot.node().combineWith(mast.charRoot) continue if self.wantProws and prowType: (highSprit, medSprit, lowSprit) = self.sprits[prowType].getAsset() transform = hull.locators.find( '**/location_bowsprit').getTransform(hull.locators) highSprit.setTransform(transform) medSprit.setTransform(transform) lowSprit.setTransform(transform) highSprit.reparentTo(hull.geoms[0]) medSprit.reparentTo(hull.geoms[1]) lowSprit.reparentTo(hull.geoms[2]) if wantWheel: shipWheel = ShipBlueprints.getWheel() wheelPoint = hull.locators.find( '**/location_wheel;+s').getTransform(hull.locators) shipWheel.setTransform(wheelPoint) shipWheel.flattenLight() shipWheel.find('**/collisions').copyTo(collisions) hull.geoms[0].node().stealChildren( shipWheel.find('**/high').node()) hull.geoms[1].node().stealChildren(shipWheel.find('**/med').node()) hull.geoms[2].node().stealChildren(shipWheel.find('**/low').node()) if complexCustomization: hull.geoms[0].setTexture(shipHullTexture) hull.geoms[0].flattenLight() hull.geoms[1].setTexture(shipHullTexture) hull.geoms[1].flattenLight() hull.geoms[2].setTexture(shipHullTexture) hull.geoms[2].flattenLight() hull.geoms[3].setTexture(shipHullTexture) hull.geoms[3].flattenLight() high.attachNewNode(ModelNode('non-animated')).node().stealChildren( hull.geoms[0].node()) med.attachNewNode(ModelNode('non-animated')).node().stealChildren( hull.geoms[1].node()) low.attachNewNode(ModelNode('non-animated')).node().stealChildren( hull.geoms[2].node()) superlow.attachNewNode(ModelNode('non-animated')).node().stealChildren( hull.geoms[3].node()) collisions.node().stealChildren(hull.collisions.node()) hull.locators.stash() charRoot.flattenStrong() ship = Ship.Ship(shipClass, root, breakAnims, hitAnims, metaAnims, collisions, hull.locators) if not complexCustomization: ship.char.setTexture(shipHullTexture) return ship