137 lines
4.3 KiB
Python
137 lines
4.3 KiB
Python
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.distributed import ClockDelta
|
|
from direct.distributed import DistributedObject
|
|
from direct.fsm import ClassicFSM
|
|
from direct.fsm import State
|
|
from direct.interval.IntervalGlobal import *
|
|
from panda3d.core import *
|
|
import random
|
|
|
|
import DistributedToon
|
|
import NPCToons
|
|
from otp.nametag.NametagGroup import NametagGroup
|
|
from toontown.quest import QuestChoiceGui
|
|
from toontown.quest import QuestParser
|
|
from toontown.quest import Quests
|
|
from toontown.toonbase import ToontownGlobals
|
|
|
|
|
|
class DistributedNPCToonBase(DistributedToon.DistributedToon):
|
|
|
|
def __init__(self, cr):
|
|
try:
|
|
self.DistributedNPCToon_initialized
|
|
except:
|
|
self.DistributedNPCToon_initialized = 1
|
|
DistributedToon.DistributedToon.__init__(self, cr)
|
|
self.__initCollisions()
|
|
self.setPickable(0)
|
|
self.setPlayerType(NametagGroup.CCNonPlayer)
|
|
|
|
def disable(self):
|
|
self.ignore('enter' + self.cSphereNode.getName())
|
|
DistributedToon.DistributedToon.disable(self)
|
|
|
|
def delete(self):
|
|
try:
|
|
self.DistributedNPCToon_deleted
|
|
except:
|
|
self.DistributedNPCToon_deleted = 1
|
|
self.__deleteCollisions()
|
|
DistributedToon.DistributedToon.delete(self)
|
|
|
|
def generate(self):
|
|
DistributedToon.DistributedToon.generate(self)
|
|
self.cSphereNode.setName(self.uniqueName('NPCToon'))
|
|
self.detectAvatars()
|
|
self.setParent(ToontownGlobals.SPRender)
|
|
self.startLookAround()
|
|
|
|
def generateToon(self):
|
|
self.setLODs()
|
|
self.generateToonLegs()
|
|
self.generateToonHead()
|
|
self.generateToonTorso()
|
|
self.generateToonColor()
|
|
self.parentToonParts()
|
|
self.rescaleToon()
|
|
self.resetHeight()
|
|
self.rightHands = []
|
|
self.leftHands = []
|
|
self.headParts = []
|
|
self.hipsParts = []
|
|
self.torsoParts = []
|
|
self.legsParts = []
|
|
self.__bookActors = []
|
|
self.__holeActors = []
|
|
|
|
def announceGenerate(self):
|
|
self.initToonState()
|
|
DistributedToon.DistributedToon.announceGenerate(self)
|
|
|
|
def initToonState(self):
|
|
self.setAnimState('neutral', 0.9, None, None)
|
|
npcOrigin = render.find('**/npc_origin_' + str(self.posIndex))
|
|
if not npcOrigin.isEmpty():
|
|
self.reparentTo(npcOrigin)
|
|
self.initPos()
|
|
|
|
def initPos(self):
|
|
self.clearMat()
|
|
|
|
def wantsSmoothing(self):
|
|
return 0
|
|
|
|
def detectAvatars(self):
|
|
self.accept('enter' + self.cSphereNode.getName(), self.handleCollisionSphereEnter)
|
|
|
|
def ignoreAvatars(self):
|
|
self.ignore('enter' + self.cSphereNode.getName())
|
|
|
|
def getCollSphereRadius(self):
|
|
return 3.25
|
|
|
|
def __initCollisions(self):
|
|
self.cSphere = CollisionTube(0.0, 1.0, 0.0, 0.0, 1.0, 5.0, self.getCollSphereRadius())
|
|
self.cSphere.setTangible(0)
|
|
self.cSphereNode = CollisionNode('cSphereNode')
|
|
self.cSphereNode.addSolid(self.cSphere)
|
|
self.cSphereNodePath = self.attachNewNode(self.cSphereNode)
|
|
self.cSphereNodePath.hide()
|
|
self.cSphereNode.setCollideMask(ToontownGlobals.WallBitmask)
|
|
|
|
def __deleteCollisions(self):
|
|
del self.cSphere
|
|
del self.cSphereNode
|
|
self.cSphereNodePath.removeNode()
|
|
del self.cSphereNodePath
|
|
|
|
def handleCollisionSphereEnter(self, collEntry):
|
|
pass
|
|
|
|
def setupAvatars(self, av):
|
|
self.ignoreAvatars()
|
|
self.lookAtAvatar(av)
|
|
|
|
def lookAtAvatar(self, av):
|
|
av.headsUp(self, 0, 0, 0)
|
|
self.headsUp(av, 0, 0, 0)
|
|
av.stopLookAround()
|
|
av.lerpLookAt(Point3(-0.5, 4, 0), time=0.5)
|
|
self.stopLookAround()
|
|
self.lerpLookAt(Point3(av.getPos(self)), time=0.5)
|
|
|
|
def b_setPageNumber(self, paragraph, pageNumber):
|
|
self.setPageNumber(paragraph, pageNumber)
|
|
self.d_setPageNumber(paragraph, pageNumber)
|
|
|
|
def d_setPageNumber(self, paragraph, pageNumber):
|
|
timestamp = ClockDelta.globalClockDelta.getFrameNetworkTime()
|
|
self.sendUpdate('setPageNumber', [paragraph, pageNumber, timestamp])
|
|
|
|
def freeAvatar(self):
|
|
base.localAvatar.posCamera(0, 0)
|
|
base.cr.playGame.getPlace().setState('walk')
|
|
|
|
def setPositionIndex(self, posIndex):
|
|
self.posIndex = posIndex
|