Is there any way that you could FORCE apps to fail that don't call tick, so as to make it harder to forget?
Yes, we could have some flag which is set upon paint - and if it is still set on the next paint (or 5 paints) we could throw an exception.
The problem is that its just really bad practice to HAVE to do something all the time and then give you a function call to make sure its done.
Agreed. However you don't HAVE to call it (at least in theory) - granted windowed mode would be completely f*cked.
In theory I dislike having to call a method, just because the subsystem requires it - but we all have to do that in some way with most api's - take the win32 api, *all* apps have to have the following (in one way or another):
while (GetMessage(&msg, NULL, 0, 0))
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
I don't like that I need to do that - but such is life.
Since there are no methods that are guarenteed to be called at any time (except tick(), which we have defined as being a must call method), the only other way to implement it, is by spawning a thread to do this - which is just as evil.
So we're left with the following solutions:
1 - mandetory tick() = allows the developer to control when the subsystem should be run.
2 - no tick - the developer does zilch, but has no control over when the subsystem is run.
Of the two, I think the former is the least evil.
That said, I am very open for suggestions...