Timer (script)
| Timer (script) | |
|---|---|
| Category | information |
| Front-end | Genie |
| Author | User:Shift3 |
Include this script into your genie scripts to have a timer functionality. Works cross script. To import, save the script as Timer.cmd and type: "include timer.cmd" (without the quotes) at the top of your script.
If anyone else wants it, see below. Just include it into whatever script you're using and then use one of the following commands:
`gosub Timer.Refresh <timername>` - Updates this timer
`gosub Timer.Reset <timername>` - Sets the timer back to 0
`gosub Timer.SetTime <timermane> <seconds>` Sets the time to this value, backdates the start time.
All three functions above will store the response in both the global vars var `$Timer.<timername>.elapsed` and `$Timer.<timername>.start` for when the timer start is in gametime.
- Two local vars `%Timer.lastVarName` and `%Timer.lastVarTime` are refreshed every time one of the three functions above are run.
- If the timer didn't exist then it'll be created as part of the call.
- will update the timer and store the results of the timer in `%Timer.lastVarName` = name of the timer, and `%Timer.lastVarTime` = time in seconds that have elapsed since start up to the last refresh.
I've noticed a variance of 1-3 seconds due to rounding on `$gametime` and processing time.
### import script only - meant to be used in other scripts - uses global variables that persist across sessions ###
goto Timer.Imported
### -------------------------------------------------------------------------------------------------
### ---- Actual timer code
### -------------------------------------------------------------------------------------------------
# starts the timer if it's not set
# call this before reading a timer
# single word timers
# timers are global and not reset when scripts start and shared across scripts
# Common timers:
# - almanac = last time read an almanac
# - spider = HE spider gift
# - cube = he cube gift
Timer:
var Timer.lastVarTime -1
var Timer.lastVarName NULL
### internal function only ###
### Calling this in your script creates an infinite loop
Timer.INTERNAL.Verify.Exists:
pause .0001
if !($Timer.%Timer.lastVarName.elapsed >= 0) then {
put #var Timer.%Timer.lastVarName.start $gametime
put #var Timer.%Timer.lastVarName.elapsed 0
}
return
### public functions ###
Timer.Refresh:
pause .0001
var Timer.lastVarName $1
gosub Timer.INTERNAL.Verify.Exists
MATH Timer.TMP set $gametime
MATH Timer.TMP subtract $Timer.%Timer.lastVarName.start
put #var Timer.%Timer.lastVarName.elapsed %Timer.TMP
var Timer.lastVarTime $Timer.%Timer.lastVarName.elapsed
return
#hardcodes a timer with seconds $1 = timer, $2 = seconds
#example: gosub SetTimer myTimer 200
#if timer hasn't started, it starts it first
#sets start time to current - seconds
Timer.SetTime:
pause .0001
var Timer.lastVarName $1
var Timer.lastVarTime $2
gosub Timer.INTERNAL.Verify.Exists
var Timer.tmp $gametime
MATH Timer.tmp SUB %Timer.lastVarTime
put #var Timer.%Timer.lastVarName.start %Timer.tmp
gosub Timer.Refresh %Timer.lastVarName
return
Timer.Reset:
pause .0001
gosub Timer.SetTime $1 0
return
### returns
Timer.Pause:
put #echo red >ScriptLog Pause Timer not implemented
return
### -------------------------------------------------------------------------------------------------
### ---- Unit tests for the functions above; shows usage
### -------------------------------------------------------------------------------------------------
### unit testing ###
20231119.UnitTest:
gosub 20131119.testTimer alchemyApp Timer.Reset
gosub 20131119.testTimer alchemyApp Timer.Refresh
gosub 20131119.testTimer alchemyApp Timer.SetTime 999
gosub 20131119.testTimer alchemyAppB Timer.Refresh
gosub 20131119.testTimer alchemyAppB Timer.Reset
gosub 20131119.testTimer alchemyAppB Timer.Refresh
goto Timer.UnitTestComplete
20131119.TestTimer:
var tmp $1 $3
gosub $2 %tmp
put #echo >Log ---- $2 -----
put #echo >Log green --- fed: %tmp
put #echo >Log blue --- name: %Timer.lastVarName
put #echo >Log yellow --- time: %Timer.lastVarTime
put #echo >Log pink --- Debbug start: $Timer.%Timer.lastVarName.start Debug Elapsed: $Timer.%Timer.lastVarName.elapsed
pause 5
return
### -------------------------------------------------------------------------------------------------
Timer.UnitTestComplete:
Timer.imported: