Exemple #1
0
 def __init__(self, effectFileName, parent=None, loop=False, effectIsCentered=True, effectAdjustment=[0, 0, 0]):
     self.effectAdjustment = effectAdjustment
     self.loopEffect = loop
     self.effectIsCentered = effectIsCentered
     self.loadedFormat = None
     if effectFileName != None:
         effectFileNameSplit = effectFileName.split('.')
         self.loadedFormat = effectFileNameSplit[len(effectFileNameSplit)-2] # Get value at penultimate index
         if self.loadedFormat == effectFileNameSplit[0]:
             self.loadedFormat = None # Get rid of bad format name.
         pass
         
     # Load texture; supply alpha channel if it doesn't exist.
     p = transparencyKey(effectFileName)
     self.tex = Texture()
     self.tex.setup2dTexture(p.getXSize(), p.getYSize(), Texture.TUnsignedByte, Texture.FRgba)
     self.tex.load(p)
     if self.loadedFormat != None:
         try:
             self.tree = etree.parse("./"+GAME+"/effects/"+self.loadedFormat+"/sprite.xml")
         except IOError:
             self.loadedFormat = None
         pass
     if self.loadedFormat != None: 
         root = self.tree.getroot()
         self.frames = root.find('.//frames')
         self.colors = root.find('.//colors')
         self.tweens = root.find('.//motion-tweens')
         self.compositeFrames = root.find('.//composite-frames')
         self.baseWidth = 0 if root.attrib.get("base-width") == None else float(root.attrib.get("base-width"))
         self.baseHeight = 0 if root.attrib.get("base-height") == None else float(root.attrib.get("base-height"))
         self.effectWidth = 1 if root.attrib.get("frame-width") == None else float(root.attrib.get("frame-width"))
         self.effectHeight = 1 if root.attrib.get("frame-height") == None else float(root.attrib.get("frame-height"))
         self.effectTargetMS = 143 if root.attrib.get("target-ms") == None else float(root.attrib.get("target-ms"))
         self.startIndex = 1 if root.attrib.get("target-start") == None else int(root.attrib.get("target-start"))
         self.endIndex = 1 if root.attrib.get("target-end") == None else int(root.attrib.get("target-end"))
         self.noSampling = False if root.attrib.get("no-sampling") == None else bool(root.attrib.get("no-sampling"))
         if self.noSampling==True:
             self.tex.setMagfilter(Texture.FTNearest)
             self.tex.setMinfilter(Texture.FTNearest)
         cm = CardMaker('card-'+effectFileName)
         cardDeltaX = self.effectWidth / self.pixelScaleX
         cardDeltaZ = self.effectHeight / self.pixelScaleZ
         if self.effectIsCentered == True:
             cm.setFrame(0, 0, 0, 0)
             deltaX = (cardDeltaX/2.0) - (-cardDeltaX/2.0)
             deltaY = 0
             deltaZ = (cardDeltaZ/2.0) - (-cardDeltaZ/2.0)
             #occluder = OccluderNode('effect-parent-occluder', Point3((-cardDeltaX/2.0), 0, (-cardDeltaZ/2.0)), Point3((-cardDeltaX/2.0), 0, (cardDeltaZ/2.0)), Point3((cardDeltaX/2.0), 0, (cardDeltaZ/2.0)), Point3((cardDeltaX/2.0), 0, (-cardDeltaZ/2.0)))
         else:
             cm.setFrame(0, 0, 0, 0)
             deltaX = (cardDeltaX/2.0) - (-cardDeltaX/2.0)
             deltaY = 0
             deltaZ = cardDeltaZ - 0
             #occluder = OccluderNode('effect-parent-occluder', Point3((-cardDeltaX/2.0), 0, 0), Point3((-cardDeltaX/2.0), 0, cardDeltaZ), Point3((cardDeltaX/2.0), 0, cardDeltaZ), Point3((cardDeltaX/2.0), 0, 0))
         self.effectCardNodePath = render.attachNewNode(cm.generate())            
         self.effectCardNodePath.setBillboardPointEye()
         self.effectCardNodePath.reparentTo(parent)
         #occluder_nodepath = self.effectCardNodePath.attachNewNode(occluder)
         #self.effectCardNodePath.setOccluder(occluder_nodepath)
         emptyNode = NodePath('effect-parent-translator')
         emptyNode.reparentTo(self.effectCardNodePath)
         if effectIsCentered == True:
             emptyNode.setPos(-deltaX/2.0+self.effectAdjustment[0], 0+self.effectAdjustment[1], deltaZ/2.0+self.effectAdjustment[2])
         else:
             emptyNode.setPos(-deltaX/2.0+self.effectAdjustment[0], 0+self.effectAdjustment[1], deltaZ+self.effectAdjustment[2])
         #emptyNode.place()
         emptyNode.setSx(float(deltaX)/self.effectWidth)
         emptyNode.setSz(float(deltaZ)/self.effectHeight)
         self.effectCameraNodePath = emptyNode                        
         if parent != None:
             self.effectCardNodePath.reparentTo(parent)
         else:
             self.effectCardNodePath.reparentTo(render)
         #self.effectCardNodePath.place()
         self.effectCardNodePath.setBin("fixed", 40)
         self.effectCardNodePath.setDepthTest(False)
         self.effectCardNodePath.setDepthWrite(False)
     pass