historical/toontown-classic.git/toontown/toon/DistributedNPCToonBase.py
2024-01-16 11:20:27 -06:00

141 lines
4.4 KiB
Python

from panda3d.core import *
from libotp import *
from direct.directnotify import DirectNotifyGlobal
from direct.fsm import ClassicFSM
from direct.fsm import State
from toontown.toonbase import ToontownGlobals
import DistributedToon
from direct.distributed import DistributedObject
import NPCToons
from toontown.quest import Quests
from direct.distributed import ClockDelta
from toontown.quest import QuestParser
from toontown.quest import QuestChoiceGui
from direct.interval.IntervalGlobal import *
import random
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_' + `(self.posIndex)`)
if not npcOrigin.isEmpty():
self.reparentTo(npcOrigin)
self.initPos()
else:
self.notify.warning('announceGenerate: Could not find npc_origin_' + str(self.posIndex))
return
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()
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
def _startZombieCheck(self):
pass
def _stopZombieCheck(self):
pass