//***************************************************************
//** By Damo the Great
//** A Roational Stopwatch with some text movement effects - This will
//** create a clock face with drawing commands and the use of maths
//** to get the angle correctly
//** But most importantly, it builds up tweens to calculate around
//** the clock face and every second, it will move round, changing colours
//** changing angles, and added a bit extra to create a Text Tween of which
//** you can easily programatically do wonderful things with TextTweens
//**
//** Example of various tween commands
//**
//** SetSpriteTweenX
//** SetSpriteTweenY
//** CreateTweenSprite
//** CreateTweenChain
//** AddTweenChainSprite
//** UpdateTweenChain
//** PlayTweenChain
//** PlayTweenChain
//** UpdateAllTweens
//*************************************************************
// Lets setup the display
#Constant width=1024
#Constant height=768
SetWindowSize( width, height, 0 )
SetVirtualResolution( width, height )
tween as integer[60]
// Setup a starting location and colours
oldpositionx=width/2 : oldpositiony=height/2
beginx#=width/2
beginy#=height/2
// *******************************************************************
// Lets create a sprite first and position it somewhere on the screen
render()
DrawEllipse(0,0,50,50,makecolor(255,255,255),makecolor(255,255,255),1)
swap()
sprite = CreateSprite( getimage(0,0,50,50 ))
SetSpritePosition(sprite,oldpositionx,oldpositiony)
SetSpriteScale(sprite,.5,.5)
SetSpritePositionByOffset(sprite,50,50)
// *******************************************************************
//Setup a chain of tweens to follow on from one another in a sequence
chain=CreateTweenChain()
secstep=30 // 30 = as minute hands, 12 = hours, 6 = seconds
depth#=200 // the distance of the starting (centre of screen to the end
sec=secstep
// Lets setup the multiple of tweems depending how big you have set the tween array above
for tweens=1 to tween.length
// Create a sprite tween first with a delay of 1 (so at least it starts)
tween[tweens] = CreateTweenSprite( 1 )
// Lets create a new position - This is how to work out Angles particularly for a
// clock face
endx#=width/2 - depth# * cos(270-sec)
endy#=height/2 + depth# * sin(270-sec)
inc sec,secstep
// +30 cause a full circle is 360d and there are 12 hands in the hour hand - 360/12 = 30
endcolour=random(1,255)
// Setup the coordinates begin and end and interpolation
// There are a few default interopulations with nice effects
SetTweenSpriteXByOffset(tween[tweens],beginx#,endx#,TweenBounce())
SetTweenSpriteYByOffset(tween[tweens],beginy#,endy#,TweenBounce())
// Setup an angle for the sprite which will change the angle in one pass of the update
SetTweenSpriteAngle(tween[tweens],220-secstep+sec,220-secstep+sec,TweenLinear())
// For effect change the tween colour upon stages of the length
// Starting at BeginColour and EndColour variables
SetTweenSpriteBlue(tween[tweens],random(1,255),random(1,255),TweenSmooth1())
SetTweenSpriteRed(tween[tweens],random(1,255),random(1,255),TweenSmooth1())
SetTweenSpriteGreen(tween[tweens],random(1,255),random(1,255),TweenSmooth1())
// When the for loop is finished --> Next then next rotation of the for loop the tween
// commands need to remember where and what colour the tween finished up at and for it
// to start where it finished
begincolour=endcolour
beginx#=endx#
beginy#=endy#
AddTweenChainSprite( chain, tween[tweens], sprite, 0 )
next
// Mainloop to setup the clock and start the tweens
do
// Make some lines for a clock face.
for a=1 to 360 step secstep
endx#=width/2 + (depth#-40) * cos(a)
endy#=height/2 - (depth#-40) * sin(a)
drawline(width/2,height/2,endx#,endy#,makecolor(255,255,255),makecolor(0,0,0))
DrawEllipse(endx#,endy#,5,5,makecolor(0,0,0),makecolor(0,255,255),1)
next
// We can play the tweens by running the chain event
PlayTweenChain( chain )
UpdateAllTweens(GetFrameTime())
Sync()
loop
Help make AGK better by submitting an example for this command! (All examples are subject to approval)