VERSION 5.00 Object = "{34F681D0-3640-11CF-9294-00AA00B8A733}#1.0#0"; "danim.dll" Begin VB.Form coffee BorderStyle = 1 'Fixed Single Caption = "Coffee" ClientHeight = 4080 ClientLeft = 45 ClientTop = 330 ClientWidth = 7800 LinkTopic = "Form1" MaxButton = 0 'False MinButton = 0 'False ScaleHeight = 4080 ScaleWidth = 7800 StartUpPosition = 3 'Windows Default Begin DirectAnimationCtl.DAViewerControlWindowed DAViewerControlWindowed Height = 3850 Left = 120 OleObjectBlob = "coffee.frx":0000 TabIndex = 0 Top = 120 Width = 7575 End End Attribute VB_Name = "coffee" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False ' Visual Basic verion of Coffee Dim mediaBase, geoBase, imgBase, midiBase As String Private Sub Form_Load() mediaBase = CurDir + "\..\..\..\..\..\Media\" geoBase = mediaBase + "geometry\" imgBase = mediaBase + "image\" sndBase = mediaBase + "sound\" 'Set the background Set imgBackGround = ImportImage(imgBase + "clouds_coffee.gif") 'Create the final montage by layering the espresso machine, the cups and the steam 'on top of each other. Set finalMtg = UnionMontage(UnionMontage(steamMontage(), _ montage()), machineMontage()) 'Create the final image. Set finalImage = Overlay(finalMtg.Render(), Overlay(beans(), imgBackGround)) Set finalImage = Overlay(finalImage, SolidColorImage(White)) DAViewerControlWindowed.UpdateInterval = 0.2 'Display the final image. DAViewerControlWindowed.Image = finalImage 'Set the sound. DAViewerControlWindowed.sound = Mix(sound().Pan(-1), sound().Pan(1)) 'Start the animation. DAViewerControlWindowed.Start End Sub Function sound() 'This function creates the sound, which starts out as silence, and then 'changes to steam.mp2 when the image is clicked. Set steamDurationConst = DANumber(7.25) Set steamSound = ImportSound(sndBase + "steam.mp2").sound Set s0 = CreateObject("DirectAnimation.DASound") s0.Init DAStatics.Until(Silence, LeftButtonDown, _ DAStatics.Until(steamSound.Gain(0.85), TimerAnim(steamDurationConst), s0)) Set sound = s0 End Function Function montage() 'This function creates a montage of five cups, which rotate around the espresso 'machine. The orbit is constructed by the orbitCup function. pi = 3.14159265359 total = 5 Set cupImageX = EmptyMontage For i = 0 To total Set cupImageX = UnionMontage(cupImageX, orbitCup(Add(Mul(DANumber(i), _ Mul(DANumber(2), Div(DANumber(pi), DANumber(total)))), LocalTime))) Next Set montage = cupImageX End Function Function beans() 'This function creates the beans you see in the background. Two images, 'bean1.gif and bean2.gif are imported, and then moved across the screen 'while being rotated. Set delay = DANumber(0.5) Set Size = DANumber(0.5) Set initBean1 = ImportImage(imgBase + "bean1.gif") Set initBean2 = ImportImage(imgBase + "bean2.gif") Set image0 = CreateObject("DirectAnimation.DAImage") Set image1 = CreateObject("DirectAnimation.DAImage") image0.Init DAStatics.Until(initBean1, TimerAnim(delay), image1) image1.Init DAStatics.Until(initBean2, TimerAnim(delay), image0) Set bean1 = image0.Transform(Scale2UniformAnim(Size)) Set bean2 = image1.Transform(Scale2UniformAnim(Size)) Set beans = Overlay(bean1.Transform(Translate2(-0.01, -0.01)), _ bean2.Transform(Translate2(0.01, 0))) Set rain = beans.Tile() Set motion = Mul(LocalTime, Mul(DANumber(2), _ Div(DANumber(0.03), DANumber(4)))) Set beans = rain.Transform(Translate2Anim(Neg(motion), Neg(motion))) End Function Function machineMontage() 'This function displays the espresso machine. Set steamDurationConst = DANumber(7.25) Set espreso1 = ImportImage(imgBase + "espreso1.gif") Set espreso2 = ImportImage(imgBase + "espreso2.gif") Set image5 = CreateObject("DirectAnimation.DAImage") image5.Init DAStatics.Until(espreso1, LeftButtonDown, _ DAStatics.Until(espreso2, TimerAnim(steamDurationConst), image5)) Set machineMontage = ImageMontage(image5, 0) End Function Function steamMontage() 'This function displays the steam you see when you click on the image. Set steamDurationConst = DANumber(7.25) Dim steamImages(4) Set steamImages(0) = ImportImage(imgBase + "steam_1.gif") Set steamImages(1) = ImportImage(imgBase + "steam_2.gif") Set steamImages(2) = ImportImage(imgBase + "steam_3.gif") Set steamImages(3) = ImportImage(imgBase + "steam_4.gif") Set steamImages(4) = ImportImage(imgBase + "steam_5.gif") Set steamLen = DANumber(4) Set condition = GT(Add(Div(Mul(LocalTime, steamLen), _ steamDurationConst), DANumber(1)), steamLen) Set result2 = Add(Div(Mul(LocalTime, steamLen), _ steamDurationConst), DANumber(1)) Set Index = Cond(condition, steamLen, result2) Set a = DAStatics.Array(steamImages) Set s0 = CreateObject("DirectAnimation.DAImage") s0.Init DAStatics.Until(EmptyImage, LeftButtonDown, _ DAStatics.Until(a.NthAnim(Index), TimerAnim(steamDurationConst), s0)) Set image1 = s0.Transform(Translate2(-0.0085, 0.002)) Set steamMontage = ImageMontage(image1, -0.0001) End Function Function orbitCup(angle) pi = 3.14159265359 Set pos = Point3(0, 0.05, 0) Set pos = pos.Transform(Compose3(Rotate3Anim(XVector3, Mul(DANumber(7), _ Div(DANumber(pi), DANumber(16)))), Rotate3Anim(ZVector3, angle))) Set cupAngle = LocalTime Set imageXX = cupImage(cupAngle).Transform(Compose2(Translate2Anim(pos.X, pos.Y), _ Scale2UniformAnim(DAStatics.Sub(DANumber(1), _ Mul(DAStatics.Abs(DAStatics.Cos(Div(angle, _ DANumber(2)))), DANumber(0.5)))))) Set orbitCup = ImageMontageAnim(imageXX, Neg(pos.Z)) End Function Function cupImage(cupAngle) pi = 3.14159265359 Dim cupImages cupImages = Array(ImportImage(imgBase + "cup1.gif"), _ ImportImage(imgBase + "cup2.gif"), ImportImage(imgBase + "cup3.gif"), _ ImportImage(imgBase + "cup4.gif"), ImportImage(imgBase + "cup5.gif"), _ ImportImage(imgBase + "cup6.gif"), ImportImage(imgBase + "cup7.gif"), _ ImportImage(imgBase + "cup8.gif")) Set Number = DANumber(7) Set Index = Add(DAStatics.Mod(Mul(Number, Div(cupAngle, _ Mul(DANumber(2), DANumber(pi)))), Number), DANumber(1)) Set a = DAStatics.Array(cupImages) Set cupImage = a.NthAnim(Index) End Function