Hi Geoff,
Kudos.
Very impressed to see how much a code can be improved again and again.
Just a little thing: with this new very clever code, the clock will
not be at time just when opening ;-)
So 4 lines more and 2 repetitions that are not satisfying: I bet you
will find a better solution in 3 minutes!
on openCard
setTime true
end openCard
on setTime pFlag
send "setTime" to me in 1 - (the long seconds mod 1) seconds
put word 1 of the long time into T --8:13:15
put T & char 2 to 7 of (the long seconds mod 1) into fld "Time"
split T using ":"
set the angle of grc "Second" to 450 - (6 * T[3])
if pFlag then
set the angle of grc "Minute" to 90 - (6 * T[2]) - (T[3] div 10)
set the angle of grc "Hour" to 90 - (30 * T[1]) - (T[2] div 2)
end if
if T[3] mod 10 <> 0 then exit setTime
set the angle of grc "Minute" to 90 - (6 * T[2]) - (T[3] div 10)
if T[3] <> 0 or T[2] mod 2 <> 0 then exit setTime
set the angle of grc "Hour" to 90 - (30 * T[1]) - (T[2] div 2)
end setTime
Best regards from Paris,
Eric Chatonet.
Le 8 juin 05 � 16:04, Geoff Canyon a �crit :
I came up with a radically different approach. Several iterations
ago, we realized that we didn't have to guess when it would be time
to set the clock graphics. We could use 1-(the long seconds mod 1)
to get a message sent exactly when we need it.
Well, we're still guessing at when it's time to move the minute
hand or the hour hand, and we don't need to. The minute hand moves
one degree every ten seconds, the hour hand one degree every two
minutes. The tests to determine this are simple. The natural thing
to do is set the second hand, check to see if the minute hand needs
to be set, and if it does check to see if the hour hand needs to be
set. At each step, I want to exit if appropriate. The stumbling
block was the send...in. I need to get to the end to do it.
Then I realized -- the send...in doesn't have to be the last step.
It can come at any point. So here's the script now:
on openCard
setTime
end openCard
on setTime
send "setTime" to me in 1 - (the long seconds mod 1) seconds
put word 1 of the long time into T --8:13:15
put T & char 2 to 7 of (the long seconds mod 1) into fld "Time"
split T using ":"
set the angle of grc "Second" to 450 - (6 * T[3])
if T[3] mod 10 <> 0 then exit setTime
set the angle of grc "Minute" to 90 - (6 * T[2]) - (T[3] div 10)
if T[3] <> 0 or T[2] mod 2 <> 0 then exit setTime
set the angle of grc "Hour" to 90 - (30 * T[1]) - (T[2] div 2)
end setTime
Notice how simple the check is for the minute hand. Nine out of ten
seconds, the only thing this routine is going to do other than set
the second hand is check whether T[3] mod 10 is 0. This also saves
some time and math because I don't have to check the angle of the
graphics anymore. I just need to set it when the time is right. So
no more mod 360.
This is the same number of lines, but shorter and cleaner, I think.
I could save two lines by adding an else to the if statements:
if t[3] mod 10 <> 0 then exit setTime else set the angle of grc
"Minute" to 90 - (6 * T[2]) - (T[3] div 10)
But that seems artificial and less clear than using two lines.
Let me know what you think.
regards,
Geoff
----------------------------------------------------------------
So Smart Software
For institutions, companies and associations
Built-to-order applications: management, multimedia, internet, etc.
Windows, Mac OS and Linux... With the French touch
Plugins, tutorials and more on our website
----------------------------------------------------------------
Web site http://www.sosmartsoftware.com/
Email [EMAIL PROTECTED]/
Phone 33 (0)1 43 31 77 62
Mobile 33 (0)6 20 74 50 86
----------------------------------------------------------------
_______________________________________________
use-revolution mailing list
[email protected]
http://lists.runrev.com/mailman/listinfo/use-revolution