瀏覽代碼

*** empty log message ***

Dave Schuyler 22 年之前
父節點
當前提交
a2437a514d
共有 3 個文件被更改,包括 31 次插入10 次删除
  1. 3 4
      direct/src/showbase/ControlManager.py
  2. 23 6
      direct/src/showbase/GravityWalker.py
  3. 5 0
      direct/src/showbase/PhysicsWalker.py

+ 3 - 4
direct/src/showbase/ControlManager.py

@@ -122,18 +122,17 @@ class ControlManager:
                 wallBitmask, floorBitmask, avatarRadius, floorOffset)
         self.walkControls.setAirborneHeightFunc(self.avatar.getAirborneHeight)
         self.walkControls.disableAvatarControls()
+        self.walkControls.setCollisionsActive(0)
         
         self.swimControls.initializeCollisions(cTrav, self.avatar,
                 wallBitmask, floorBitmask, avatarRadius, floorOffset)
         self.swimControls.setAirborneHeightFunc(self.avatar.getAirborneHeight)
         self.swimControls.disableAvatarControls()
+        self.swimControls.setCollisionsActive(0)
 
+        self.walkControls.setCollisionsActive(1)
         self.walkControls.enableAvatarControls()
 
-        if self.wantAvatarPhysicsIndicator:
-            indicator=loader.loadModelCopy('phase_5/models/props/dagger')
-            #self.walkControls.setAvatarPhysicsIndicator(indicator)
-
     def deleteCollisions(self):
         assert(self.debugPrint("deleteCollisions()"))
         self.walkControls.deleteCollisions()

+ 23 - 6
direct/src/showbase/GravityWalker.py

@@ -248,16 +248,21 @@ class GravityWalker(DirectObject.DirectObject):
         tempCTrav.traverse(render)
     
     def setMayJump(self, task):
+        """
+        This function's use is internal to this class (maybe I'll add
+        the __ someday).  Anyway, if you want to enable or disable
+        jumping in a general way see the ControlManager (don't use this).
+        """
         self.mayJump = 1
         return Task.done
 
-    def startJumpDelay(self):
-        assert(self.debugPrint("startJumpDelay()"))
+    def startJumpDelay(self, delay):
+        assert(self.debugPrint("startJumpDelay(delay=%s)"%(delay,)))
         if self.jumpDelayTask:
             self.jumpDelayTask.remove()
         self.mayJump = 0
         self.jumpDelayTask=taskMgr.doMethodLater(
-            0.5,
+            delay,
             self.setMayJump,
             "jumpDelay-%s"%id(self))
 
@@ -295,14 +300,26 @@ class GravityWalker(DirectObject.DirectObject):
             onScreenDebug.add("airborneHeight", self.lifter.getAirborneHeight()) #*#
             onScreenDebug.add("falling", self.falling) #*#
             onScreenDebug.add("isOnGround", self.lifter.isOnGround()) #*#
+
+            onScreenDebug.add("gravity", self.lifter.getGravity()) #*#
+            onScreenDebug.add("jumpForce", self.avatarControlJumpForce) #*#
+            onScreenDebug.add("mayJump", self.mayJump) #*#
+            onScreenDebug.add("impact", self.lifter.getImpactVelocity()) #*#
+
             onScreenDebug.add("velocity", self.lifter.getVelocity()) #*#
             onScreenDebug.add("jump", jump) #*#
         if self.lifter.isOnGround():
             if self.falling:
                 self.falling = 0
-                #messenger.send("jumpHardLand")
-                messenger.send("jumpLand")
-                self.startJumpDelay()
+                impact = self.lifter.getImpactVelocity()
+                if impact < -30.0:
+                    messenger.send("jumpHardLand")
+                    self.startJumpDelay(0.1)
+                else:
+                    messenger.send("jumpLand")
+                    if impact < -5.0:
+                        self.startJumpDelay(0.05)
+                    # else, ignore the little potholes.
             if jump and self.mayJump:
                 # ...the jump button is down and we're close
                 # enough to the ground to jump.

+ 5 - 0
direct/src/showbase/PhysicsWalker.py

@@ -723,6 +723,11 @@ class PhysicsWalker(DirectObject.DirectObject):
 
     
     if __debug__:
+        def setupAvatarPhysicsIndicator(self):
+            if self.wantAvatarPhysicsIndicator:
+                indicator=loader.loadModelCopy('phase_5/models/props/dagger')
+                #self.walkControls.setAvatarPhysicsIndicator(indicator)
+
         def debugPrint(self, message):
             """for debugging"""
             return self.notify.debug(