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

120 lines
4.7 KiB
Python

from direct.showbase.DirectObject import DirectObject
from toontown.toonbase.ToontownGlobals import *
from direct.directnotify import DirectNotifyGlobal
from direct.interval.IntervalGlobal import *
from direct.actor import Actor
import random
import DivingGameGlobals
class DivingFishSpawn(DirectObject):
RADIUS = 0.7
def __init__(self, spawnId, direction, position, cHandler):
loadBase = 'phase_4/models/char/'
self.entryNode = render.attachNewNode('entryNode')
self.direction = direction
self.fishArray = {}
self.inactiveArray = []
self.fishActive = 0
self.position = position
self.spawnId = spawnId
self.id = -1
def getUniqueNumber(self):
self.id += 1
return self.id
def createFish(self, fishcode):
loadBase = 'phase_4/models/char/'
if fishcode is 0:
fish = Actor.Actor('phase_4/models/char/clownFish-zero.bam', {'anim': loadBase + 'clownFish-swim.bam'})
fish.name = 'clown'
elif fishcode is 1:
fish = Actor.Actor('phase_4/models/char/PBJfish-zero.bam', {'anim': 'phase_4/models/char/PBJfish-swim.bam'})
fish.name = 'pbj'
elif fishcode is 2:
fish = Actor.Actor('phase_4/models/char/BearAcuda-zero.bam', {'anim': 'phase_4/models/char/BearAcuda-swim.bam'})
fish.name = 'bear'
elif fishcode is 3:
fish = Actor.Actor(loadBase + 'balloonFish-zero.bam', {'anim': loadBase + 'balloonFish-swim.bam'})
fish.name = 'balloon'
elif fishcode is 4:
fish = Actor.Actor(loadBase + 'nurseShark-zero.bam', {'anim': loadBase + 'nurseShark-swim.bam'})
fish.name = 'nurse'
elif fishcode is 5:
fish = Actor.Actor(loadBase + 'pianoTuna-zero.bam', {'anim': loadBase + 'pianoTuna-swim.bam'})
fish.name = 'piano'
else:
return
fish.active = 1
fish.direction = self.direction
idCode = self.getUniqueNumber()
fish.code = str(self.spawnId) + str(idCode)
self.fishArray[idCode] = fish
fish.reparentTo(render)
fish.setScale(1)
fish.moveLerp = Sequence()
if fish.name == 'clown':
fish.setH(90 * self.direction)
fish.loop('anim')
cSphere = CollisionSphere(0.0, 0.0, 0.0, 1.2)
elif fish.name == 'pbj':
fish.setH(15 * self.direction)
fish.loop('anim')
cSphere = CollisionSphere(0.0, 0.0, 0.0, 1)
elif fish.name == 'balloon':
fish.setH(0)
fish.loop('anim', fromFrame=0, toFrame=94)
fish.setScale(2)
cSphere = CollisionSphere(0.0, 0.0, 0.0, 0.2)
elif fish.name == 'bear':
fish.setH(90 * self.direction)
cSphere = CollisionSphere(0.0, -1.0, 3.5, 3.0)
fish.loop('anim')
fish.setScale(0.4, 1.7, 1.7)
elif fish.name == 'nurse':
fish.setH(90 * self.direction)
cSphere = CollisionSphere(0.0, -1.0, 0.0, 1)
fish.setScale(0.5, 1.7, 1.7)
fish.loop('anim')
elif fish.name == 'mackerel':
fish.setH(90 * self.direction)
cSphere = CollisionSphere(0.0, 0.0, 0.0, 1.5)
fish.loop('anim', fromFrame=36, toFrame=80)
elif fish.name == 'piano':
fish.loop('anim')
fish.setScale(1.4)
cSphere = CollisionSphere(0, 0, 0, 1)
fishSoundName = 'Piano_Tuna.ogg'
if self.direction is -1:
fish.setH(0)
else:
fish.setH(180)
cSphere.setTangible(0)
fish.offset = 0
cSphereNode = CollisionNode('fc' + str(fish.code))
cSphereNode.addSolid(cSphere)
cSphereNode.setFromCollideMask(BitMask32.allOff())
cSphereNode.setIntoCollideMask(DivingGameGlobals.CollideMask)
cSphereNodePath = fish.attachNewNode(cSphereNode)
self.accept('into-' + 'fc' + str(fish.code), self.__handleFishCollide)
fish.moveloop = Sequence(Wait(4), LerpScaleInterval(fish, startScale=1, scale=3, duration=1), Wait(1.5), LerpScaleInterval(fish, startScale=3, scale=1, duration=0.5))
return fish
def destroy(self):
self.ignoreAll()
for fish in self.fishArray.values():
fish.moveLerp.pause()
fish.specialLerp.finish()
if hasattr(fish, 'sound'):
fish.sound.stop()
fish.sound = None
fish.moveLerp = None
fish.specialLerp = None
fish.removeNode()
del fish
return
def __handleFishCollide(self, collEntry):
messenger.send('FishHit', [collEntry])