Пример #1
0
 def _updateCam(self, dt):
     toonPos = self._toon.getPos()
     camPos = self._camParent.getPos()
     x = camPos[0]
     z = camPos[2]
     toonWorldX = self._toon.getX(render)
     maxX = Globals.Camera.MaxSpinX
     toonWorldX = clamp(toonWorldX, -1.0 * maxX, maxX)
     spinAngle = Globals.Camera.MaxSpinAngle * toonWorldX * toonWorldX / (
         maxX * maxX)
     newH = 180.0 + spinAngle
     self._camParent.setH(newH)
     spinAngle = spinAngle * (pi / 180.0)
     distBehindToon = Globals.Camera.SpinRadius * cos(spinAngle)
     distToRightOfToon = Globals.Camera.SpinRadius * sin(spinAngle)
     d = self._camParent.getX() - clamp(toonPos[0], *self._bounds[0])
     if abs(d) > Globals.Camera.LeewayX:
         if d > Globals.Camera.LeewayX:
             x = toonPos[0] + Globals.Camera.LeewayX
         else:
             x = toonPos[0] - Globals.Camera.LeewayX
     x = self._toon.getX(render) + distToRightOfToon
     boundToonZ = min(toonPos[2], self._bounds[2][1])
     d = z - boundToonZ
     if d > Globals.Camera.MinLeewayZ:
         if self._player.velocity[2] >= 0 and toonPos[
                 1] != self._prevToonY or self._player.velocity[2] > 0:
             z = boundToonZ + d * INVERSE_E**(dt *
                                              Globals.Camera.CatchUpRateZ)
         elif d > Globals.Camera.MaxLeewayZ:
             z = boundToonZ + Globals.Camera.MaxLeewayZ
     else:
         if d < -Globals.Camera.MinLeewayZ:
             z = boundToonZ - Globals.Camera.MinLeewayZ
     if self._frozen:
         y = camPos[1]
     else:
         y = self._toon.getY(render) - distBehindToon
     self._camParent.setPos(x, smooth(camPos[1], y), smooth(camPos[2], z))
     if toonPos[2] < self._bounds[2][1]:
         h = self._cameraLookAtNP.getH()
         if d >= Globals.Camera.MinLeewayZ:
             self._cameraLookAtNP.lookAt(self._toon, 0, 0, self._lookAtZ)
         else:
             if d <= -Globals.Camera.MinLeewayZ:
                 self._cameraLookAtNP.lookAt(self._camParent, 0, 0,
                                             self._lookAtZ)
         self._cameraLookAtNP.setHpr(h, self._cameraLookAtNP.getP(), 0)
         self._camera.setHpr(
             smooth(self._camera.getHpr(), self._cameraLookAtNP.getHpr()))
     self._prevToonY = toonPos[1]
Пример #2
0
 def update(self, dt):
     toonPos = self.toon.getPos()
     self.parent.setPos(self.toon.getParent(), clamp(toonPos.getX(), self.minPos[0], self.maxPos[0]), clamp(toonPos.getY(), self.minPos[1], self.maxPos[1]), 0)
     if self._camDistance != self._camTargetDistance:
         self._updateCameraDistance()
     if self.shakeOffset > 0 or self.shakeStrength > 0:
         self.updateShake(dt)
     self.updateRumble(dt)
Пример #3
0
 def update(self, dt=0.0):
     if self._camera is None:
         return
     quadNum = clamp(self.getCameraActualQuadrant(), 0, self._numQuads - 1)
     if quadNum < self._numQuads:
         self.quadrants[quadNum].update(dt)
         if quadNum + 1 < self._numQuads:
             self.quadrants[(quadNum + 1)].update(dt)
         if quadNum != self._currentQuadNum:
             self._switchToQuadrant(quadNum)
     return
Пример #4
0
    def _updateCamera(self, dt):
        numPlayers = 0.0
        for player in self.game.players:
            if player != self and player.toon and self._isNearPlayer(player):
                numPlayers += 1

        d = clamp(
            Globals.CameraMinDistance + numPlayers /
            (CogdoGameConsts.MaxPlayers - 1) *
            (Globals.CameraMaxDistance - Globals.CameraMinDistance),
            Globals.CameraMinDistance, Globals.CameraMaxDistance)
        self.cameraMgr.setCameraTargetDistance(d)
        self.cameraMgr.update(dt)
Пример #5
0
 def enterLockOnToon(self, elapsedTime=0.0):
     self.notify.info(
         "enter%s: '%s' -> '%s', elapsedTime:%s" %
         (self.newState, self.oldState, self.newState, elapsedTime))
     taskName = 'updateLockOnTask-%i' % self.index
     taskMgr.add(self.updateLockOnTask, taskName, 45, extraArgs=[])
     messenger.send(CogdoFlyingLegalEagle.LockOnToonEventName,
                    [self.target.doId])
     range = self.target.getDistance(
         self.interestConeOrigin) / self.getInterestConeLength()
     range = clamp(range, 0.0, 1.0)
     dur = Globals.LegalEagle.LockOnTime
     if self.oldState == 'TakeOff':
         dur *= range
     else:
         dur += Globals.LegalEagle.ExtraPostCooldownTime
     taskName = 'exitLockOnToon-%i' % self.index
     taskMgr.doMethodLater(dur, self.requestNext, taskName, extraArgs=[])
Пример #6
0
 def update(self):
     for toon, marker in self._toonMarkers.items():
         progress = clamp((toon.getY() - self._levelStartY) / self._levelDistance, self._levelStartY, self._levelEndY)
         marker.setZ(clamp(self._lineStart + self._lineDistance * progress, self._lineStart, self._lineEnd))
Пример #7
0
 def updateDistance(self, distance):
     self.targetDistance = clamp(distance, -1.0, 1.0)