| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- """Undocumented Module"""
- __all__ = ()
- if __name__ == "__main__":
- from panda3d.core import Filename, Point3, Vec3
- from direct.showbase.DirectObject import DirectObject
- from direct.showbase.ShowBase import ShowBase
- from direct.actor.Actor import Actor
- from direct.directutil import Mopath
- from direct.showbase.MessengerGlobal import messenger
- from .ActorInterval import ActorInterval
- from .FunctionInterval import (
- AcceptInterval,
- EventInterval,
- FunctionInterval,
- IgnoreInterval,
- PosHprInterval,
- )
- from .LerpInterval import LerpPosInterval, LerpHprInterval, LerpPosHprInterval
- from .MopathInterval import MopathInterval
- from .SoundInterval import SoundInterval
- from .MetaInterval import PREVIOUS_END, PREVIOUS_START, TRACK_START, Track
- base = ShowBase()
- boat = base.loader.loadModel('models/misc/smiley')
- boat.reparentTo(base.render)
- donald = Actor()
- donald.loadModel("phase_6/models/char/donald-wheel-1000")
- donald.loadAnims({"steer":"phase_6/models/char/donald-wheel-wheel"})
- donald.reparentTo(boat)
- dock = base.loader.loadModel('models/misc/smiley')
- dock.reparentTo(base.render)
- sound = base.loader.loadSfx('phase_6/audio/sfx/SZ_DD_waterlap.mp3')
- foghorn = base.loader.loadSfx('phase_6/audio/sfx/SZ_DD_foghorn.mp3')
- mp = Mopath.Mopath()
- mp.loadFile(Filename('phase_6/paths/dd-e-w'))
- # Set up the boat
- boatMopath = MopathInterval(mp, boat, 'boatpath')
- boatTrack = Track([boatMopath], 'boattrack')
- BOAT_START = boatTrack.getIntervalStartTime('boatpath')
- BOAT_END = boatTrack.getIntervalEndTime('boatpath')
- # This will create an anim interval that is posed every frame
- donaldSteerInterval = ActorInterval(donald, 'steer')
- # This will create an anim interval that is started at t = 0 and then
- # loops for 10 seconds
- donaldLoopInterval = ActorInterval(donald, 'steer', loop=1, duration = 10.0)
- donaldSteerTrack = Track([donaldSteerInterval, donaldLoopInterval],
- name = 'steerTrack')
- # Make the dock lerp up so that it's up when the boat reaches the end of
- # its mopath
- dockLerp = LerpPosHprInterval(dock, 5.0,
- pos=Point3(0, 0, -5),
- hpr=Vec3(0, 0, 0),
- name='dock-lerp')
- # We need the dock's state to be defined before the lerp
- dockPos = PosHprInterval(dock, dock.getPos(), dock.getHpr(), 1.0, 'dockpos')
- dockUpTime = BOAT_END - dockLerp.getDuration()
- hpr2 = Vec3(90.0, 90.0, 90.0)
- dockLerp2 = LerpHprInterval(dock, 3.0, hpr2, name='hpr-lerp')
- dockTrack = Track([dockLerp2, dockPos, dockLerp], 'docktrack')
- dockTrack.setIntervalStartTime('dock-lerp', dockUpTime)
- dockTrack.setIntervalStartTime('hpr-lerp', BOAT_START)
- # Start the water sound 5 seconds after the boat starts moving
- waterStartTime = BOAT_START + 5.0
- waterSound = SoundInterval(sound, name='watersound')
- soundTrack = Track([waterSound], 'soundtrack')
- soundTrack.setIntervalStartTime('watersound', waterStartTime)
- # Throw an event when the water track ends
- eventTime = soundTrack.getIntervalEndTime('watersound')
- waterDone = EventInterval('water-is-done')
- waterEventTrack = Track([waterDone])
- waterEventTrack.setIntervalStartTime('water-is-done', eventTime)
- def handleWaterDone():
- print('water is done')
- # Interval can handle its own event
- messenger.accept('water-is-done', waterDone, handleWaterDone)
- foghornStartTime = BOAT_START + 4.0
- foghornSound = SoundInterval(foghorn, name='foghorn')
- soundTrack2 = Track([(foghornStartTime, foghornSound)], 'soundtrack2')
- mtrack = MultiTrack([boatTrack, dockTrack, soundTrack, soundTrack2, waterEventTrack, # type: ignore[name-defined]
- donaldSteerTrack])
- # Print out MultiTrack parameters
- print(mtrack)
- ### Using lambdas and functions ###
- # Using a lambda
- i1 = FunctionInterval(lambda: base.transitions.fadeOut())
- i2 = FunctionInterval(lambda: base.transitions.fadeIn())
- def caughtIt():
- print('Caught here-is-an-event')
- class DummyAcceptor(DirectObject):
- pass
- da = DummyAcceptor()
- i3 = AcceptInterval(da, 'here-is-an-event', caughtIt)
- i4 = EventInterval('here-is-an-event')
- i5 = IgnoreInterval(da, 'here-is-an-event')
- # Using a function
- def printDone():
- print('done')
- i6 = FunctionInterval(printDone)
- # Create track
- t1 = Track([
- # Fade out
- (0.0, i1),
- # Fade in
- (2.0, i2),
- # Accept event
- (4.0, i3),
- # Throw it,
- (5.0, i4),
- # Ignore event
- (6.0, i5),
- # Throw event again and see if ignore worked
- (7.0, i4),
- # Print done
- (8.0, i6)], name = 'demo')
- print(t1)
- ### Specifying interval start times during track construction ###
- # Interval start time can be specified relative to three different points:
- # PREVIOUS_END
- # PREVIOUS_START
- # TRACK_START
- startTime = 0.0
- def printStart():
- global startTime
- startTime = base.clock.getFrameTime()
- print('Start')
- def printPreviousStart():
- global startTime
- currTime = base.clock.getFrameTime()
- print('PREVIOUS_END %0.2f' % (currTime - startTime))
- def printPreviousEnd():
- global startTime
- currTime = base.clock.getFrameTime()
- print('PREVIOUS_END %0.2f' % (currTime - startTime))
- def printTrackStart():
- global startTime
- currTime = base.clock.getFrameTime()
- print('TRACK_START %0.2f' % (currTime - startTime))
- def printArguments(a, b, c):
- print('My args were %d, %d, %d' % (a, b, c))
- i1 = FunctionInterval(printStart)
- # Just to take time
- i2 = LerpPosInterval(base.camera, 2.0, Point3(0, 10, 5))
- # This will be relative to end of camera move
- i3 = FunctionInterval(printPreviousEnd) # type: ignore[assignment]
- # Just to take time
- i4 = LerpPosInterval(base.camera, 2.0, Point3(0, 0, 5))
- # This will be relative to the start of the camera move
- i5 = FunctionInterval(printPreviousStart) # type: ignore[assignment]
- # This will be relative to track start
- i6 = FunctionInterval(printTrackStart)
- # This will print some arguments
- # This will be relative to track start
- i7 = FunctionInterval(printArguments, extraArgs = [1, 10, 100])
- # Create the track, if you don't specify offset type in tuple it defaults to
- # relative to TRACK_START (first entry below)
- t2 = Track([(0.0, i1), # i1 start at t = 0, duration = 0.0
- (1.0, i2, TRACK_START), # i2 start at t = 1, duration = 2.0
- (2.0, i3, PREVIOUS_END), # i3 start at t = 5, duration = 0.0
- (1.0, i4, PREVIOUS_END), # i4 start at t = 6, duration = 2.0
- (3.0, i5, PREVIOUS_START), # i5 start at t = 9, duration = 0.0
- (10.0, i6, TRACK_START), # i6 start at t = 10, duration = 0.0
- (12.0, i7)], # i7 start at t = 12, duration = 0.0
- name = 'startTimeDemo')
- print(t2)
- # Play tracks
- # mtrack.play()
- # t1.play()
- # t2.play()
- def test(n):
- lerps = []
- for i in range(n):
- lerps.append(LerpPosHprInterval(dock, 5.0,
- pos=Point3(0, 0, -5),
- hpr=Vec3(0, 0, 0),
- startPos=dock.getPos(),
- startHpr=dock.getHpr(),
- name='dock-lerp'))
- lerps.append(EventInterval("joe"))
- t = Track(lerps)
- mt = MultiTrack([t])
- # return mt
- test(5)
- base.run()
|