Timed Events

Pazyryk

Deity
Joined
Jun 13, 2008
Messages
3,584
You might be hard-pressed to find a reason to use this. But, if you want some game mechanic to be delayed by some specific amount of time in seconds or fractions of a second, you can do this using Events.LocalMachineAppUpdate. It's used by the tutorial system to decide when it's time to annoy you with some help...

Test code:
Code:
local bStart = false
local tickStart = 0
local cumIncrement = 0
local function LocalMachineAppUpdateListener(tickCount, timeIncrement)
	if bStart then
		cumIncrement = cumIncrement + timeIncrement
		print("LocalMachineAppUpdateListener: ", (tickCount - tickStart) / 1000, cumIncrement)
	else
		tickStart = tickCount
		bStart = true
	end
end
Events.LocalMachineAppUpdate.Add(LocalMachineAppUpdateListener)

Output:
Spoiler :
Code:
 EaMain: LocalMachineAppUpdateListener: 	0.11	0.11000000685453
 EaMain: LocalMachineAppUpdateListener: 	0.125	0.12500000745058
 EaMain: LocalMachineAppUpdateListener: 	0.141	0.14100000821054
 EaMain: LocalMachineAppUpdateListener: 	0.344	0.34400001727045
 EaMain: LocalMachineAppUpdateListener: 	0.39	0.39000002108514
 EaMain: LocalMachineAppUpdateListener: 	0.422	0.42200002260506
 EaMain: LocalMachineAppUpdateListener: 	0.453	0.45300002396107
 EaMain: LocalMachineAppUpdateListener: 	0.468	0.46800002455711
 EaMain: LocalMachineAppUpdateListener: 	0.5	0.50000002607703
 EaMain: LocalMachineAppUpdateListener: 	0.546	0.54600002989173
 EaMain: LocalMachineAppUpdateListener: 	0.562	0.56200003065169
 EaMain: LocalMachineAppUpdateListener: 	0.578	0.57800003141165
 EaMain: LocalMachineAppUpdateListener: 	0.609	0.60900003276765
 EaMain: LocalMachineAppUpdateListener: 	0.64	0.64000003412366
 EaMain: LocalMachineAppUpdateListener: 	1.545	1.5450000651181
 EaMain: LocalMachineAppUpdateListener: 	1.576	1.5760000664741
 EaMain: LocalMachineAppUpdateListener: 	1.592	1.592000067234
 EaMain: LocalMachineAppUpdateListener: 	1.607	1.6070000678301
 EaMain: LocalMachineAppUpdateListener: 	1.623	1.62300006859
 EaMain: LocalMachineAppUpdateListener: 	1.638	1.6380000691861
 EaMain: LocalMachineAppUpdateListener: 	1.654	1.6540000699461
 EaMain: LocalMachineAppUpdateListener: 	1.67	1.670000070706
 EaMain: LocalMachineAppUpdateListener: 	1.685	1.6850000713021
 EaMain: LocalMachineAppUpdateListener: 	1.701	1.701000072062
 EaMain: LocalMachineAppUpdateListener: 	1.732	1.732000073418
 EaMain: LocalMachineAppUpdateListener: 	1.748	1.748000074178
 EaMain: LocalMachineAppUpdateListener: 	1.763	1.763000074774
 EaMain: LocalMachineAppUpdateListener: 	1.779	1.779000075534
 EaMain: LocalMachineAppUpdateListener: 	1.794	1.79400007613
 EaMain: LocalMachineAppUpdateListener: 	1.81	1.81000007689
 EaMain: LocalMachineAppUpdateListener: 	1.826	1.82600007765
 EaMain: LocalMachineAppUpdateListener: 	1.841	1.841000078246
 EaMain: LocalMachineAppUpdateListener: 	1.857	1.857000079006
 EaMain: LocalMachineAppUpdateListener: 	1.872	1.872000079602
 EaMain: LocalMachineAppUpdateListener: 	1.888	1.888000080362
 EaMain: LocalMachineAppUpdateListener: 	1.904	1.9040000811219
 EaMain: LocalMachineAppUpdateListener: 	1.919	1.919000081718
 EaMain: LocalMachineAppUpdateListener: 	1.935	1.9350000824779
 EaMain: LocalMachineAppUpdateListener: 	1.95	1.950000083074
 EaMain: LocalMachineAppUpdateListener: 	1.982	1.9820000845939
 EaMain: LocalMachineAppUpdateListener: 	1.997	1.9970000851899
 EaMain: LocalMachineAppUpdateListener: 	2.013	2.0130000859499
 EaMain: LocalMachineAppUpdateListener: 	2.028	2.0280000865459
 EaMain: LocalMachineAppUpdateListener: 	2.044	2.0440000873059
 EaMain: LocalMachineAppUpdateListener: 	2.06	2.0600000880659
 EaMain: LocalMachineAppUpdateListener: 	2.075	2.0750000886619
 EaMain: LocalMachineAppUpdateListener: 	2.091	2.0910000894219
 EaMain: LocalMachineAppUpdateListener: 	2.106	2.1060000900179
 EaMain: LocalMachineAppUpdateListener: 	2.122	2.1220000907779
 EaMain: LocalMachineAppUpdateListener: 	2.138	2.1380000915378
 EaMain: LocalMachineAppUpdateListener: 	2.153	2.1530000921339
 EaMain: LocalMachineAppUpdateListener: 	2.169	2.1690000928938
 EaMain: LocalMachineAppUpdateListener: 	2.2	2.2000000942498
 EaMain: LocalMachineAppUpdateListener: 	2.2	2.2000000942498
 EaMain: LocalMachineAppUpdateListener: 	2.231	2.2310000956059
 EaMain: LocalMachineAppUpdateListener: 	2.247	2.2470000963658
 EaMain: LocalMachineAppUpdateListener: 	2.262	2.2620000969619
 EaMain: LocalMachineAppUpdateListener: 	2.278	2.2780000977218
 EaMain: LocalMachineAppUpdateListener: 	2.294	2.2940000984818
 EaMain: LocalMachineAppUpdateListener: 	2.309	2.3090000990778
 EaMain: LocalMachineAppUpdateListener: 	2.325	2.3250000998378
 EaMain: LocalMachineAppUpdateListener: 	2.34	2.3400001004338
 EaMain: LocalMachineAppUpdateListener: 	2.356	2.3560001011938
 EaMain: LocalMachineAppUpdateListener: 	2.372	2.3720001019537
 EaMain: LocalMachineAppUpdateListener: 	2.387	2.3870001025498
 EaMain: LocalMachineAppUpdateListener: 	2.403	2.4030001033098
 EaMain: LocalMachineAppUpdateListener: 	2.418	2.4180001039058
 EaMain: LocalMachineAppUpdateListener: 	2.434	2.4340001046658
 EaMain: LocalMachineAppUpdateListener: 	2.465	2.4650001060218
 EaMain: LocalMachineAppUpdateListener: 	2.481	2.4810001067817
 EaMain: LocalMachineAppUpdateListener: 	2.496	2.4960001073778
 EaMain: LocalMachineAppUpdateListener: 	2.512	2.5120001081377
 EaMain: LocalMachineAppUpdateListener: 	2.528	2.5280001088977
 EaMain: LocalMachineAppUpdateListener: 	2.543	2.5430001094937
...
 EaMain: LocalMachineAppUpdateListener: 	26.458	26.45800117217
 EaMain: LocalMachineAppUpdateListener: 	26.474	26.47400117293
 EaMain: LocalMachineAppUpdateListener: 	26.489	26.489001173526
 EaMain: LocalMachineAppUpdateListener: 	26.505	26.505001174286
 EaMain: LocalMachineAppUpdateListener: 	26.52	26.520001174882
 EaMain: LocalMachineAppUpdateListener: 	26.536	26.536001175642
 EaMain: LocalMachineAppUpdateListener: 	26.552	26.552001176402
 EaMain: LocalMachineAppUpdateListener: 	26.567	26.567001176998
 EaMain: LocalMachineAppUpdateListener: 	26.583	26.583001177758
 EaMain: LocalMachineAppUpdateListener: 	26.598	26.598001178354
 EaMain: LocalMachineAppUpdateListener: 	26.614	26.614001179114
 EaMain: LocalMachineAppUpdateListener: 	26.645	26.64500118047
You can see it's firing many times each second. Obviously, that's a lot of overhead that you don't want for very long, certainly not between turns. If you had some need for this over a long time (though I can't really imagine why you would) you could remove the listener and add it back later:
Spoiler :
Code:
> Events.LocalMachineAppUpdate.Remove(LocalMachineAppUpdateListener)
...
> Events.LocalMachineAppUpdate.Add(LocalMachineAppUpdateListener)
function: 53188A78
 EaMain: LocalMachineAppUpdateListener: 	54.866	26.66100118123
 EaMain: LocalMachineAppUpdateListener: 	54.881	26.676001181826
 EaMain: LocalMachineAppUpdateListener: 	54.897	26.692001182586
 EaMain: LocalMachineAppUpdateListener: 	54.913	26.708001183346
 EaMain: LocalMachineAppUpdateListener: 	54.928	26.723001183942
 EaMain: LocalMachineAppUpdateListener: 	54.944	26.739001184702
 EaMain: LocalMachineAppUpdateListener: 	54.959	26.754001185298
 EaMain: LocalMachineAppUpdateListener: 	54.991	26.786001186818
The first arg (tickCount) is more useful here. It keeps counting (in 1/1000's of a second) even when the listener is disconnected. Of course, if you are timing something over hours you should just check os.clock() each turn. But this Event lets you time some graphical or sound UI in seconds or fractions of a second if you need that.

[Edit: I had previously suggested that you use Events.LocalMachineAppUpdate.RemoveAll() to shut off tutorial overhead. whoward69 points out below that setting No Advice in options does shut down these checks, so no need to worry about that.]
 
If you haven't shut off the tutorial system somehow already (I'm not sure if setting no help in options counts here)

It does.

Menu -> Options -> Game Options -> Advisor Level = No Advice

will not enable the tutorial checks on start-up (unless you have selected a specific tutorial!)
 
Just to clarify for us 'slow' types :blush:, are you saying we are better off disabling this event via Events.LocalMachineAppUpdate.RemoveAll()....

.....and thus saving some CPU cycles?
 
If the user has set their advisor level to "No Advice" the event is never enabled, so doesn't chew up CPU time.

If the user hasn't set that level, then presumably they would like the advice, so it would be a bit "rude" to just disable it via the RemoveAll() method
 
Back
Top Bottom