135 lines
5.6 KiB
Python
135 lines
5.6 KiB
Python
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.distributed.ClockDelta import *
|
|
from direct.fsm import ClassicFSM
|
|
from direct.fsm import State
|
|
from direct.interval.IntervalGlobal import *
|
|
from panda3d.core import *
|
|
|
|
import DistributedElevator
|
|
from ElevatorConstants import *
|
|
from ElevatorUtils import *
|
|
from toontown.hood import ZoneUtil
|
|
from otp.nametag.NametagGroup import NametagGroup
|
|
from otp.nametag.Nametag import Nametag
|
|
from otp.nametag.NametagConstants import *
|
|
from toontown.toonbase import TTLocalizer
|
|
from toontown.toonbase import ToontownGlobals
|
|
|
|
class DistributedElevatorExt(DistributedElevator.DistributedElevator):
|
|
|
|
def __init__(self, cr):
|
|
DistributedElevator.DistributedElevator.__init__(self, cr)
|
|
self.nametag = None
|
|
self.currentFloor = -1
|
|
return
|
|
|
|
def setupElevator(self):
|
|
if self.isSetup:
|
|
self.elevatorSphereNodePath.removeNode()
|
|
self.leftDoor = self.bldg.leftDoor
|
|
self.rightDoor = self.bldg.rightDoor
|
|
DistributedElevator.DistributedElevator.setupElevator(self)
|
|
self.setupNametag()
|
|
|
|
def disable(self):
|
|
self.clearNametag()
|
|
DistributedElevator.DistributedElevator.disable(self)
|
|
|
|
def setupNametag(self):
|
|
if self.nametag == None:
|
|
self.nametag = NametagGroup()
|
|
self.nametag.setFont(ToontownGlobals.getBuildingNametagFont())
|
|
if TTLocalizer.BuildingNametagShadow:
|
|
self.nametag.setShadow(*TTLocalizer.BuildingNametagShadow)
|
|
self.nametag.setContents(Nametag.CName)
|
|
self.nametag.setColorCode(NametagGroup.CCSuitBuilding)
|
|
self.nametag.setActive(0)
|
|
self.nametag.setAvatar(self.getElevatorModel())
|
|
name = self.cr.playGame.dnaStore.getTitleFromBlockNumber(self.bldg.block)
|
|
if not name:
|
|
name = TTLocalizer.CogsInc
|
|
else:
|
|
name += TTLocalizer.CogsIncExt
|
|
self.nametag.setName(name)
|
|
self.nametag.manage(base.marginManager)
|
|
|
|
def clearNametag(self):
|
|
if self.nametag != None:
|
|
self.nametag.unmanage(base.marginManager)
|
|
self.nametag.setAvatar(NodePath())
|
|
self.nametag.destroy()
|
|
self.nametag = None
|
|
return
|
|
|
|
def getBldgDoorOrigin(self):
|
|
return self.bldg.getSuitDoorOrigin()
|
|
|
|
def gotBldg(self, buildingList):
|
|
self.bldgRequest = None
|
|
self.bldg = buildingList[0]
|
|
if not self.bldg:
|
|
self.notify.warning('setBldgDoId: elevator %d cannot find bldg %d!' % (self.doId, self.bldgDoId))
|
|
return
|
|
if self.getBldgDoorOrigin():
|
|
self.bossLevel = self.bldg.getBossLevel()
|
|
self.setupElevator()
|
|
else:
|
|
self.notify.warning('setBldgDoId: elevator %d cannot find suitDoorOrigin for bldg %d!' % (self.doId, self.bldgDoId))
|
|
return
|
|
|
|
def setFloor(self, floorNumber):
|
|
self.currentFloor = 0
|
|
if hasattr(self, 'bldg'):
|
|
if self.currentFloor >= 0:
|
|
if self.bldg.floorIndicator[self.currentFloor]:
|
|
self.bldg.floorIndicator[self.currentFloor].setColor(LIGHT_OFF_COLOR)
|
|
if floorNumber >= 0:
|
|
if self.bldg.floorIndicator[floorNumber]:
|
|
self.bldg.floorIndicator[floorNumber].setColor(LIGHT_ON_COLOR)
|
|
self.currentFloor = floorNumber
|
|
|
|
def handleEnterSphere(self, collEntry):
|
|
self.notify.debug('Entering Elevator Sphere....')
|
|
if hasattr(localAvatar, 'boardingParty') and localAvatar.boardingParty and localAvatar.boardingParty.getGroupLeader(localAvatar.doId) and localAvatar.boardingParty.getGroupLeader(localAvatar.doId) != localAvatar.doId:
|
|
base.localAvatar.elevatorNotifier.showMe(TTLocalizer.ElevatorGroupMember)
|
|
else:
|
|
self.cr.playGame.getPlace().detectedElevatorCollision(self)
|
|
|
|
def handleEnterElevator(self):
|
|
if hasattr(localAvatar, 'boardingParty') and localAvatar.boardingParty and localAvatar.boardingParty.getGroupLeader(localAvatar.doId):
|
|
if localAvatar.boardingParty.getGroupLeader(localAvatar.doId) == localAvatar.doId:
|
|
localAvatar.boardingParty.handleEnterElevator(self)
|
|
elif base.localAvatar.hp > 0:
|
|
toon = base.localAvatar
|
|
self.sendUpdate('requestBoard', [])
|
|
else:
|
|
self.notify.warning('Tried to board elevator with hp: %d' % base.localAvatar.hp)
|
|
|
|
def enterWaitEmpty(self, ts):
|
|
self.elevatorSphereNodePath.unstash()
|
|
self.forceDoorsOpen()
|
|
self.accept(self.uniqueName('enterelevatorSphere'), self.handleEnterSphere)
|
|
self.accept(self.uniqueName('enterElevatorOK'), self.handleEnterElevator)
|
|
DistributedElevator.DistributedElevator.enterWaitEmpty(self, ts)
|
|
|
|
def exitWaitEmpty(self):
|
|
self.elevatorSphereNodePath.stash()
|
|
self.ignore(self.uniqueName('enterelevatorSphere'))
|
|
self.ignore(self.uniqueName('enterElevatorOK'))
|
|
DistributedElevator.DistributedElevator.exitWaitEmpty(self)
|
|
|
|
def enterWaitCountdown(self, ts):
|
|
DistributedElevator.DistributedElevator.enterWaitCountdown(self, ts)
|
|
self.forceDoorsOpen()
|
|
self.accept(self.uniqueName('enterElevatorOK'), self.handleEnterElevator)
|
|
self.startCountdownClock(self.countdownTime, ts)
|
|
|
|
def exitWaitCountdown(self):
|
|
self.ignore(self.uniqueName('enterElevatorOK'))
|
|
DistributedElevator.DistributedElevator.exitWaitCountdown(self)
|
|
|
|
def getZoneId(self):
|
|
return self.bldg.interiorZoneId
|
|
|
|
def getElevatorModel(self):
|
|
return self.bldg.getSuitElevatorNodePath()
|