|
@@ -29,6 +29,8 @@ import __builtin__
|
|
|
# [gjeon] to control avatar movement in drive mode
|
|
# [gjeon] to control avatar movement in drive mode
|
|
|
from direct.controls import ControlManager
|
|
from direct.controls import ControlManager
|
|
|
from direct.controls import GravityWalker
|
|
from direct.controls import GravityWalker
|
|
|
|
|
+from direct.interval.LerpInterval import LerpFunctionInterval
|
|
|
|
|
+
|
|
|
|
|
|
|
|
from toontown.toon import RobotToon
|
|
from toontown.toon import RobotToon
|
|
|
from otp.otpbase import OTPGlobals
|
|
from otp.otpbase import OTPGlobals
|
|
@@ -571,6 +573,14 @@ class LevelEditor(NodePath, DirectObject):
|
|
|
('k', self.addToLandmarkBlock),
|
|
('k', self.addToLandmarkBlock),
|
|
|
('shift-k', self.toggleShowLandmarkBlock),
|
|
('shift-k', self.toggleShowLandmarkBlock),
|
|
|
('%', self.pdbBreak),
|
|
('%', self.pdbBreak),
|
|
|
|
|
+
|
|
|
|
|
+ ('page_up', self.pageUp),
|
|
|
|
|
+ ('page_down', self.pageDown),
|
|
|
|
|
+ ]
|
|
|
|
|
+
|
|
|
|
|
+ self.overrideEvents = [
|
|
|
|
|
+ ('page_up', base.direct),
|
|
|
|
|
+ ('page_down', base.direct)
|
|
|
]
|
|
]
|
|
|
|
|
|
|
|
# Initialize state
|
|
# Initialize state
|
|
@@ -645,6 +655,10 @@ class LevelEditor(NodePath, DirectObject):
|
|
|
# [gjeon] to control drive mode
|
|
# [gjeon] to control drive mode
|
|
|
self.controlManager = None
|
|
self.controlManager = None
|
|
|
self.avatar = None
|
|
self.avatar = None
|
|
|
|
|
+
|
|
|
|
|
+ self.fov = 60
|
|
|
|
|
+ self.isPageUp=0
|
|
|
|
|
+ self.isPageDown=0
|
|
|
|
|
|
|
|
# ENABLE/DISABLE
|
|
# ENABLE/DISABLE
|
|
|
def enable(self):
|
|
def enable(self):
|
|
@@ -652,6 +666,11 @@ class LevelEditor(NodePath, DirectObject):
|
|
|
# Make sure level is visible
|
|
# Make sure level is visible
|
|
|
self.reparentTo(base.direct.group)
|
|
self.reparentTo(base.direct.group)
|
|
|
self.show()
|
|
self.show()
|
|
|
|
|
+
|
|
|
|
|
+ # [gjeon] Ignore overridden events
|
|
|
|
|
+ for event in self.overrideEvents:
|
|
|
|
|
+ event[1].ignore(event[0])
|
|
|
|
|
+
|
|
|
# Add all the action events
|
|
# Add all the action events
|
|
|
for event in self.actionEvents:
|
|
for event in self.actionEvents:
|
|
|
if len(event) == 3:
|
|
if len(event) == 3:
|
|
@@ -801,13 +820,58 @@ class LevelEditor(NodePath, DirectObject):
|
|
|
|
|
|
|
|
self.fDrive = False
|
|
self.fDrive = False
|
|
|
|
|
|
|
|
|
|
+ def lerpCameraP(self, p, time):
|
|
|
|
|
+ """
|
|
|
|
|
+ lerp the camera P over time (used by the battle)
|
|
|
|
|
+ """
|
|
|
|
|
+ taskMgr.remove('cam-p-lerp-play')
|
|
|
|
|
+ def setCamP(p):
|
|
|
|
|
+ base.camera.setP(p)
|
|
|
|
|
+
|
|
|
|
|
+ if self.isPageUp:
|
|
|
|
|
+ fromP = 36.8699
|
|
|
|
|
+ elif self.isPageDown:
|
|
|
|
|
+ fromP = -27.5607
|
|
|
|
|
+ else:
|
|
|
|
|
+ fromP = 0
|
|
|
|
|
+
|
|
|
|
|
+ self.camLerpInterval = LerpFunctionInterval(setCamP,
|
|
|
|
|
+ fromData=fromP, toData=p, duration=time,
|
|
|
|
|
+ name='cam-p-lerp')
|
|
|
|
|
+ self.camLerpInterval.start()
|
|
|
|
|
+
|
|
|
|
|
+ def clearPageUpDown(self):
|
|
|
|
|
+ if self.isPageDown or self.isPageUp:
|
|
|
|
|
+ self.lerpCameraP(0, 0.6)
|
|
|
|
|
+ self.isPageDown = 0
|
|
|
|
|
+ self.isPageUp = 0
|
|
|
|
|
+ #self.setCameraPositionByIndex(self.cameraIndex)
|
|
|
|
|
+
|
|
|
|
|
+ def pageUp(self):
|
|
|
|
|
+ if not self.isPageUp:
|
|
|
|
|
+ self.lerpCameraP(36.8699, 0.6)
|
|
|
|
|
+ self.isPageDown = 0
|
|
|
|
|
+ self.isPageUp = 1
|
|
|
|
|
+ #self.setCameraPositionByIndex(self.cameraIndex)
|
|
|
|
|
+ else:
|
|
|
|
|
+ self.clearPageUpDown()
|
|
|
|
|
+
|
|
|
|
|
+ def pageDown(self):
|
|
|
|
|
+ if not self.isPageDown:
|
|
|
|
|
+ self.lerpCameraP(-27.5607, 0.6)
|
|
|
|
|
+ self.isPageUp = 0
|
|
|
|
|
+ self.isPageDown = 1
|
|
|
|
|
+ #self.setCameraPositionByIndex(self.cameraIndex)
|
|
|
|
|
+ else:
|
|
|
|
|
+ self.clearPageUpDown()
|
|
|
|
|
+
|
|
|
def useDriveMode(self):
|
|
def useDriveMode(self):
|
|
|
""" Lerp down to eye level then switch to Drive mode """
|
|
""" Lerp down to eye level then switch to Drive mode """
|
|
|
# create avatar and set it's location to the camera
|
|
# create avatar and set it's location to the camera
|
|
|
if (self.avatar == None):
|
|
if (self.avatar == None):
|
|
|
self.avatar = RobotToon.RobotToon()
|
|
self.avatar = RobotToon.RobotToon()
|
|
|
self.avatar.setName("The Inspector")
|
|
self.avatar.setName("The Inspector")
|
|
|
- self.avatar.loop('idle')
|
|
|
|
|
|
|
+ self.avatar.loop('neutral')
|
|
|
|
|
|
|
|
self.avatar.setPos(base.camera.getPos())
|
|
self.avatar.setPos(base.camera.getPos())
|
|
|
self.avatar.reparentTo(render)
|
|
self.avatar.reparentTo(render)
|
|
@@ -888,7 +952,34 @@ class LevelEditor(NodePath, DirectObject):
|
|
|
)
|
|
)
|
|
|
else:
|
|
else:
|
|
|
self.controlManager.enable()
|
|
self.controlManager.enable()
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
+ self.avatarAnimTask = taskMgr.add(self.avatarAnimate, 'avatarAnimTask', 24)
|
|
|
|
|
+ self.avatarMoving = 0
|
|
|
|
|
+
|
|
|
|
|
+ #--------------------------------------------------------------------------
|
|
|
|
|
+ # Function: animate avatar model based on if it is moving
|
|
|
|
|
+ # Parameters: none
|
|
|
|
|
+ # Changes:
|
|
|
|
|
+ # Returns:
|
|
|
|
|
+ #--------------------------------------------------------------------------
|
|
|
|
|
+ def avatarAnimate(self,task=None):
|
|
|
|
|
+ if (self.controlManager):
|
|
|
|
|
+ if (self.controlManager.currentControls.moving and
|
|
|
|
|
+ self.avatarMoving == 0):
|
|
|
|
|
+ self.clearPageUpDown()
|
|
|
|
|
+ # moving, play walk anim
|
|
|
|
|
+ if (self.controlManager.currentControls.speed < 0 or
|
|
|
|
|
+ self.controlManager.currentControls.rotationSpeed):
|
|
|
|
|
+ self.avatar.loop('walk')
|
|
|
|
|
+ else:
|
|
|
|
|
+ self.avatar.loop('run')
|
|
|
|
|
+ self.avatarMoving = 1
|
|
|
|
|
+ elif (self.controlManager.currentControls.moving == 0 and
|
|
|
|
|
+ self.avatarMoving == 1):
|
|
|
|
|
+ # no longer moving, play neutral anim
|
|
|
|
|
+ self.avatar.loop('neutral')
|
|
|
|
|
+ self.avatarMoving = 0
|
|
|
|
|
+ return Task.cont
|
|
|
|
|
|
|
|
def configureDriveModeCollisionData(self):
|
|
def configureDriveModeCollisionData(self):
|
|
|
"""
|
|
"""
|