Browse Source

*** empty log message ***

Mark Mine 25 years ago
parent
commit
34cd00fc6c
2 changed files with 92 additions and 13 deletions
  1. 61 12
      direct/src/tkpanels/ParticlePanel.py
  2. 31 1
      direct/src/tkwidgets/VectorWidgets.py

+ 61 - 12
direct/src/tkpanels/ParticlePanel.py

@@ -73,6 +73,7 @@ class ParticlePanel(AppShell):
         factoryPage = self.mainNotebook.add('Factory')
         factoryPage = self.mainNotebook.add('Factory')
         emitterPage = self.mainNotebook.add('Emitter')
         emitterPage = self.mainNotebook.add('Emitter')
         rendererPage = self.mainNotebook.add('Renderer')
         rendererPage = self.mainNotebook.add('Renderer')
+        forcePage = self.mainNotebook.add('Force')
         # Put this here so it isn't called right away
         # Put this here so it isn't called right away
         self.mainNotebook['raisecommand'] = self.updateInfo
         self.mainNotebook['raisecommand'] = self.updateInfo
 
 
@@ -196,8 +197,8 @@ class ParticlePanel(AppShell):
             self.selectEmitterType)
             self.selectEmitterType)
 
 
         # Emitter modes
         # Emitter modes
-        self.emissionType = StringVar()
-        self.emissionType.set('ETCUSTOM')
+        self.emissionType = IntVar()
+        self.emissionType.set(BaseParticleEmitter.ETRADIATE)
         emissionFrame = Frame(emitterPage)
         emissionFrame = Frame(emitterPage)
         self.createRadiobutton(
         self.createRadiobutton(
             emissionFrame, 'left',
             emissionFrame, 'left',
@@ -263,22 +264,25 @@ class ParticlePanel(AppShell):
                            'Radius of disc',
                            'Radius of disc',
                            command = self.setEmitterDiscRadius,
                            command = self.setEmitterDiscRadius,
                            min = 0.01)
                            min = 0.01)
-        self.createAngleDial(discPage, 'Disc Emitter', 'Inner Angle',
+        customPage = self.discCustomFrame = Frame(discPage)
+        self.createAngleDial(customPage, 'Disc Emitter', 'Inner Angle',
                              'Particle launch angle at center of disc',
                              'Particle launch angle at center of disc',
                              command = self.setEmitterDiscInnerAngle)
                              command = self.setEmitterDiscInnerAngle)
-        self.createFloater(discPage, 'Disc Emitter', 'Inner Velocity',
+        self.createFloater(customPage, 'Disc Emitter', 'Inner Velocity',
                            'Launch velocity multiplier at center of disc',
                            'Launch velocity multiplier at center of disc',
                            command = self.setEmitterDiscInnerVelocity)
                            command = self.setEmitterDiscInnerVelocity)
-        self.createAngleDial(discPage, 'Disc Emitter', 'Outer Angle',
+        self.createAngleDial(customPage, 'Disc Emitter', 'Outer Angle',
                              'Particle launch angle at outer edge of disc',
                              'Particle launch angle at outer edge of disc',
                              command = self.setEmitterDiscOuterAngle)
                              command = self.setEmitterDiscOuterAngle)
-        self.createFloater(discPage, 'Disc Emitter', 'Outer Velocity',
+        self.createFloater(customPage, 'Disc Emitter', 'Outer Velocity',
                            'Launch velocity multiplier at edge of disc',
                            'Launch velocity multiplier at edge of disc',
                            command = self.setEmitterDiscOuterVelocity)
                            command = self.setEmitterDiscOuterVelocity)
         self.emitterDiscCubicLerping = self.createCheckbutton(
         self.emitterDiscCubicLerping = self.createCheckbutton(
-            discPage, 'Disc Emitter', 'Cubic Lerping',
+            customPage, 'Disc Emitter', 'Cubic Lerping',
             'On: magnitude/angle interpolation from center',
             'On: magnitude/angle interpolation from center',
             self.toggleEmitterDiscCubicLerping, 0)
             self.toggleEmitterDiscCubicLerping, 0)
+        customPage.pack(fill = BOTH, expand = 1)
+        
         # Line page #
         # Line page #
         linePage = self.emitterNotebook.add('LineEmitter')
         linePage = self.emitterNotebook.add('LineEmitter')
         self.createVector3Entry(linePage, 'Line Emitter', 'Min',
         self.createVector3Entry(linePage, 'Line Emitter', 'Min',
@@ -309,9 +313,12 @@ class ParticlePanel(AppShell):
                            'Radius of ring',
                            'Radius of ring',
                            command = self.setEmitterRingRadius,
                            command = self.setEmitterRingRadius,
                            min = 0.01)
                            min = 0.01)
-        self.createAngleDial(ringPage, 'Ring Emitter', 'Angle',
+        self.ringCustomFrame = Frame(ringPage)
+        self.createAngleDial(self.ringCustomFrame, 'Ring Emitter', 'Angle',
                              'Particle launch angle',
                              'Particle launch angle',
                              command = self.setEmitterRingLaunchAngle)
                              command = self.setEmitterRingLaunchAngle)
+        self.ringCustomFrame.pack(fill = BOTH, expand = 1)
+        
         # Sphere volume #
         # Sphere volume #
         sphereVolumePage = self.emitterNotebook.add('SphereVolumeEmitter')
         sphereVolumePage = self.emitterNotebook.add('SphereVolumeEmitter')
         self.createFloater(sphereVolumePage, 'Sphere Volume Emitter', 'Radius',
         self.createFloater(sphereVolumePage, 'Sphere Volume Emitter', 'Radius',
@@ -481,6 +488,14 @@ class ParticlePanel(AppShell):
             'On: alpha blending is disabled',
             'On: alpha blending is disabled',
             self.toggleRendererSpriteAlphaDisable, 0)
             self.toggleRendererSpriteAlphaDisable, 0)
         self.rendererNotebook.pack(fill = X)
         self.rendererNotebook.pack(fill = X)
+
+        ## FORCE PAGE ##
+        # fn = ForceNode()
+        # lvf = LinearVectorForce()
+        # lvf.setVector(0,0,-4)
+        # fn.addForce(lvf)
+        # physicsMgr.addLinearForce(lvf)
+        # render.attachNewNode(fn)
         
         
         self.factoryNotebook.setnaturalsize()
         self.factoryNotebook.setnaturalsize()
         self.emitterNotebook.setnaturalsize()
         self.emitterNotebook.setnaturalsize()
@@ -743,7 +758,7 @@ class ParticlePanel(AppShell):
         
         
     def updateEmitterWidgets(self):
     def updateEmitterWidgets(self):
         emitter = self.particles.emitter
         emitter = self.particles.emitter
-        self.emissionType.set(self.particles.emitter.getEmissionType())
+        self.setEmissionType(self.particles.emitter.getEmissionType())
         amp = emitter.getAmplitude()
         amp = emitter.getAmplitude()
         self.getWidget('Emitter', 'Velocity Multiplier').set(amp)
         self.getWidget('Emitter', 'Velocity Multiplier').set(amp)
         spread = emitter.getAmplitudeSpread()
         spread = emitter.getAmplitudeSpread()
@@ -812,9 +827,43 @@ class ParticlePanel(AppShell):
             radius = emitter.getRadius()
             radius = emitter.getRadius()
             self.getWidget('Tangent Ring Emitter', 'Radius').set(radius, 0)
             self.getWidget('Tangent Ring Emitter', 'Radius').set(radius, 0)
     # All #
     # All #
-    def setEmissionType(self):
-        self.particles.emitter.setEmissionType(
-            int(self.emissionType.get()))
+    def setEmissionType(self, newType = None):
+        if newType:
+            type = newType
+            self.emissionType.set(type)
+        else:
+            type = self.emissionType.get()
+        self.particles.emitter.setEmissionType(type)
+        if type == BaseParticleEmitter.ETEXPLICIT:
+            self.getWidget(
+                'Emitter', 'Radiate Origin')['state'] = 'disabled'
+            self.getWidget(
+                'Emitter', 'Explicit Velocity')['state'] = 'normal'
+            # Hide custom widgets
+            if isinstance(self.particles.emitter, DiscEmitter):
+                self.discCustomFrame.pack_forget()
+            elif isinstance(self.particles.emitter, RingEmitter):
+                self.ringCustomFrame.pack_forget()
+        elif type == BaseParticleEmitter.ETRADIATE:
+            self.getWidget(
+                'Emitter', 'Radiate Origin')['state'] = 'normal'
+            self.getWidget(
+                'Emitter', 'Explicit Velocity')['state'] = 'disabled'
+            # Hide custom widgets
+            if isinstance(self.particles.emitter, DiscEmitter):
+                self.discCustomFrame.pack_forget()
+            elif isinstance(self.particles.emitter, RingEmitter):
+                self.ringCustomFrame.pack_forget()
+        elif type == BaseParticleEmitter.ETCUSTOM:
+            self.getWidget(
+                'Emitter', 'Radiate Origin')['state'] = 'disabled'
+            self.getWidget(
+                'Emitter', 'Explicit Velocity')['state'] = 'disabled'
+            # Show custom widgets
+            if isinstance(self.particles.emitter, DiscEmitter):
+                self.discCustomFrame.pack(fill = BOTH, expand = 1)
+            elif isinstance(self.particles.emitter, RingEmitter):
+                self.ringCustomFrame.pack(fill = BOTH, expand = 1)
 
 
     def setEmitterAmplitude(self, value):
     def setEmitterAmplitude(self, value):
         self.particles.emitter.setAmplitude(value)
         self.particles.emitter.setAmplitude(value)

+ 31 - 1
direct/src/tkwidgets/VectorWidgets.py

@@ -31,7 +31,8 @@ class VectorEntry(Pmw.MegaWidget):
             ('min',                 None,           self._updateValidate),
             ('min',                 None,           self._updateValidate),
             ('max',                 None,           self._updateValidate),
             ('max',                 None,           self._updateValidate),
             ('significantDigits',   2,              self._setSigDigits),
             ('significantDigits',   2,              self._setSigDigits),
-            ('valuatorType',        VALUATOR,       None)
+            ('valuatorType',        VALUATOR,       None),
+            ('state',               'normal',       self._setState),
             )
             )
         self.defineoptions(kw, optiondefs)
         self.defineoptions(kw, optiondefs)
 
 
@@ -104,6 +105,9 @@ class VectorEntry(Pmw.MegaWidget):
         # Make sure entries are updated
         # Make sure entries are updated
         self.set(self['initialValue'])
         self.set(self['initialValue'])
 
 
+        # Record entry color
+        self.entryBackground = self.cget('Entry_entry_background')
+        
         # Make sure input variables processed 
         # Make sure input variables processed 
         self.initialiseoptions(VectorEntry)
         self.initialiseoptions(VectorEntry)
 
 
@@ -222,6 +226,32 @@ class VectorEntry(Pmw.MegaWidget):
         self._floaters.set(self.get()[:])
         self._floaters.set(self.get()[:])
         self._floaters.show()
         self._floaters.show()
 
 
+    def _setState(self):
+        if self['state'] == 'disabled':
+            # Disable entry
+            self.configure(Entry_entry_state = 'disabled')
+            self.configure(Entry_entry_background = '#C0C0C0')
+            # Disable floater Group scale
+            self.component('fGroup').configure(
+                Valuator_scale_state = 'disabled')
+            # Disable floater group entry
+            self.component('fGroup').configure(
+                Valuator_entry_state = 'disabled')
+            self.component('fGroup').configure(
+                Valuator_entry_background = '#C0C0C0')
+        else:
+            # Disable entry
+            self.configure(Entry_entry_state = 'normal')
+            self.configure(Entry_entry_background = self.entryBackground)
+            # Disable floater Group scale
+            self.component('fGroup').configure(
+                Valuator_scale_state = 'normal')
+            # Disable floater group entry
+            self.component('fGroup').configure(
+                Valuator_entry_state = 'normal')
+            self.component('fGroup').configure(
+                Valuator_entry_background = self.entryBackground)
+
 class Vector2Entry(VectorEntry):
 class Vector2Entry(VectorEntry):
     def __init__(self, parent = None, **kw):
     def __init__(self, parent = None, **kw):
         # Initialize options for the class
         # Initialize options for the class