From 9aafee4e4afd1a297615b085bf344b65c9f76ce1 Mon Sep 17 00:00:00 2001 From: Jason Yeung Date: Fri, 14 Aug 2009 01:01:38 +0000 Subject: [PATCH] - Bug Fixes --- direct/src/controls/ShipPilot.py | 87 ++++++++++++++++---------------- 1 file changed, 44 insertions(+), 43 deletions(-) diff --git a/direct/src/controls/ShipPilot.py b/direct/src/controls/ShipPilot.py index 72c229806c..0ff4653f96 100755 --- a/direct/src/controls/ShipPilot.py +++ b/direct/src/controls/ShipPilot.py @@ -29,6 +29,7 @@ class ShipPilot(PhysicsWalker): MAX_STRAIGHT_SAIL_BONUS = 2.1 # 1.25 Old STRAIGHT_SAIL_BONUS_TIME = 18.0 + REVERSE_STRAIGHT_SAIL_BONUS_TIME = -8.0 TURNING_BONUS_REDUCTION = 3.0 # special methods @@ -378,36 +379,46 @@ class ShipPilot(PhysicsWalker): # How far did we move based on the amount of time elapsed? dt = ClockObject.getGlobalClock().getDt() + + minSpeed = (self.ship.acceleration + self.ship.speedboost) * self.ship.speednerf + minStraightSail = 1.0 / self.MAX_STRAIGHT_SAIL_BONUS * self.STRAIGHT_SAIL_BONUS_TIME * self.ship.speednerf if reverse: - # Reverse kills Travel Speed totally - self.straightHeading = 0 - elif (self.__speed < (self.ship.acceleration + self.ship.speedboost) * self.ship.speednerf) and forward: + # Decelerate while sails are up + self.straightHeading -= dt * self.TURNING_BONUS_REDUCTION * 2.0 + #elif (self.__speed < minSpeed) and forward: + elif (self.straightHeading < minStraightSail) and forward: # If not at MinSpeed, Accelerate regardless self.straightHeading += dt * 1.5 - elif self.ship.threatCounter: + elif self.ship.threatCounter: # If ship is recently damaged, do not increase Travel Speed - self.straightHeading = min(1.0 / self.MAX_STRAIGHT_SAIL_BONUS * self.STRAIGHT_SAIL_BONUS_TIME * self.ship.speednerf, self.straightHeading) + self.straightHeading = min(minStraightSail, self.straightHeading) elif turnLeft or turnRight or not forward: - # Reset Straight Sailing Bonus - self.straightHeading -= dt * self.TURNING_BONUS_REDUCTION + # Reset Straight Sailing Bonus - Only if above MinSpeed + if forward and (self.straightHeading - (dt * self.TURNING_BONUS_REDUCTION) < minStraightSail) and (self.straightHeading >= minStraightSail): + self.straightHeading = minStraightSail + else: + self.straightHeading -= dt * self.TURNING_BONUS_REDUCTION else: # Add in the Straight Sailing Time self.straightHeading += dt - self.straightHeading = max(0, min(self.STRAIGHT_SAIL_BONUS_TIME, self.straightHeading)) + + if reverse: + # Allow straightHeading to reach a negative value + self.straightHeading = max(self.REVERSE_STRAIGHT_SAIL_BONUS_TIME, self.straightHeading) + else: + # Normally min straightHeading is 1.0 + self.straightHeading = max(1.0, min(self.STRAIGHT_SAIL_BONUS_TIME, self.straightHeading)) # Straight Sailing Acceleration Bonus straightSailBonus = 0.0 straightSailBonus = self.straightHeading / self.STRAIGHT_SAIL_BONUS_TIME straightSailBonus = min(self.MAX_STRAIGHT_SAIL_BONUS, straightSailBonus * self.MAX_STRAIGHT_SAIL_BONUS) - self.__speed=(forward and self.ship.acceleration) or \ - (reverse and -self.ship.reverseAcceleration) + # self.__speed=(forward and self.ship.acceleration) or (reverse and self.ship.reverseAcceleration) + self.__speed = self.ship.acceleration - avatarSlideSpeed=self.ship.acceleration * 0.5 * straightSailBonus - #self.__slideSpeed=slide and ( - # (turnLeft and -avatarSlideSpeed) or - # (turnRight and avatarSlideSpeed)) + avatarSlideSpeed = self.ship.acceleration * 0.5 * straightSailBonus self.__slideSpeed=(forward or reverse) and ( (slideLeft and -avatarSlideSpeed) or (slideRight and avatarSlideSpeed)) @@ -416,11 +427,10 @@ class ShipPilot(PhysicsWalker): (turnRight and -self.ship.turnRate)) # Add in Straight Sailing Multiplier - self.__speed *= straightSailBonus + self.__speed *= (straightSailBonus * self.ship.speednerf) self.__speed += self.ship.speedboost self.__slideSpeed *= straightSailBonus maxSpeed = self.ship.maxSpeed - self.__speed *= self.ship.speednerf # Enable debug turbo modec debugRunning = inputState.isSet("debugRunning") @@ -447,13 +457,6 @@ class ShipPilot(PhysicsWalker): self.currentTurning = 0.0 self.__rotationSpeed = self.currentTurning - #print "########################" - #print self.__speed - #print self.ship.baseAcceleration - #print self.ship.acceleration - #print self.ship.speedboost - #print straightSailBonus - # Broadcast Event to Handlers (ShipStatusMeter) messenger.send("setShipSpeed-%s" % (self.ship.getDoId()), [self.__speed, self.getMaxSpeed()]) @@ -492,26 +495,25 @@ class ShipPilot(PhysicsWalker): rotation = self.__rotationSpeed if debugRunning: rotation *= 4 - + # update pos: # Take a step in the direction of our previous heading. - self.__vel=Vec3( - Vec3.forward() * distance + - Vec3.right() * slideDistance) - + self.__vel=Vec3(Vec3.forward() * distance + Vec3.right() * slideDistance) + # rotMat is the rotation matrix corresponding to # our previous heading. - rotMat=Mat3.rotateMatNormaxis( - self.shipNodePath.getH(), Vec3.up()) + rotMat=Mat3.rotateMatNormaxis(self.shipNodePath.getH(), Vec3.up()) step=rotMat.xform(self.__vel) - + #newVector = self.acForce.getLocalVector()+Vec3(step) newVector = Vec3(step) #newVector=Vec3(rotMat.xform(newVector)) #maxLen = maxSpeed - - maxLen = self.__speed - + if (goForward): + maxLen = self.__speed + else: + maxLen = self.ship.reverseAcceleration + if newVector.length() > maxLen and \ not (debugRunning or base.localAvatar.getTurbo()): newVector.normalize() @@ -522,24 +524,24 @@ class ShipPilot(PhysicsWalker): "newVector", newVector) onScreenDebug.add( "newVector length", newVector.length()) - + base.controlForce.setVector(newVector) - + assert base.controlForce.getLocalVector() == newVector,'1' assert base.controlForce.getPhysicsObject(),'2' assert base.controlForce.getPhysicsObject() == physObject,'3' - + #momentum = self.momentumForce.getLocalVector() #momentum *= 0.9 #self.momentumForce.setVector(momentum) - + # update hpr: o=physObject.getOrientation() r=LRotationf() # factor in dt since we're directly setting the rotation here r.setHpr(Vec3(rotation * dt, 0.0, 0.0)) physObject.setOrientation(o*r) - + # sync the change: self.actorNode.updateTransform() #assert self.shipNodePath.getH()==debugTempH-rotation @@ -549,8 +551,7 @@ class ShipPilot(PhysicsWalker): assert physObject.getVelocity().almostEqual(Vec3(0),0.1) #base.controlForce.setVector(Vec3.zero()) goForward = True - - + #*# speed = physVel if (goForward): @@ -561,13 +562,13 @@ class ShipPilot(PhysicsWalker): if physVelLen > self.ship.maxReverseSpeed: speed.normalize() speed *= self.ship.maxReverseSpeed - + #speed *= 1.0 - dt * 0.05 # modify based on sail damage speed *= self.ship.Sp speed /= self.ship.maxSp - + if __debug__: q1=self.shipNodePath.getQuat() q2=physObject.getOrientation()