mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-23 11:42:39 -06:00
138 lines
5 KiB
Python
138 lines
5 KiB
Python
|
from panda3d.core import *
|
||
|
from direct.interval.IntervalGlobal import *
|
||
|
from toontown.battle.BattleProps import globalPropPool
|
||
|
|
||
|
class Wake(NodePath):
|
||
|
wakeCount = 0
|
||
|
|
||
|
def __init__(self, parent = hidden, target = hidden):
|
||
|
NodePath.__init__(self)
|
||
|
self.assign(parent.attachNewNode('wake'))
|
||
|
self.target = target
|
||
|
self.ripples = globalPropPool.getProp('ripples')
|
||
|
tformNode = self.ripples.getChild(0)
|
||
|
tformNode.setZ(0.01)
|
||
|
self.seqNodePath = self.ripples.find('**/+SequenceNode')
|
||
|
self.seqNode = self.seqNodePath.node()
|
||
|
self.sortBase = 10
|
||
|
self.rippleCount = 0
|
||
|
self.doLaters = [None] * 20
|
||
|
self.trackId = Wake.wakeCount
|
||
|
Wake.wakeCount += 1
|
||
|
return
|
||
|
|
||
|
def createRipple(self, zPos, rate = 1.0, startFrame = 0):
|
||
|
ripple = self.ripples.copyTo(self)
|
||
|
ripple.iPos(self.target)
|
||
|
ripple.setZ(render, zPos + self.rippleCount * 0.001)
|
||
|
ripple.setBin('fixed', self.sortBase + self.rippleCount, 1)
|
||
|
seqNode = ripple.find('**/+SequenceNode').node()
|
||
|
seqNode.setPlayRate(rate)
|
||
|
seqNode.play(startFrame, seqNode.getNumFrames() - 1)
|
||
|
duration = (24 - startFrame) / 24.0
|
||
|
|
||
|
def clearDoLaterList(rippleCount):
|
||
|
self.doLaters[rippleCount] = None
|
||
|
return
|
||
|
|
||
|
def destroyRipple(task):
|
||
|
ripple.removeNode()
|
||
|
|
||
|
t = taskMgr.doMethodLater(duration, clearDoLaterList, 'wake-%d-destroy-%d' % (self.trackId, self.rippleCount), extraArgs=(self.rippleCount,), uponDeath=destroyRipple)
|
||
|
self.doLaters[self.rippleCount] = t
|
||
|
self.rippleCount = (self.rippleCount + 1) % 20
|
||
|
|
||
|
def stop(self):
|
||
|
for i in xrange(len(self.doLaters)):
|
||
|
if self.doLaters[i]:
|
||
|
taskMgr.remove(self.doLaters[i])
|
||
|
self.doLaters[i] = None
|
||
|
|
||
|
return
|
||
|
|
||
|
def destroy(self):
|
||
|
self.stop()
|
||
|
self.removeNode()
|
||
|
self.ripples.removeNode()
|
||
|
del self.target
|
||
|
|
||
|
|
||
|
class WakeSequence(NodePath):
|
||
|
wakeCount = 0
|
||
|
|
||
|
def __init__(self, parent = hidden):
|
||
|
NodePath.__init__(self)
|
||
|
self.assign(globalPropPool.getProp('wake'))
|
||
|
self.reparentTo(parent)
|
||
|
tformNode = self.getChild(0)
|
||
|
tformNode.setZ(0.1)
|
||
|
self.startNodePath = self.find('**/+SequenceNode')
|
||
|
self.startSeqNode = self.startNodePath.node()
|
||
|
self.startSeqNode.setName('start')
|
||
|
self.startSeqNode.setPlayRate(0)
|
||
|
self.cycleNodePath = NodePath(SequenceNode(0, 'cycle'))
|
||
|
self.cycleNodePath.reparentTo(tformNode)
|
||
|
self.cycleSeqNode = self.cycleNodePath.node()
|
||
|
self.endNodePath = NodePath(SequenceNode(0, 'end'))
|
||
|
self.endNodePath.reparentTo(tformNode)
|
||
|
self.endSeqNode = self.endNodePath.node()
|
||
|
children = self.startNodePath.getChildren()
|
||
|
for child in children[12:16]:
|
||
|
child.reparentTo(self.cycleNodePath)
|
||
|
|
||
|
for child in children[16:]:
|
||
|
child.reparentTo(self.endNodePath)
|
||
|
|
||
|
self.tracks = []
|
||
|
self.rate = None
|
||
|
self.trackId = Wake.wakeCount
|
||
|
Wake.wakeCount += 1
|
||
|
self.setBin('fixed', 10, 1)
|
||
|
self.hide()
|
||
|
return
|
||
|
|
||
|
def createTracks(self, rate = 1):
|
||
|
self.stop()
|
||
|
self.tracks = []
|
||
|
tflipDuration = self.startSeqNode.getNumChildren() / (float(rate) * 24)
|
||
|
startTrack = Sequence(Func(self.show), Func(self.showTrack, 0), Func(self.startSeqNode.play, 0, self.startSeqNode.getNumFrames() - 1), Func(self.startSeqNode.setPlayRate, rate), Wait(tflipDuration), Func(self.showTrack, 1), Func(self.startSeqNode.play, 0, self.startSeqNode.getNumFrames() - 1), Func(self.cycleSeqNode.setPlayRate, rate), name='start-wake-track-%d' % self.trackId)
|
||
|
self.tracks.append(startTrack)
|
||
|
tflipDuration = self.endSeqNode.getNumChildren() / (float(rate) * 24)
|
||
|
endTrack = Sequence(Func(self.showTrack, 2), Func(self.endSeqNode.play, 0, self.endSeqNode.getNumFrames() - 1), Func(self.endSeqNode.setPlayRate, rate), Wait(tflipDuration), Func(self.endSeqNode.setPlayRate, 0), Func(self.hide), name='end-wake-track-%d' % self.trackId)
|
||
|
self.tracks.append(endTrack)
|
||
|
self.rate = rate
|
||
|
|
||
|
def showTrack(self, trackId):
|
||
|
if trackId == 0:
|
||
|
self.startNodePath.show()
|
||
|
else:
|
||
|
self.startNodePath.hide()
|
||
|
if trackId == 1:
|
||
|
self.cycleNodePath.show()
|
||
|
else:
|
||
|
self.cycleNodePath.hide()
|
||
|
if trackId == 2:
|
||
|
self.endNodePath.show()
|
||
|
else:
|
||
|
self.endNodePath.hide()
|
||
|
|
||
|
def play(self, trackId, rate = 1):
|
||
|
if self.rate != rate:
|
||
|
self.createTracks(rate)
|
||
|
self.tracks[trackId].start()
|
||
|
|
||
|
def loop(self, trackId, rate = 1):
|
||
|
if self.rate != rate:
|
||
|
self.createTracks(rate)
|
||
|
self.tracks[trackId].loop()
|
||
|
|
||
|
def stop(self):
|
||
|
for track in self.tracks:
|
||
|
track.finish()
|
||
|
|
||
|
def destroy(self):
|
||
|
self.stop()
|
||
|
self.tracks = None
|
||
|
self.removeNode()
|
||
|
return
|