Mike Goslin 25 лет назад
Родитель
Сommit
6e99016ef8
1 измененных файлов с 91 добавлено и 69 удалено
  1. 91 69
      direct/src/showbase/Particles.py

+ 91 - 69
direct/src/showbase/Particles.py

@@ -173,12 +173,12 @@ class Particles(ParticleSystem.ParticleSystem):
 	"""stop(self)"""
 	taskMgr.removeTasksNamed('update-particles')
 
-    def saveConfig(self, filename):
+    def bakeConfig(self, filename):
 	"""saveFileData(self, filename)"""
 	#fname = Filename(filename)
 	#fname.resolveFilename(getParticlePath())
 	#fname.resolveFilename(getModelPath())
-        f = open(filename.toOsSpecific(), 'ab')
+        f = open(filename.toOsSpecific(), 'wb')
         # Add a blank line
         f.write('\n')
         # Now output style details to file
@@ -186,6 +186,19 @@ class Particles(ParticleSystem.ParticleSystem):
         # Close the file
         f.close()
 
+    def saveConfig(self, filename):
+	"""saveFileData(self, filename)"""
+	#fname = Filename(filename)
+	#fname.resolveFilename(getParticlePath())
+	#fname.resolveFilename(getModelPath())
+        f = open(filename.toOsSpecific(), 'wb')
+        # Add a blank line
+        f.write('\n')
+        # Now output style details to file
+	self.printParams(f, 1)
+        # Close the file
+        f.close()
+
     def loadConfig(self, filename):
 	"""getFileData(self, filename)
         Open the specified file and strip out unwanted whitespace and
@@ -196,32 +209,41 @@ class Particles(ParticleSystem.ParticleSystem):
 	#fname.resolveFilename(getModelPath())
 	execfile(filename.toOsSpecific())
 
-    def printParams(self, file = sys.stdout):
+    def printParams(self, file = sys.stdout, bakeflag = 0):
 	"""printParams(self, file)"""
+	targ = 'self'
+	if (bakeflag == 0):
+	    targ = 'p'
+	    file.write('from Particles import *\n')
+	    file.write('p = Particles()\n')
+	    file.write('ppath = p.getNodePath()\n')
+	    file.write('ppath.setPos(0.0, 2.0, 4.0)\n')
+	    file.write('ppath.reparentTo(render)\n')
+	    file.write('p.start()\n')
 	file.write('# Particles parameters\n')
-	file.write('self.setFactory(\"' + self.factoryType + '\")\n')
-	file.write('self.setRenderer(\"' + self.rendererType + '\")\n')
-	file.write('self.setEmitter(\"' + self.emitterType + '\")\n')
+	file.write(targ + '.setFactory(\"' + self.factoryType + '\")\n')
+	file.write(targ + '.setRenderer(\"' + self.rendererType + '\")\n')
+	file.write(targ + '.setEmitter(\"' + self.emitterType + '\")\n')
 
 	file.write('# Factory parameters\n')
-	file.write('self.factory.setLifespanBase(%.4f)\n' % self.factory.getLifespanBase())
-	file.write('self.factory.setLifespanSpread(%.4f)\n' % self.factory.getLifespanSpread())
-	file.write('self.factory.setMassBase(%.4f)\n' % self.factory.getMassBase())
-	file.write('self.factory.setMassSpread(%.4f)\n' % self.factory.getMassSpread())
-	file.write('self.factory.setTerminalVelocityBase(%.4f)\n' % self.factory.getTerminalVelocityBase())
-	file.write('self.factory.setTerminalVelocitySpread(%.4f)\n' % self.factory.getTerminalVelocitySpread())
+	file.write(targ + '.factory.setLifespanBase(%.4f)\n' % self.factory.getLifespanBase())
+	file.write(targ + '.factory.setLifespanSpread(%.4f)\n' % self.factory.getLifespanSpread())
+	file.write(targ + '.factory.setMassBase(%.4f)\n' % self.factory.getMassBase())
+	file.write(targ + '.factory.setMassSpread(%.4f)\n' % self.factory.getMassSpread())
+	file.write(targ + '.factory.setTerminalVelocityBase(%.4f)\n' % self.factory.getTerminalVelocityBase())
+	file.write(targ + '.factory.setTerminalVelocitySpread(%.4f)\n' % self.factory.getTerminalVelocitySpread())
 	if (self.factoryType == "PointParticleFactory"):
 	    file.write('# Point factory parameters\n')
 	elif (self.factoryType == "ZSpinParticleFactory"):
 	    file.write('# Z Spin factory parameters\n')
-	    file.write('self.factory.setInitialAngle(%.4f)\n' % self.factory.getInitialAngle())
-	    file.write('self.factory.setFinalAngle(%.4f)\n' % self.factory.getFinalAngle())
-	    file.write('self.factory.setInitialAngleSpread(%.4f)\n' % self.factory.getInitialAngleSpread())
-	    file.write('self.factory.setFinalAngleSpread(%.4f)\n' % self.factory.getFinalAngleSpread())
+	    file.write(targ + '.factory.setInitialAngle(%.4f)\n' % self.factory.getInitialAngle())
+	    file.write(targ + '.factory.setFinalAngle(%.4f)\n' % self.factory.getFinalAngle())
+	    file.write(targ + '.factory.setInitialAngleSpread(%.4f)\n' % self.factory.getInitialAngleSpread())
+	    file.write(targ + '.factory.setFinalAngleSpread(%.4f)\n' % self.factory.getFinalAngleSpread())
 	elif (self.factoryType == "OrientedParticleFactory"):
 	    file.write('# Oriented factory parameters\n')
-	    file.write('self.factory.setInitialOrientation(%.4f)\n' % self.factory.getInitialOrientation()) 
-	    file.write('self.factory.setFinalOrientation(%.4f)\n' % self.factory.getFinalOrientation())
+	    file.write(targ + '.factory.setInitialOrientation(%.4f)\n' % self.factory.getInitialOrientation()) 
+	    file.write(targ + '.factory.setFinalOrientation(%.4f)\n' % self.factory.getFinalOrientation())
 
 	file.write('# Renderer parameters\n')
 	alphaMode = self.renderer.getAlphaMode()
@@ -237,15 +259,15 @@ class Particles(ParticleSystem.ParticleSystem):
 	elif (alphaMode == 
 	   	BaseParticleRenderer.BaseParticleRenderer.PRALPHAUSER):
 	    aMode = "PRALPHAUSER"
-	file.write('self.renderer.setAlphaMode(BaseParticleRenderer.BaseParticleRenderer.' + aMode + ')\n')
-	file.write('self.renderer.setUserAlpha(%.2f)\n' % self.renderer.getUserAlpha())
+	file.write(targ + '.renderer.setAlphaMode(BaseParticleRenderer.BaseParticleRenderer.' + aMode + ')\n')
+	file.write(targ + '.renderer.setUserAlpha(%.2f)\n' % self.renderer.getUserAlpha())
 	if (self.rendererType == "Point"):
 	    file.write('# Point parameters\n')
-	    file.write('self.renderer.setPointSize(%.2f)\n' % self.renderer.getPointSize())
+	    file.write(targ + '.renderer.setPointSize(%.2f)\n' % self.renderer.getPointSize())
 	    sColor = self.renderer.getStartColor()
-	    file.write(('self.renderer.setStartColor(Vec4(%.2f, %.2f, %.2f, %.2f))\n' % (sColor[0], sColor[1], sColor[2], sColor[3]))) 
+	    file.write((targ + '.renderer.setStartColor(Vec4(%.2f, %.2f, %.2f, %.2f))\n' % (sColor[0], sColor[1], sColor[2], sColor[3]))) 
 	    sColor = self.renderer.getEndColor()
-	    file.write(('self.renderer.setEndColor(Vec4(%.2f, %.2f, %.2f, %.2f))\n' % (sColor[0], sColor[1], sColor[2], sColor[3]))) 
+	    file.write((targ + '.renderer.setEndColor(Vec4(%.2f, %.2f, %.2f, %.2f))\n' % (sColor[0], sColor[1], sColor[2], sColor[3]))) 
 	    blendType = self.renderer.getBlendType()
 	    bType = "PPONECOLOR"
 	    if (blendType == PointParticleRenderer.PointParticleRenderer.PPONECOLOR):
@@ -254,7 +276,7 @@ class Particles(ParticleSystem.ParticleSystem):
 		bType = "PPBLENDLIFE"	
 	    elif (blendType == PointParticleRenderer.PointParticleRenderer.PPBLENDVEL):
 		bType = "PPBLENDVEL"	
-	    file.write('self.renderer.setBlendType(PointParticleRenderer.PointParticleRenderer.' + bType + ')\n')
+	    file.write(targ + '.renderer.setBlendType(PointParticleRenderer.PointParticleRenderer.' + bType + ')\n')
 	    blendMethod = self.renderer.getBlendMethod()
 	    bMethod = "PPNOBLEND"
 	    if (blendMethod == BaseParticleRenderer.BaseParticleRenderer.PPNOBLEND):
@@ -263,44 +285,44 @@ class Particles(ParticleSystem.ParticleSystem):
 		bMethod = "PPBLENDLINEAR"
 	    elif (blendMethod == BaseParticleRenderer.BaseParticleRenderer.PPBLENDCUBIC):
 		bMethod = "PPBLENDCUBIC"
-	    file.write('self.renderer.setBlendMethod(BaseParticleRenderer.BaseParticleRenderer.' + bMethod + ')\n')
+	    file.write(targ + '.renderer.setBlendMethod(BaseParticleRenderer.BaseParticleRenderer.' + bMethod + ')\n')
 	elif (self.rendererType == "LineParticleRenderer"):
 	    file.write('# Line parameters\n')
 	    sColor = self.renderer.getHeadColor()
-	    file.write(('self.renderer.setHeadColor(Vec4(%.2f, %.2f, %.2f, %.2f))\n' % (sColor[0], sColor[1], sColor[2], sColor[3])))
+	    file.write((targ + '.renderer.setHeadColor(Vec4(%.2f, %.2f, %.2f, %.2f))\n' % (sColor[0], sColor[1], sColor[2], sColor[3])))
 	    sColor = self.renderer.getTailColor()
-	    file.write(('self.renderer.setTailColor(Vec4(%.2f, %.2f, %.2f, %.2f))\n' % (sColor[0], sColor[1], sColor[2], sColor[3])))
+	    file.write((targ + '.renderer.setTailColor(Vec4(%.2f, %.2f, %.2f, %.2f))\n' % (sColor[0], sColor[1], sColor[2], sColor[3])))
 	elif (self.rendererType == "GeomParticleRenderer"):
 	    file.write('# Geom parameters\n')
 	    node = self.renderer.getGeomNode()
-	    file.write('self.renderer.setGeomNode(' + node.getName() + ')\n')
+	    file.write(targ + '.renderer.setGeomNode(' + node.getName() + ')\n')
 	elif (self.rendererType == "SparkleParticleRenderer"):
 	    file.write('# Sparkle parameters\n')
 	    sColor = self.renderer.getCenterColor()
-	    file.write(('self.renderer.setCenterColor(Vec4(%.2f, %.2f, %.2f, %.2f))\n' % (sColor[0], sColor[1], sColor[2], sColor[3])))
+	    file.write((targ + '.renderer.setCenterColor(Vec4(%.2f, %.2f, %.2f, %.2f))\n' % (sColor[0], sColor[1], sColor[2], sColor[3])))
 	    sColor = self.renderer.getEdgeColor()
-	    file.write(('self.renderer.setEdgeColor(Vec4(%.2f, %.2f, %.2f, %.2f))\n' % (sColor[0], sColor[1], sColor[2], sColor[3])))
-	    file.write('self.renderer.setBirthRadius(%.4f)\n' % self.renderer.getBirthRadius())
-	    file.write('self.renderer.setDeathRadius(%.4f)\n' % self.renderer.getDeathRadius())
+	    file.write((targ + '.renderer.setEdgeColor(Vec4(%.2f, %.2f, %.2f, %.2f))\n' % (sColor[0], sColor[1], sColor[2], sColor[3])))
+	    file.write(targ + '.renderer.setBirthRadius(%.4f)\n' % self.renderer.getBirthRadius())
+	    file.write(targ + '.renderer.setDeathRadius(%.4f)\n' % self.renderer.getDeathRadius())
 	    lifeScale = self.renderer.getLifeScale()
 	    lScale = "SPNOSCALE"
 	    if (lifeScale == SparkleParticleRenderer.SparkleParticleRenderer.SPSCALE):
 		lScale = "SPSCALE"
-	    file.write('self.renderer.setLifeScale(SparkleParticleRenderer.SparkleParticleRenderer.' + lScale + ')\n')
+	    file.write(targ + '.renderer.setLifeScale(SparkleParticleRenderer.SparkleParticleRenderer.' + lScale + ')\n')
 	elif (self.rendererType == "SpriteParticleRenderer"):
 	    file.write('# Sprite parameters\n')
 	    tex = self.renderer.getTexture()
-	    file.write('self.renderer.setTexture(loader.loadTexture(\'' + tex.getName() + '\'))\n')
+	    file.write(targ + '.renderer.setTexture(loader.loadTexture(\'' + tex.getName() + '\'))\n')
 	    sColor = self.renderer.getColor()
-	    file.write(('self.renderer.setColor(Vec4(%.2f, %.2f, %.2f, %.2f))\n' % (sColor[0], sColor[1], sColor[2], sColor[3])))
-	    file.write('self.renderer.setXScaleFlag(%d)\n' % self.renderer.getXScaleFlag())
-	    file.write('self.renderer.setYScaleFlag(%d)\n' % self.renderer.getYScaleFlag())
-	    file.write('self.renderer.setAnimAngleFlag(%d)\n' % self.renderer.getAnimAngleFlag())
-	    file.write('self.renderer.setInitialXScale(%.4f)\n' % self.renderer.getInitialXScale())
-	    file.write('self.renderer.setFinalXScale(%.4f)\n' % self.renderer.getFinalXScale())
-	    file.write('self.renderer.setInitialYScale(%.4f)\n' % self.renderer.getInitialYScale())
-	    file.write('self.renderer.setFinalYScale(%.4f)\n' % self.renderer.getFinalYScale())
-	    file.write('self.renderer.setNonanimatedTheta(%.4f)\n' % self.renderer.getNonanimatedTheta())
+	    file.write((targ + '.renderer.setColor(Vec4(%.2f, %.2f, %.2f, %.2f))\n' % (sColor[0], sColor[1], sColor[2], sColor[3])))
+	    file.write(targ + '.renderer.setXScaleFlag(%d)\n' % self.renderer.getXScaleFlag())
+	    file.write(targ + '.renderer.setYScaleFlag(%d)\n' % self.renderer.getYScaleFlag())
+	    file.write(targ + '.renderer.setAnimAngleFlag(%d)\n' % self.renderer.getAnimAngleFlag())
+	    file.write(targ + '.renderer.setInitialXScale(%.4f)\n' % self.renderer.getInitialXScale())
+	    file.write(targ + '.renderer.setFinalXScale(%.4f)\n' % self.renderer.getFinalXScale())
+	    file.write(targ + '.renderer.setInitialYScale(%.4f)\n' % self.renderer.getInitialYScale())
+	    file.write(targ + '.renderer.setFinalYScale(%.4f)\n' % self.renderer.getFinalYScale())
+	    file.write(targ + '.renderer.setNonanimatedTheta(%.4f)\n' % self.renderer.getNonanimatedTheta())
 	    blendMethod = self.renderer.getAlphaBlendMethod()
 	    bMethod = "PPNOBLEND"
 	    if (blendMethod == BaseParticleRenderer.BaseParticleRenderer.PPNOBLEND):
@@ -309,8 +331,8 @@ class Particles(ParticleSystem.ParticleSystem):
 		bMethod = "PPBLENDLINEAR"
 	    elif (blendMethod == BaseParticleRenderer.BaseParticleRenderer.PPBLENDCUBIC):
 		bMethod = "PPBLENDCUBIC"
-	    file.write('self.renderer.setAlphaBlendMethod(BaseParticleRenderer.BaseParticleRenderer.' + bMethod + ')\n')
-	    file.write('self.renderer.setAlphaDisable(%d)\n' % self.renderer.getAlphaDisable())
+	    file.write(targ + '.renderer.setAlphaBlendMethod(BaseParticleRenderer.BaseParticleRenderer.' + bMethod + ')\n')
+	    file.write(targ + '.renderer.setAlphaDisable(%d)\n' % self.renderer.getAlphaDisable())
 
 	file.write('# Emitter parameters\n')
 	emissionType = self.emitter.getEmissionType()
@@ -321,58 +343,58 @@ class Particles(ParticleSystem.ParticleSystem):
 	    eType = "ETRADIATE"
 	elif (emissionType == BaseParticleEmitter.BaseParticleEmitter.ETCUSTOM):
 	    eType = "ETCUSTOM"
-	file.write('self.emitter.setEmissionType(BaseParticleEmitter.BaseParticleEmitter.' + eType + ')\n')
-	file.write('self.emitter.setAmplitude(%.4f)\n' % self.emitter.getAmplitude())
-	file.write('self.emitter.setAmplitudeSpread(%.4f)\n' % self.emitter.getAmplitudeSpread())
+	file.write(targ + '.emitter.setEmissionType(BaseParticleEmitter.BaseParticleEmitter.' + eType + ')\n')
+	file.write(targ + '.emitter.setAmplitude(%.4f)\n' % self.emitter.getAmplitude())
+	file.write(targ + '.emitter.setAmplitudeSpread(%.4f)\n' % self.emitter.getAmplitudeSpread())
 	oForce = self.emitter.getOffsetForce()
-	file.write(('self.emitter.setOffsetForce(Vec3(%.4f, %.4f, %.4f))\n' % (oForce[0], oForce[1], oForce[2])))
+	file.write((targ + '.emitter.setOffsetForce(Vec3(%.4f, %.4f, %.4f))\n' % (oForce[0], oForce[1], oForce[2])))
 	oForce = self.emitter.getExplicitLaunchVector()
-	file.write(('self.emitter.setExplicitLaunchVector(Vec3(%.4f, %.4f, %.4f))\n' % (oForce[0], oForce[1], oForce[2])))
+	file.write((targ + '.emitter.setExplicitLaunchVector(Vec3(%.4f, %.4f, %.4f))\n' % (oForce[0], oForce[1], oForce[2])))
 	orig = self.emitter.getRadiateOrigin()
-	file.write(('self.emitter.setRadiateOrigin(Point3(%.4f, %.4f, %.4f))\n' % (orig[0], orig[1], orig[2])))
+	file.write((targ + '.emitter.setRadiateOrigin(Point3(%.4f, %.4f, %.4f))\n' % (orig[0], orig[1], orig[2])))
 	if (self.emitterType == "BoxEmitter"):
 	    file.write('# Box parameters\n')
 	    bound = self.emitter.getMinBound()
-	    file.write(('self.emitter.setMinBound(Point3(%.4f, %.4f, %.4f))\n' % (bound[0], bound[1], bound[2])))
+	    file.write((targ + '.emitter.setMinBound(Point3(%.4f, %.4f, %.4f))\n' % (bound[0], bound[1], bound[2])))
 	    bound = self.emitter.getMaxBound()
-	    file.write(('self.emitter.setMaxBound(Point3(%.4f, %.4f, %.4f))\n' % (bound[0], bound[1], bound[2])))
+	    file.write((targ + '.emitter.setMaxBound(Point3(%.4f, %.4f, %.4f))\n' % (bound[0], bound[1], bound[2])))
 	elif (self.emitterType == "DiscEmitter"):
 	    file.write('# Disc parameters\n')
-	    file.write('self.emitter.setRadius(%.4f)\n' % self.emitter.getRadius())
+	    file.write(targ + '.emitter.setRadius(%.4f)\n' % self.emitter.getRadius())
 	    if (eType == "ETCUSTOM"):
-	    	file.write('self.emitter.setOuterAngle(%.4f)\n' % self.emitter.getOuterAngle())
-	    	file.write('self.emitter.setInnerAngle(%.4f)\n' % self.emitter.getInnerAngle())
-	    	file.write('self.emitter.setOuterMagnitude(%.4f)\n' % self.emitter.getOuterMagnitude())
-	    	file.write('self.emitter.setInnerMagnitude(%.4f)\n' % self.emitter.getInnerMagnitude())
-	    	file.write('self.emitter.setCubicLerping(%d)\n' % self.emitter.getCubicLerping())
+	    	file.write(targ + '.emitter.setOuterAngle(%.4f)\n' % self.emitter.getOuterAngle())
+	    	file.write(targ + '.emitter.setInnerAngle(%.4f)\n' % self.emitter.getInnerAngle())
+	    	file.write(targ + '.emitter.setOuterMagnitude(%.4f)\n' % self.emitter.getOuterMagnitude())
+	    	file.write(targ + '.emitter.setInnerMagnitude(%.4f)\n' % self.emitter.getInnerMagnitude())
+	    	file.write(targ + '.emitter.setCubicLerping(%d)\n' % self.emitter.getCubicLerping())
 
 	elif (self.emitterType == "LineEmitter"):
 	    file.write('# Line parameters\n')
 	    point = self.emitter.getEndpoint1()
-	    file.write(('self.emitter.setEndpoint1(Point3(%.4f, %.4f, %.4f))\n' % (point[0], point[1], point[2])))
+	    file.write((targ + '.emitter.setEndpoint1(Point3(%.4f, %.4f, %.4f))\n' % (point[0], point[1], point[2])))
 	    point = self.emitter.getEndpoint2()
-	    file.write(('self.emitter.setEndpoint2(Point3(%.4f, %.4f, %.4f))\n' % (point[0], point[1], point[2])))
+	    file.write((targ + '.emitter.setEndpoint2(Point3(%.4f, %.4f, %.4f))\n' % (point[0], point[1], point[2])))
 	elif (self.emitterType == "PointEmitter"):
 	    file.write('# Point parameters\n')
 	    point = self.emitter.getLocation()
-	    file.write(('self.emitter.setLocation(Point3(%.4f, %.4f, %.4f))\n' % (point[0], point[1], point[2])))
+	    file.write((targ + '.emitter.setLocation(Point3(%.4f, %.4f, %.4f))\n' % (point[0], point[1], point[2])))
 	elif (self.emitterType == "RectangleEmitter"):
 	    file.write('# Rectangle parameters\n')
 	    bound = self.emitter.getMinBound()
-	    file.write(('self.emitter.setMinBound(Point2(%.4f, %.4f))\n' % (point[0], point[1])))
+	    file.write((targ + '.emitter.setMinBound(Point2(%.4f, %.4f))\n' % (point[0], point[1])))
 	    bound = self.emitter.getMaxBound()
-	    file.write(('self.emitter.setMaxBound(Point2(%.4f, %.4f))\n' % (point[0], point[1])))
+	    file.write((targ + '.emitter.setMaxBound(Point2(%.4f, %.4f))\n' % (point[0], point[1])))
 	elif (self.emitterType == "RingEmitter"):
 	    file.write('# Ring parameters\n')
-	    file.write('self.emitter.setRadius(%.4f)\n' % self.emitter.getRadius())
+	    file.write(targ + '.emitter.setRadius(%.4f)\n' % self.emitter.getRadius())
 	    if (eType == "ETCUSTOM"):
-	    	file.write('self.emitter.setAngle(%.4f)\n' % self.emitter.getAngle())
+	    	file.write(targ + '.emitter.setAngle(%.4f)\n' % self.emitter.getAngle())
 	elif (self.emitterType == "SphereSurfaceEmitter"):
 	    file.write('# Sphere Surface parameters\n')
-	    file.write('self.emitter.setRadius(%.4f)\n' % self.emitter.getRadius())
+	    file.write(targ + '.emitter.setRadius(%.4f)\n' % self.emitter.getRadius())
 	elif (self.emitterType == "SphereVolumeEmitter"):
 	    file.write('# Sphere Volume parameters\n')
-	    file.write('self.emitter.setRadius(%.4f)\n' % self.emitter.getRadius())
+	    file.write(targ + '.emitter.setRadius(%.4f)\n' % self.emitter.getRadius())
 	elif (self.emitterType == "TangentRingEmitter"):
 	    file.write('# Tangent Ring parameters\n')
-	    file.write('self.emitter.setRadius(%.4f)\n' % self.emitter.getRadius())
+	    file.write(targ + '.emitter.setRadius(%.4f)\n' % self.emitter.getRadius())