tag:blogger.com,1999:blog-28944492047822935452024-02-07T18:51:48.318-08:00Jakimushka's summer of codejakimushkahttp://www.blogger.com/profile/04190023392944923689noreply@blogger.comBlogger19125tag:blogger.com,1999:blog-2894449204782293545.post-80445585505102124922012-08-06T09:11:00.003-07:002012-08-06T12:21:04.225-07:00Little summary<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="border-collapse: separate; border-spacing: 0px; text-align: -webkit-auto;"><span style="font-family: Arial, Helvetica, sans-serif;">Now, after two months of work, it is time to show progress and describe the architecture of events recorder. This is a class diagramm, which can give some understanding of how does events recorder relates with other classes of scummvm.</span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIpJqzf8OUcB1dY0j71w73xXtBQcz80ovVRrC2uaEfIL5QfWAflRaAMJJSh5v9PNlA57g-oLqaXRPK70olwHeVpSR50iDQZ89Vqq_7Lgdvz2uI2yj2cv9GN3BEMGK9K02d91CKAgpCEN8/s1600/Main.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="377" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIpJqzf8OUcB1dY0j71w73xXtBQcz80ovVRrC2uaEfIL5QfWAflRaAMJJSh5v9PNlA57g-oLqaXRPK70olwHeVpSR50iDQZ89Vqq_7Lgdvz2uI2yj2cv9GN3BEMGK9K02d91CKAgpCEN8/s400/Main.jpg" width="400" /></a></div>
<br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<br />
<div>
<span style="border-collapse: separate; border-spacing: 0px; text-align: -webkit-auto;"><span style="font-family: Arial, Helvetica, sans-serif;">Lets describe it particulary by means of subsistems, which it records. </span></span></div>
<div>
<span style="border-collapse: separate; border-spacing: 0px; text-align: -webkit-auto;"><span style="font-family: Arial, Helvetica, sans-serif;"><b>User Input: </b></span></span><span style="font-family: Arial, Helvetica, sans-serif;">to record events from mouse and keyboard, eventRecorder implements DefaultEventMapper. During the initialisation, it registers itself as a mapper. So, every event occurring in system, is catched with EventRecorder's pollEvent function. This function checks state of the recorder and calls PlaybackFile's writeEvent() function to write this event in temporary memory buffer. If the buffer is full, playback file dumps it to file and takes screenshot, calculates checksumm and dumps it to the file too.</span></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><img src="file:///C:/Users/Admin/AppData/Local/Temp/enhtmlclip/recordEventDiagram.jpg" style="cursor: default; vertical-align: middle;" /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9h-4ub1jFtpA5_tpjHM9oysnH4kktOghiUJLiiODzjxkCByKHwroImNIFDFvFOY5V0pWBmSSHiDB_WEmY0z0Acb3ZpWPzqCcu7jrhieCy27yxGcTr7YxufOhlLZEoHqou-xNhv2YKlwY/s1600/playbacksequence.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9h-4ub1jFtpA5_tpjHM9oysnH4kktOghiUJLiiODzjxkCByKHwroImNIFDFvFOY5V0pWBmSSHiDB_WEmY0z0Acb3ZpWPzqCcu7jrhieCy27yxGcTr7YxufOhlLZEoHqou-xNhv2YKlwY/s400/playbacksequence.jpg" width="400" /></a></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;">To playback events, recorder does everything in reverse order. It implements EventSource and reguster in EventDispatcher as the source of events. Every time when game engine calls pollEvent function, EventDispatcher calls pollEvent function of EventRecorder. This function checks if the EventRecorder in playback mode and calls getNextEvent function of PlaybackFile class. This function read event from events memory buffer, and if buffer is empty, it reads next events chunk from the file. Also it reads screenshot from the file and compare it with current screen image. If there are any differences, it shows warning message. </span></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><img src="file:///C:/Users/Admin/AppData/Local/Temp/enhtmlclip/playbacksequence.jpg" style="cursor: default; vertical-align: middle;" /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtXqcMhqRpTiuH7VPnkhLbMf80HU5tzOpNryeroBBsvmKcUFCywvZjDKs4mcXuq7Q7nlp1l6Ya1VzbX2uTgtYg1w1y17_UiSoCZPf631cwo6dnxTmRmT33ST2Y6jitCgWorz5_Gt9L0FI/s1600/recordEventDiagram.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="263" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtXqcMhqRpTiuH7VPnkhLbMf80HU5tzOpNryeroBBsvmKcUFCywvZjDKs4mcXuq7Q7nlp1l6Ya1VzbX2uTgtYg1w1y17_UiSoCZPf631cwo6dnxTmRmT33ST2Y6jitCgWorz5_Gt9L0FI/s400/recordEventDiagram.jpg" width="400" /></a></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><b>System time: </b> To correct playback process we need to write and to play system time when a game engines queried for it. To do this, we inserted processMillis call to OSystem_SDL::getMillis function. This function in recording mode writes system time to the file and in playback mode reads time from the file and give it to a game. The problem is that this meathod registers time queries not only from a game engine, but from GUI and TimerManager. It ruins playback, cause gui and timer manager not synchronised with engine logic. To solve this problem, two improvements to the code were made. The first one - parameter which disallow to register this query was added to getMillis function. By default, this parameter sets to false. It sets to true in calls from GUI. The second one - call timers update routine from EventRecorder/ became possible.</span></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><b>Audio:</b> As audio fragments are played in other thread and controlled only with SDL subsystem, there could be some problems with audio flow synchronization and user events. For instance, in Kyrandia, when you click anywhere while somebody's talking, sound interrupts and mouse event doesn't pass to the game. In the same situation, durring playback, sound may be played a little bit faster. And mouse's event will be passed to the game and it's possible that the whole gameplay will chrash. To avoid this unpleasant situation, new class had been added: NullSdlMixerManager. It updates with EventsRecorder and "output" sound to nowhere. And we may always know that during playback sound ends the same time it ends during recording.</span></div>
<div>
<span style="color: #010001; font-family: Arial, Helvetica, sans-serif;"><span style="border-collapse: separate; border-spacing: 0px; color: black; text-align: -webkit-auto;"><b>Random numbers: </b></span></span><span style="font-family: Arial, Helvetica, sans-serif;">as an engine use pseudo random sequences, and we can prognose the whole sequence by initial value of random numbers generator, it's very easy to record and playback random events. It's necessary only to hold this initial value and restore it. Every time RandomSource is created, it calls getRandomSeed() function of EventRecorder. If the recorder not in recording or playback mode, this function works just as bypass.In playback mode it changes initial value to recorded one.</span></div>
</div>jakimushkahttp://www.blogger.com/profile/04190023392944923689noreply@blogger.com0tag:blogger.com,1999:blog-2894449204782293545.post-67733422817045236562012-07-27T14:19:00.003-07:002012-07-27T14:19:28.904-07:00What has been done on this week<div dir="ltr" style="text-align: left;" trbidi="on">
Hi. This week I've add new features to events recorder. Now it can replay game without display it on screen: it initialize memory buffer instead of initializing of SDL context. Next feature: user can switch recording mode to normal game play. I. e.while user is recording his gameplay he may interrupt it and continue playig in normal mode. You may see on this diagram how it works:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixWxhe23NCWcK0tnZMCy9NTzeX5MVTfp5CX-29Eh-1ihuSyBJp9erwd4nXDfzL9Z-g18LQJ089WRW0aFvEluI-PvLQNEVdweFt-fq13b2SHDXIkBQ44-OWBTpUnUSHVh2MfqbZFlUoNaA/s1600/SequenceDiagram1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="304" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixWxhe23NCWcK0tnZMCy9NTzeX5MVTfp5CX-29Eh-1ihuSyBJp9erwd4nXDfzL9Z-g18LQJ089WRW0aFvEluI-PvLQNEVdweFt-fq13b2SHDXIkBQ44-OWBTpUnUSHVh2MfqbZFlUoNaA/s320/SequenceDiagram1.jpg" width="320" /></a></div>
<br /></div>jakimushkahttp://www.blogger.com/profile/04190023392944923689noreply@blogger.com0tag:blogger.com,1999:blog-2894449204782293545.post-9983363898182978352012-07-20T13:46:00.000-07:002012-07-20T13:46:37.847-07:00Finished save files embedding<div dir="ltr" style="text-align: left;" trbidi="on">
On this week I've finished savefiles embedding. Following the fuzzie's idea, I created class which inherits DefaultSaveFileManager and implements listFiles and openForLoading functions. During the recording or playback it calls functions of events recorder. This functions read hold or read save files from recording file.<br />
<br />
Also, I've begin work on onsreen recording dialog. This dialog will show during the recording and playback and allow to control the recording process. You may see very first version of this dialog on following video:<br />
<a href="http://www.youtube.com/watch?v=EylL9saw8lQ">http://www.youtube.com/watch?v=EylL9saw8lQ</a> </div>jakimushkahttp://www.blogger.com/profile/04190023392944923689noreply@blogger.com0tag:blogger.com,1999:blog-2894449204782293545.post-82340277947857444532012-07-13T15:24:00.002-07:002012-07-13T15:24:12.891-07:00Refactoring week<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
So, I'm still working on integration of save files into recording file. On last week I did alot of things to this. After code studying, I saw that every engine supporting states loading, have some kind of fucntion which generates file name by slot's number. Some engines have this function as is a class static method, others like public method, few engines have this function inlined to code of saves-related functions. In other words, we have same behavior and different interface. So after discussion with mentor we decided to unificete interface of save files name generation and make all engines compatible with this interface. Then we produced some requirements to name generation function:<br />
<br />
1) It should be accessible without class instancing. Because MetaEngine use it for removeSaveState and querySaveMetaInfo functions.<br />
2) It should be accessible inside of class methods (obviously)<br />
3) It should be accessible outside of class using the pointer of abstract class Engine. It to make possible to use it from eventRecorder<br />
4) Logic of name generation should be in one place. Because it's possible to get error relate to duplicated code. For instance, in current version of queen engine, function QueenEngine::makeGameStateName uses constant string "queen" and function QueenMetaEngine::removeSaveState uses variable target for name generation. This may cause a problems.<br />
5) Preferably to have a fucntion which check number of saving's slot is special (for ecample used for autosave or recording file) and generate name without depending to engine implementation<br />
<br />
As most engines generate file name by formula fileName = preffix + "." + pattern, where preffix is a name of engine and pattern is function from slot number (for example "%03d"). Firstly I thought that it would be a nice idea to make a universal method in Engine class. Parameters of this function would be preffix (usualy target name) and pattern to generate extension of save file. This method could look like Engine::getSaveName(prefix, pattern, slot). But some engine need different algorithm of names generation and each time we call this method we should pass to many params to it, which is not very comfortable and can be cause of errors.<br />
<br />
Then I decided that it should be good to make and AbstractNameGenerator class with abstract generateSaveName method, and inherited it for each engine. You can see it on diagram:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://habrastorage.org/storage2/57e/398/6f6/57e3986f60ff045a9b88e4d7251b9c56.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="156" src="http://habrastorage.org/storage2/57e/398/6f6/57e3986f60ff045a9b88e4d7251b9c56.jpg" width="400" /></a></div>
<br />
I would be consistent to all requirements, but create class without state which contains only one method is definitely overengineerng.<br />
So, we decided to make static method and wrap it by virtual function in each engine. And in every virtual function call checking for special slot.<br />
<br />
And then fuzzie suggested to wrap the SaveFileManager's openForLoading function, for the event recorder. And this idea looks very attractive, cause at first, it can be realized without changing of existing codem and at second it corresponds to the logic of other eventrecorder's systems. So at the moment I'm working on implementation this idea<br />
</div>jakimushkahttp://www.blogger.com/profile/04190023392944923689noreply@blogger.com0tag:blogger.com,1999:blog-2894449204782293545.post-30121149776664481112012-07-06T14:45:00.000-07:002012-07-06T14:45:15.119-07:00Savefiles embedding<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<br />
It's needed to make a recording self-sufficient and independent from save files. At the moment, user should make following sequence of actions to playback loaded game:<br />
1) choose game<br />
2) select playback record<br />
3) press "Playback" button<br />
4) in pop up dialog box select is it need to load from savegame.<br />
5) if loading from savegame choosed, show load game dialog<br />
<br />
After I implement this feature, 4th and 5th steps will be removed. Also, will be sufficient only recording file to playback the gameplay. Will not be necessary to share save file.<br />
<br />
At first glance, it's easy to implement this feature: just current save file during the recording and give it to<br />
engine during the playback. But it's not so easy to do, using the current engine API.<br />
<br />
First of all, every function related to saving and loading works only with slot numbers and save files name generation is different for each engine, so our function can't get filename of current save. I've tried to solve this by adding the virtual funtion getSaveFileName to engine class. Anyway, this function is in every engine in different forms: somewhere it part of loading function, somewhere it's separate function, but it exists in any engine. So, i think it's a good idea to make an unificated interface for it.<br />
<br />
<br />
Next issue is to load savefile from recording. As I said above, we can load savefiles only by their slot number. There was to ways to solve it: write procedure which loads game state from given stream or create some virtual slot used only for recordings. First way requires to large code rewriting, so we chosen second.<br />
<div>
I've almost implemented it, and now I'm doing testing and fixing a bugs. Hope to show a demo soon.</div>
<br />
<br />
</div>jakimushkahttp://www.blogger.com/profile/04190023392944923689noreply@blogger.com0tag:blogger.com,1999:blog-2894449204782293545.post-7264304422679336432012-06-29T16:09:00.001-07:002012-06-29T16:09:39.707-07:00Nothing special<div dir="ltr" style="text-align: left;" trbidi="on">
This week I've just did little code refactoring and moved all playback file related issues to separate class. Also, following my mentor's advice, I implemented cache for recording dialog. Now It reads every file header before adds it to list, store file's header to array and every time when user update selected record, it doesn't need to reopen the file.<br />
What I want to implement now it's to keep the game save in playback file, i.e. if we load file before recording, it shouldn't ask what record you want to load. It should load it automatically. I'm not sure is it possible, but it may be great feature.</div>jakimushkahttp://www.blogger.com/profile/04190023392944923689noreply@blogger.com1tag:blogger.com,1999:blog-2894449204782293545.post-4741892092828086042012-06-26T06:59:00.002-07:002012-06-26T06:59:38.697-07:00GUI feautures of event recorder<div dir="ltr" style="text-align: left;" trbidi="on">
Last week I've added opportunity to view <span style="background-color: white;">playback file </span><span style="background-color: white;">screenshots directly from GUI. How it works you may see on the following video:</span><br />
<a href="http://www.youtube.com/watch?v=trqPXKsAaCs" style="background-color: white;">http://www.youtube.com/watch?v=trqPXKsAaCs</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/StG_LeoUGeE/0.jpg"><param name="movie" value="http://www.youtube.com/v/StG_LeoUGeE?version=3&f=user_uploads&c=google-webdrive-0&app=youtube_gdata" />
<param name="bgcolor" value="#FFFFFF" />
<param name="allowFullScreen" value="true" />
<embed width="320" height="266" src="http://www.youtube.com/v/StG_LeoUGeE?version=3&f=user_uploads&c=google-webdrive-0&app=youtube_gdata" type="application/x-shockwave-flash" allowfullscreen="true"></embed></object></div>
<br />
<br />
Also I've added dialog window to edit info about author, visible name and description of playback file.<br />
<a href="http://www.youtube.com/watch?v=trqPXKsAaCs">http://www.youtube.com/watch?v=trqPXKsAaCs</a>
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/trqPXKsAaCs?feature=player_embedded' frameborder='0'></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
During the work by GUI we've desided to move all operation with file to separate class. It should provide high flexibility and make possible to simple access to playback file. So I've added class PlaybackFile which works with file and provide higher level of abstraction.</div>
<br /></div>jakimushkahttp://www.blogger.com/profile/04190023392944923689noreply@blogger.com0tag:blogger.com,1999:blog-2894449204782293545.post-84807772407815505622012-06-16T10:12:00.000-07:002012-06-16T11:52:38.418-07:00Recorder GUI<div dir="ltr" style="text-align: left;" trbidi="on">
It's time to make gameplay recording more user friendly, cause rewrite config time every time when we want to record or to playback isn't very fun. So we've begun work on GUI for recording and replay. First of all, I once again changed initialization routine of recorder, totally removed it from engines and call it at same time when the user choose game, so it became even better and transparent.<br />
Then I've change naming of records. Now name for recordfile generates as <game>.rxx, where xx is number of recordfile. For instance: kyra1-cd.r11<br />
Use cases for choosing records are very simmilar to loading from savefiles. So recorder dialog going to be very simmilar to load savefiles dialog:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyCpAhuqOVC7sf4YEPvlux5gMhc3gsOnX88AG3zxFHnHJbYhyH9S1ow01CijZg7gUvvjBGgLdMCOGeY3pD1LYNIXFsCuMeArsg1nt7hHwUhN5PCrE1U04q6eK278AAKF_fa1aYROeQ_0E/s1600/recordergui.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyCpAhuqOVC7sf4YEPvlux5gMhc3gsOnX88AG3zxFHnHJbYhyH9S1ow01CijZg7gUvvjBGgLdMCOGeY3pD1LYNIXFsCuMeArsg1nt7hHwUhN5PCrE1U04q6eK278AAKF_fa1aYROeQ_0E/s400/recordergui.png" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
At the moment, it have minimal functionality: it can record gameplay to new file, playback choosen record and delete existing records. Next week I want to add few more interesting features :)</div>jakimushkahttp://www.blogger.com/profile/04190023392944923689noreply@blogger.com1tag:blogger.com,1999:blog-2894449204782293545.post-16358803702627754482012-06-11T00:29:00.001-07:002012-06-11T00:29:45.659-07:00Almost works<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<span style="font-family: inherit;"><span style="border-collapse: separate; border-spacing: 0px; text-align: -webkit-auto;">This week I made easy integration of recorder to engine. Now, engines inherited of AdvancedMetaEngine initialize registrator automaticaly. Few other, inherited from MetaEngine (SKY, SCUMM, SWORD1, SWORD2, QUEEN) can be initialized by adding only two strings: </span></span><br />
<span style="font-family: inherit;"><span style="border-collapse: separate; border-spacing: 0px; text-align: -webkit-auto;"><br /></span><span style="border-collapse: separate; border-spacing: 0px; text-align: -webkit-auto;">#include "common/eventrecorder.h" </span><span style="border-collapse: separate; border-spacing: 0px; text-align: -webkit-auto;">g_eventRec.init(gameName());</span></span><br />
<span style="font-family: inherit;"><span style="border-collapse: separate; border-spacing: 0px; text-align: -webkit-auto;"><br /></span>I've tried registrator on number of games and at first view it works well. So, seems like it almost works and will ready to testing soon.</span><br />
</div>jakimushkahttp://www.blogger.com/profile/04190023392944923689noreply@blogger.com1tag:blogger.com,1999:blog-2894449204782293545.post-67770655540206015882012-06-05T02:55:00.000-07:002012-06-05T05:22:00.792-07:00Making things better<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: left;">
</div>
<span style="font-family: inherit;"><span style="border-collapse: separate; border-spacing: 0px; text-align: -webkit-auto;">On this week, I fixed architecture mistakes in event registrator. When I've enabled registering of all time events (when somebody whant to know about system ticks) there strange mistakes occurred and it didn't work at all. So, I've enabled registering time events only in some places of engine. But even in comments to my gsoc proposal, LordHoto noticed that need something to do with it, because when different parts of VM see different time, this will cause problems. In addition, direct replacement of g_system->getMillis() by the g_eventRec.getMillis() is bad, untransparent, unflexible, etc. At last, after one of commits, my mentor _sev proposed me to liquidate this dirty hack, by getting rid of all g_eventRec calls and doing registration of all g_system->getMillis() calls.</span><br />First problem we have found - events might be recorded before full initialization of registrator. It was fixed by simple flag adding which shows that the registrator completely initialized.<br />After I solved this problem, I tried to find another bugs during at about two days. Something went wrong, but I couldn't find what exactly. _sev very helped me when suggested to use backtrace macros which will show who and when call getMillis fucntion. I've begun to write this data to log and analyze it. This helped me to find next two problems:<br />DefaultEventManager::pollEvent called more often durring the playback. And also it calls if user doing any action (moves mouse, presses keyboard keys). I solve this programm by adding a stop and start registrating feature to registrator class. Now it just skips time messages from pollEvent function.<br />Last problem was hard to find, but very easy to solve. To describe a problem I should tell how we've developed wrapper for audio registering.<br />Original audio subsystem can be represented by this sequence diagramm:</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis5FsBP48VnDCpRjRm16S6X8NORgEWuWl5ZjuU1aoj3PUUnVV_HKfcJl-qh1eVWNfIxkrNanJnVfLjkeZmF6f4nnLJeEtw3ThsAgzJkIBpbgF4UCtd62PKYuGmJ-KNI61pGuMC_OXWLU4/s1600/SequenceDiagram1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="327" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis5FsBP48VnDCpRjRm16S6X8NORgEWuWl5ZjuU1aoj3PUUnVV_HKfcJl-qh1eVWNfIxkrNanJnVfLjkeZmF6f4nnLJeEtw3ThsAgzJkIBpbgF4UCtd62PKYuGmJ-KNI61pGuMC_OXWLU4/s640/SequenceDiagram1.jpg" width="640" /></a></div>
<br />
<div style="text-align: -webkit-auto;">
<span style="font-family: inherit; text-align: left;">I. e, SDL audio subsystem give mixer manager to know about it's readiness to play next chunk of sound and give buffer which must be filled by sound data. Manager give this event to platform-independent mixer which must to fill this buffer. Mixer check is there any free chanal and give this buffer to it. Chanal fill the buffer by sound data and ask the current time from system. System ask for time from events registrator.</span></div>
<br />
<span style="font-family: inherit;">This scheme worked perfectly, but had a little problem: it was very hard to synchronize sound with logic. Wasn't possible to determine how often will be calback called and what will be buffer size. _sev proposed to get rid of the dependence from <span style="border-collapse: separate; border-spacing: 0px; text-align: -webkit-auto;">SDLInternals and replace </span><span style="border-collapse: separate; border-spacing: 0px; text-align: -webkit-auto;">SdlMixerManager to own wrapper. Obviously, there was needed to use some external events source which will set how frequently mixer's callback will called. Also, this source must have possibility of sinchronization with registrator. We decided to use processMillis for this purposes. Regarding to this idea, sequence acquired the following form:</span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWYF4X701yHNhQjjMLoV9Zrk5VHWk37sthRusOfcJH8QuMaKGKncELijY2zziwnCvOYGGi5-99EPzBWg-YGp7HuFkLxoXZxzkOlISkOVdVLvHe5A-kvAgRzcV49J9LKQn7AJ_mWboTTDw/s1600/SequenceDiagram2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="278" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWYF4X701yHNhQjjMLoV9Zrk5VHWk37sthRusOfcJH8QuMaKGKncELijY2zziwnCvOYGGi5-99EPzBWg-YGp7HuFkLxoXZxzkOlISkOVdVLvHe5A-kvAgRzcV49J9LKQn7AJ_mWboTTDw/s640/SequenceDiagram2.jpg" width="640" /></a></div>
<span style="font-family: inherit;"><span style="border-collapse: separate; border-spacing: 0px; text-align: -webkit-auto;"><br /></span><span style="border-collapse: separate; border-spacing: 0px; text-align: -webkit-auto;"><span style="border-collapse: separate; border-spacing: 0px;"><img style="cursor: default; vertical-align: middle;" /></span></span><span style="border-collapse: separate; border-spacing: 0px; text-align: -webkit-auto;">
Very easy to see that this sequence resulted in an infinite loop and stack overflow. We decied to make a bypass to disable events recording while mixer's callback executing </span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjl-Hrcoyb4ygXAU1ql4jlF33AkSEgnQls3XYYKZfARsXjdQqtl9R8dbwZ5i35-WnQNp2zV5J6f106RACgKklAjmZ5opZErRnZpmXv2QC-7IP_asbKWBHMI-UBy7xxBcRDp0jzSShFhnHE/s1600/bypass_.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjl-Hrcoyb4ygXAU1ql4jlF33AkSEgnQls3XYYKZfARsXjdQqtl9R8dbwZ5i35-WnQNp2zV5J6f106RACgKklAjmZ5opZErRnZpmXv2QC-7IP_asbKWBHMI-UBy7xxBcRDp0jzSShFhnHE/s1600/bypass_.png" /></a></div>
<span style="font-family: inherit;"><span style="border-collapse: separate; border-spacing: 0px; text-align: -webkit-auto;"><br /></span></span><br />
<span style="font-family: inherit;"><span style="border-collapse: separate; border-spacing: 0px; text-align: -webkit-auto;"><img style="cursor: default; vertical-align: middle;" /></span><span style="border-collapse: separate; border-spacing: 0px; text-align: -webkit-auto;"><br /></span>Now, in case of necessary, registrator taken out from sequence and system time became the result of function. It saved from stack overflow and worked quite well. When I began to register all calls of getMillis, problem has arisen where I did not expect it. There is function Chanal::getElapsedTime, which returns the time elapsed from begining of sound playing. It getting first time period in Chanal::mix function (during it bypass works and time is real from system). Another time it gets from events recorder. So difference between them is undefined and different for each replay. After problem was found it was very easy to fix it and make result of getElapsedTime function positive and predictable.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgugGlSqd83gIH00kaNdPgtY9kNQUVPDboMQS_Rhaaf9lVDKKnD-29t7ahtQbsEzhmmR5Dj0T3RmdfUpVksioHX82OpY6ntw7R6-5rlQhyphenhyphenrFf1z3ylKz1cFpI9cSMPjUn_vo-IxkJ7hLZQ/s1600/bypass_+(3).png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgugGlSqd83gIH00kaNdPgtY9kNQUVPDboMQS_Rhaaf9lVDKKnD-29t7ahtQbsEzhmmR5Dj0T3RmdfUpVksioHX82OpY6ntw7R6-5rlQhyphenhyphenrFf1z3ylKz1cFpI9cSMPjUn_vo-IxkJ7hLZQ/s1600/bypass_+(3).png" /></a></div>
<span style="font-family: inherit;"><br /></span><br />
<div>
<img style="cursor: default; vertical-align: middle;" /></div>
<div>
<br /></div>
</div>jakimushkahttp://www.blogger.com/profile/04190023392944923689noreply@blogger.com0tag:blogger.com,1999:blog-2894449204782293545.post-41423473170782254992012-05-25T12:26:00.001-07:002012-05-25T12:26:52.163-07:00What is the use of a book without pictures?<div dir="ltr" style="text-align: left;" trbidi="on">
Since the last post I've worked on the screenshots feature. There was few requirements:<br />
1) During the recording process screenshots should record into the same file as other evetns<br />
2) It should be possible to setup period of screenshot recording<br />
3) During the playback process screenshots should read from playback file and compare with current game screen. Best of all it would do using MD5 hash, so it must be recorded with image data.<br />
<br />
<a name='more'></a><br />
Recording of screenshots I've implemented quite fast using the existing code of thumbnails for save files. It has some restrictions like saving screenshots only in 5-6-5 bmp format, but I'm sure it's quite enought for most emulated games.<br />
I've decided to write it with other events in RCDS chunk. So, during the playback it will be simple to react on screenshot and determine time when it need be compared it with the current screen. Then I wrote a simple viewer for screenshots. Result of my actions you may see on the following video:<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/qrfqzUgpfLs?feature=player_embedded' frameborder='0'></iframe></div>
While I was working on this viewer, I understood that representing screenshots as events is not very good for navigating through the file. And then decided to change conceptions and hold screenshots and arrays of events in separate chunks. It gives viewer ability to navigate very fast to any place in playback file.<br />
Then I wrote the playback part. There was nothing interesting to told about. Just opposite actions: read images instead of write it. But while I was testing playback I got an error with cache (screenshots writed not in the same time they was made, and I got random waring of screenshots difference during the playback). To find this bug I begin to save screenshots in playback time and extended the vewer. In new version it shows difference between recorded and played back screenshots. You may see it in this video.<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/PbjE5FbD9Tg?feature=player_embedded' frameborder='0'></iframe></div>
Principle of it's work is very simple: it compare each pixel on 2 pictures and if they are equal, copy them to the result pixel, if they aren't equal fill result pixel by white color.<br />
After I've found that error, I add comparing by MD5 hash (thanks to previous developers all routins for this was implemented before).<br />
<br />
BONUS: just for fun and to improve my web programming skills, i've wrote simple viewer of playback files in javascript using the jDataView class.But i must warn you than I'm not very good in javascript, so it may contain bugs memory leaks, not work in your browser an so on. Also it loads 2Mb replay file. If you still want to try it in browser, you may do it there <a href="http://dl.dropbox.com/u/11107450/Playback.htm">http://dl.dropbox.com/u/11107450/Playback.htm</a>. If not, I've written a little video for you:<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/LirPQ16QchE?feature=player_embedded' frameborder='0'></iframe></div>
<br />
<br /></div>jakimushkahttp://www.blogger.com/profile/04190023392944923689noreply@blogger.com0tag:blogger.com,1999:blog-2894449204782293545.post-4828322170451045592012-05-16T06:10:00.000-07:002012-05-16T07:45:08.685-07:00New recording format<div dir="ltr" style="text-align: left;" trbidi="on">
Last 2 weeks I've worked on developing of format for holding recorded gameplay data. Why this needed and how does it work you may read under the cut.<br />
<br />
<a name='more'></a><br />
In first versions I wrote without formatting and then just read it in same order to the written. It worked, but wasn't flexible and hadn't any abilities to provide backward compatiblity in future. And there was a problem with navigation between file sections: for example, file has a header section, a section with info about autor and a section with gameplay data.<br />
So, it was necessary to find the way to structure the data. I thought that the most appropriate format for current purposes is the <a href="http://en.wikipedia.org/wiki/Resource_Interchange_File_Format" target="_blank">RIFF</a>, i.e. use containers with fields of unique identifier and size for every file section. It give us opportunity to find identify any section in file. Also we can easily skip any unsupported section.<br />
<br />
Now file has following sections:<br />
<br />
PBCK //format id, length = file length - 8<br />
VERS //version of recorder<br />
HEAD //Header, contains unnecessary info about author<br />
HAUT //Author's name<br />
HCMT //Comments<br />
HASH //table of MD5 hash of game files<br />
HRCD //record for one file<br />
HNAM //name<br />
HMD5 //MD5 hash <br />
RNDM //Seeds for random number generator <br />
SETT //Game's settings<br />
SKEY //Name of setting<br />
SVAL //Value of setting<br />
RCDS //Gameplay data<br />
RCDS section always has 0 in size field, because isn't possible to calculate it during the recording.<br />
<br />
To process this file, I wrote state machine which may be illustrated by following diagramm:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiy6Coc5RNYBwlfckIA162ByyX-mwbqjn3d2-Fv95Q-oqTAscYciB6K5UHYjcErAQmD1ls5UdTT3o40eSlQEvLYQcBrI-jfs9EMKwje6u7XwHiem6uIIIdEO9xSL9bMlr7PlP_aQqm-DlI/s1600/schart.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="353" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiy6Coc5RNYBwlfckIA162ByyX-mwbqjn3d2-Fv95Q-oqTAscYciB6K5UHYjcErAQmD1ls5UdTT3o40eSlQEvLYQcBrI-jfs9EMKwje6u7XwHiem6uIIIdEO9xSL9bMlr7PlP_aQqm-DlI/s640/schart.png" width="640" /></a></div>
<br />
<br />
<br />
<br /></div>jakimushkahttp://www.blogger.com/profile/04190023392944923689noreply@blogger.com0tag:blogger.com,1999:blog-2894449204782293545.post-19364819647972613112012-05-01T12:40:00.000-07:002012-05-01T13:15:53.831-07:00My first success<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
Hi. Last week was pretty fruitful. I got to work EventRecorder on KYRA engine. Let's describe it in more details.</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<a name='more'></a><br /><br />
<div class="separator" style="clear: both; text-align: left;">
In previous post I wrote that problem in synchronizing of game and sound threads. So, I decided to solve this problem by making fake sound system which will work in game's thread. After some code researching I've found that every platform have a wrapper of audio mixer. This wrapper initializes mixer and periodically calls mixer's callback to fill audio buffer. At this moment it works only on sdl platform, so I decided to implement fake wrapper for this platfrorm. Unlike of current wrapper it's will controlled by EventRecorder and send audiodata to file instead of audio device. So, I've created class NullSdlMixerManager and inherited it from SdlMixerManager. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Also I've add recording of random numbers. In current version of code, it reads and writes every call of getRandomNumber function. Since random number generator is pseudorandom and generate sequence depending of seed, I'm going to record only random seed assignment. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
All this actions made a miracle! Now recorder works on KYRA engine as well as on SKY engine. On this video you can see recorded and played back first stage of the passage of Lengend of Kyrandia </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/Mu5gvs1rcIk?feature=player_embedded' frameborder='0'></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br /></div>jakimushkahttp://www.blogger.com/profile/04190023392944923689noreply@blogger.com0tag:blogger.com,1999:blog-2894449204782293545.post-87476778527955097752012-04-24T04:09:00.000-07:002012-04-24T04:09:20.978-07:00It has begun<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<br />
Hi to all. It's not my first record in this blog, but I had no chance to introduce myself in previous posts. In this post I'm going to fix this unfortunate mistake.<br />
<br />
My name's Danil. I'm ukrainian student and am studying computer science in university. You might have guessed on the basis of my project's choice, but just in case I will specify that I really love computer games.<br />
<br />
Now about news. Of course, main news is MY GSOC PROPOSAL HAS BEEN ACCEPTED!!! What does it mean in practical plane? In practical plane it mean that during the next 4 month you'll read in this blog how I'm writing "<a href="https://docs.google.com/document/d/1Di9eoUoy_WnSO8BV6Gbc6eEdUKjMW4Q3lGl8K5CeBkQ/edit" target="_blank">Testing framework for ScummVM</a>". I promise that will do my best to make this blog not very boring to read.<br />
<div>
<br /></div>
<div>
<div>
What can I say else? Fortunatelly, in this year Ukraine choosed for EURO2012 soccer champ. Our goverment pay a big attention to this event, therefore my university's exams begins and ends early, so I'm almost pass them and ready to work right now. </div>
<div>
<br /></div>
<div>
Maybe it's all that I can say in introduction. So see you later in next post after I do some work and be able describe any interesting technical details</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<br />
</div>jakimushkahttp://www.blogger.com/profile/04190023392944923689noreply@blogger.com0tag:blogger.com,1999:blog-2894449204782293545.post-55676706113874446832012-04-19T13:52:00.001-07:002012-04-19T13:54:45.030-07:00Progress at 19'th of April<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div style="text-align: justify;">
<span style="font-size: large;"> </span>I tried to make something workable in time, but it was much harder than expected. So I'll show what I had done for this moment. Sources you can see at this <a href="https://github.com/jakimushka/scummvm/tree/sky-engine-eventsrecorder" target="_blank">LINK</a>. There I'll tell how and what I did to realize this idea.<br />
<br /></div>
<div style="text-align: justify;">
I've read and criticism of my idea to link events with engine's loop. I've desided that it's realy hard in realization and impossible to make universal for all existing engines. Then I've desided to write every "external" event (with some exceptions), namely mouse's moves and clicks, keyboard's events, calling of delay and getmillis functions. <br />
<br /></div>
<div style="text-align: justify;">
I've quite quickly writtem it, fortunately most of all this was already in existing code. Then I've tested it on SKY engine and everything worked perfect.<br />
<br /></div>
<div style="text-align: justify;">
I needed to consolidate success and I've tested gameplay recording on KYRA engine. And there began problems. Events have become different from record very fast and gameplay absolutely different with from recorded. I've begun to find out what's wrong. First of all, I've noticed, then getMillisec and delayMillisec functions called not only by engine. ScummVM (GUI system and something also) call them too. It's giving undefined behavior, cause we don't know what state have scummvm when we began record or replay. So, I've removed global hook of these functions and created method getMillis for EventRecorder class. Engine must call this method if want's to record time event. I've changed all callings of g_system->getMillis to g_eventRec.getMillis. It's become better.<br />
<br /></div>
<div style="text-align: justify;">
Then I've noticed dependence of gameplay from audio playback. Following the tested game logic, if user presses mouse button during the speach, speach finishes and mouse event doesn't passes to game. As sound is playing in separate thread - audio playback speed doesn't corresponds to gameplay speed. So I've thought how it's possible to record and playback of audio events and synchronize them with gameplay thread. During the code studying, I've noticed then substitution of arguments of mixCallback function in MixerImpl class affects to audio playback speed. I've inserted my hook code into this function. So audio event's syncronizing with EventRecorder's timer and occurs in same moments of time.<br />
<br /></div>
<div style="text-align: justify;">
Unfortunatelly, this didn't solve the problem of incorrect gameplay playback. So, for make debugging easier, I've visualised it. I've inserted debug output to log for every place where event occurs. Now when I'm recording gameplay, I'm saving log file and comparing it with playback's log file using the diff utility. It allows to easyly detects places where playback events became different from recorded events.<br />
<br /></div>
<div style="text-align: justify;">
Using this method I've found that in sound_midi.cpp function g_eventRect.getMillis called by timer handler, which is absolutely independend from engine and is a part of scummvm. It called randomly and make errors during the playback. For this time I've made calling of system getMillis and discrepancy has gone.<br />
<br /></div>
<div style="text-align: justify;">
Then I've seen that played back gameplay is absolutely identically to the recorded before the sound begin plays. Since audio playback events begin to diverge. It happens becouse game logic and audio playback executing in different threads. It can be executed random number of gamecode while sound is playing. It makes undefined behavior. I've tryed to syncronize engine thread with audio thread. Now engine wait for finishing of audio playing and only then continues work.<br />
<br />
Now I have problem related to wrong returned time of samples was played by certain chanal. I tryed to solve it in current commit, but think I'll havn't time before choosing of participants. And I had to make this post to show current progress of work.</div>
</div>jakimushkahttp://www.blogger.com/profile/04190023392944923689noreply@blogger.com0tag:blogger.com,1999:blog-2894449204782293545.post-51673663811710568812012-04-03T00:52:00.003-07:002012-04-03T08:15:06.714-07:00SKY refactoring<div dir="ltr" style="text-align: left;" trbidi="on">
<div>
<br /></div>
<span style="font-family: inherit;">In my first post I've wrote about refactoring of SKY engine. Here I want to describe it in more details what did I mean.</span><br />
<span style="font-family: inherit;"></span><br />
<a name='more'></a><span style="font-family: inherit;"><br /></span><br />
<span style="font-family: inherit;">Let's look to the main engine's loop. It's huge, so I'll process it part by part</span><br />
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: x-small;"><br /></span><br />
First thing we're seeing - nested pause loop. Are we really need it? Or may remove without any regrets? Obviously it's paused state of engine. When engine in this state, it's only make delay and check keyboard for 'P' button pressed. (Also there is one moment. In this state user can't close game cause shouldQuit() procedure doesn't processed. I don't know actually is it bug or feature, but seems like bug)<br />
<br />
<br />
<ol style="background-color: #f8f8f8; color: #acacac; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace, serif; font-size: 12px; line-height: 21px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 48px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;">
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">while</span> <span class="br0" style="color: green;">(</span><span class="sy3" style="color: #000040;">!</span>shouldQuit<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_debugger<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>onFrame<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>shouldPerformAutoSave<span class="br0" style="color: green;">(</span>_lastSaveTime<span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>_skyControl<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>loadSaveAllowed<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_lastSaveTime <span class="sy1" style="color: navy;">=</span> _system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>getMillis<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyControl<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>doAutoSave<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span> <span class="kw1" style="color: blue;">else</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_lastSaveTime <span class="sy2" style="color: #000040;">+</span><span class="sy1" style="color: navy;">=</span> <span class="nu0" style="color: #0000dd;">30</span> <span class="sy2" style="color: #000040;">*</span> <span class="nu0" style="color: #0000dd;">1000</span><span class="sy4" style="color: teal;">;</span> <span class="co1" style="color: #666666;">// try again in 30 secs</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skySound<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>checkFxQueue<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyMouse<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>mouseEngine<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
handleKey<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>_systemVars.<span class="me1" style="color: #007788;">paused</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">do</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>updateScreen<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
delay<span class="br0" style="color: green;">(</span><span class="nu0" style="color: #0000dd;">50</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
handleKey<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span> <span class="kw1" style="color: blue;">while</span> <span class="br0" style="color: green;">(</span>_systemVars.<span class="me1" style="color: #007788;">paused</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
delayCount <span class="sy1" style="color: navy;">=</span> _system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>getMillis<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
</ol>
</div>
<div class="MsoNormal">
<br />
<div class="MsoNormal">
<span style="font-family: inherit;">After I removed nested loop, code begin to show that the pause is a state of loop. Also removing of totally useless loop helped us to make code more readable</span></div>
<div class="MsoNormal">
<br /></div>
</div>
<div class="MsoNormal">
</div>
<ol style="background-color: #f8f8f8; color: #acacac; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace, serif; font-size: 12px; line-height: 21px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 48px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;">
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">while</span> <span class="br0" style="color: green;">(</span><span class="sy3" style="color: #000040;">!</span>shouldQuit<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>_systemVars.<span class="me1" style="color: #007788;">paused</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>updateScreen<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
delay<span class="br0" style="color: green;">(</span><span class="nu0" style="color: #0000dd;">50</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
handleKey<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
delayCount <span class="sy1" style="color: navy;">=</span> _system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>getMillis<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">else</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_debugger<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>onFrame<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>shouldPerformAutoSave<span class="br0" style="color: green;">(</span>_lastSaveTime<span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>_skyControl<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>loadSaveAllowed<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_lastSaveTime <span class="sy1" style="color: navy;">=</span> _system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>getMillis<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyControl<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>doAutoSave<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span> <span class="kw1" style="color: blue;">else</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_lastSaveTime <span class="sy2" style="color: #000040;">+</span><span class="sy1" style="color: navy;">=</span> <span class="nu0" style="color: #0000dd;">30</span> <span class="sy2" style="color: #000040;">*</span> <span class="nu0" style="color: #0000dd;">1000</span><span class="sy4" style="color: teal;">;</span> <span class="co1" style="color: #666666;">// try again in 30 secs</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
</ol>
<br />
<div class="MsoNormal">
Now let's pay our attention to the bottom of go() function. There is calculation of delay
</div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: x-small;"><br /></span></div>
<div class="MsoNormal">
</div>
<ol style="background-color: #f8f8f8; color: #acacac; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace, serif; font-size: 12px; line-height: 21px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 48px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;">
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>_fastMode <span class="sy3" style="color: #000040;">&</span> <span class="nu0" style="color: #0000dd;">2</span><span class="br0" style="color: green;">)</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
delay<span class="br0" style="color: green;">(</span><span class="nu0" style="color: #0000dd;">0</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">else</span> <span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>_fastMode <span class="sy3" style="color: #000040;">&</span> <span class="nu0" style="color: #0000dd;">1</span><span class="br0" style="color: green;">)</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
delay<span class="br0" style="color: green;">(</span><span class="nu0" style="color: #0000dd;">10</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">else</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
delayCount <span class="sy2" style="color: #000040;">+</span><span class="sy1" style="color: navy;">=</span> _systemVars.<span class="me1" style="color: #007788;">gameSpeed</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw4" style="color: blue;">int</span> needDelay <span class="sy1" style="color: navy;">=</span> delayCount <span class="sy2" style="color: #000040;">-</span> <span class="br0" style="color: green;">(</span><span class="kw4" style="color: blue;">int</span><span class="br0" style="color: green;">)</span>_system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>getMillis<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">(</span>needDelay <span class="sy1" style="color: navy;"><</span> <span class="nu0" style="color: #0000dd;">0</span><span class="br0" style="color: green;">)</span> <span class="sy3" style="color: #000040;">||</span> <span class="br0" style="color: green;">(</span>needDelay <span class="sy1" style="color: navy;">></span> _systemVars.<span class="me1" style="color: #007788;">gameSpeed</span><span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
needDelay <span class="sy1" style="color: navy;">=</span> <span class="nu0" style="color: #0000dd;">0</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
delayCount <span class="sy1" style="color: navy;">=</span> _system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>getMillis<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
delay<span class="br0" style="color: green;">(</span>needDelay<span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
</ol>
<br />
<div class="MsoNormal">
<span style="font-family: inherit;">I want to move it to separate function because it make reading of main loop much harder than it can be.</span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: x-small;"><br /></span></div>
<div class="MsoNormal">
</div>
<ol style="background-color: #f8f8f8; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace, serif; font-size: 12px; line-height: 21px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 48px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;">
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw4" style="color: blue;">int</span> SkyEngine<span class="sy4" style="color: teal;">::</span><span class="me2" style="color: #007788;">calculateDelay</span><span class="br0" style="color: green;">(</span> <span class="kw4" style="color: blue;">uint32</span> <span class="sy3" style="color: #000040;">&</span>delayCount <span class="br0" style="color: green;">) </span><span style="color: green;">{</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>_fastMode <span class="sy3" style="color: #000040;">&</span> <span class="nu0" style="color: #0000dd;">2</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">return</span> <span class="nu0" style="color: #0000dd;">0</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">else</span> <span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>_fastMode <span class="sy3" style="color: #000040;">&</span> <span class="nu0" style="color: #0000dd;">1</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">return</span> <span class="nu0" style="color: #0000dd;">10</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">else</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
delayCount <span class="sy2" style="color: #000040;">+</span><span class="sy1" style="color: navy;">=</span> _systemVars.<span class="me1" style="color: #007788;">gameSpeed</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw4" style="color: blue;">int</span> needDelay <span class="sy1" style="color: navy;">=</span> delayCount <span class="sy2" style="color: #000040;">-</span> <span class="br0" style="color: green;">(</span><span class="kw4" style="color: blue;">int</span><span class="br0" style="color: green;">)</span>_system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>getMillis<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">(</span>needDelay <span class="sy1" style="color: navy;"><</span> <span class="nu0" style="color: #0000dd;">0</span><span class="br0" style="color: green;">)</span> <span class="sy3" style="color: #000040;">||</span> <span class="br0" style="color: green;">(</span>needDelay <span class="sy1" style="color: navy;">></span> _systemVars.<span class="me1" style="color: #007788;">gameSpeed</span><span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
needDelay <span class="sy1" style="color: navy;">=</span> <span class="nu0" style="color: #0000dd;">0</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
delayCount <span class="sy1" style="color: navy;">=</span> _system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>getMillis<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">return</span> needDelay<span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
</ol>
<br />
<div class="MsoNormal">
<span style="font-family: inherit;">In main loop I've left only <span lang="EN-US">delay</span> (<span lang="EN-US">calculateDelay</span>(<span style="color: #010001;">delayCount</span>)) string. I don't actually know, why <span style="color: #010001;">delayCount </span>uses in pause state, so I did't touch it. </span></div>
<div class="MsoNormal">
<span style="font-family: inherit;">Next code I want to extract from main loop is </span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: x-small;"><br /></span></div>
<div class="MsoNormal">
</div>
<ol style="background-color: #f8f8f8; color: #acacac; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace, serif; font-size: 12px; line-height: 21px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 48px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;">
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>shouldPerformAutoSave<span class="br0" style="color: green;">(</span>_lastSaveTime<span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>_skyControl<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>loadSaveAllowed<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_lastSaveTime <span class="sy1" style="color: navy;">=</span> _system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>getMillis<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyControl<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>doAutoSave<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span> <span class="kw1" style="color: blue;">else</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_lastSaveTime <span class="sy2" style="color: #000040;">+</span><span class="sy1" style="color: navy;">=</span> <span class="nu0" style="color: #0000dd;">30</span> <span class="sy2" style="color: #000040;">*</span> <span class="nu0" style="color: #0000dd;">1000</span><span class="sy4" style="color: teal;">;</span> <span class="co1" style="color: #666666;">// try again in 30 secs</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
</ol>
<br />
<div class="MsoNormal">
<span style="font-family: inherit;">It's absolutely independent and we may extract it into separate method</span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: x-small;"><br /></span></div>
<div class="MsoNormal">
</div>
<ol style="background-color: #f8f8f8; color: #acacac; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace, serif; font-size: 12px; line-height: 21px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 48px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;">
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw4" style="color: blue;">void</span> SkyEngine<span class="sy4" style="color: teal;">::</span><span class="me2" style="color: #007788;">performAutosave</span><span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>shouldPerformAutoSave<span class="br0" style="color: green;">(</span>_lastSaveTime<span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>_skyControl<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>loadSaveAllowed<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_lastSaveTime <span class="sy1" style="color: navy;">=</span> _system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>getMillis<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyControl<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>doAutoSave<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span> <span class="kw1" style="color: blue;">else</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_lastSaveTime <span class="sy2" style="color: #000040;">+</span><span class="sy1" style="color: navy;">=</span> <span class="nu0" style="color: #0000dd;">30</span> <span class="sy2" style="color: #000040;">*</span> <span class="nu0" style="color: #0000dd;">1000</span><span class="sy4" style="color: teal;">;</span> <span class="co1" style="color: #666666;">// try again in 30 secs</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
</ol>
<br />
<div class="MsoNormal">
<span style="font-family: inherit;">At the same time i've noticed that acutosaving doesn't perform in pause state (</span><b style="font-family: inherit;">bug?</b><span style="font-family: inherit;">) </span></div>
<div class="MsoNormal">
<span style="font-family: inherit;">For the same reasons, I've extracted this code</span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: x-small;"><br /></span></div>
<div class="MsoNormal">
</div>
<ol style="background-color: #f8f8f8; color: #acacac; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace, serif; font-size: 12px; line-height: 21px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 48px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;">
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>_debugger<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>showGrid<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw4" style="color: blue;">uint8</span> <span class="sy2" style="color: #000040;">*</span>grid <span class="sy1" style="color: navy;">=</span> _skyLogic<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>_skyGrid<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>giveGrid<span class="br0" style="color: green;">(</span>Logic<span class="sy4" style="color: teal;">::</span>_scriptVariables<span class="br0" style="color: green;">[</span>SCREEN<span class="br0" style="color: green;">]</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>grid<span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyScreen<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>showGrid<span class="br0" style="color: green;">(</span>grid<span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyScreen<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>forceRefresh<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
</ol>
<br />
<div class="MsoNormal">
<span style="font-family: inherit;">to separate method </span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: x-small;"><br /></span></div>
<div class="MsoNormal">
</div>
<ol style="background-color: #f8f8f8; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace, serif; font-size: 12px; line-height: 21px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 48px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;">
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw4" style="color: blue;">void</span> SkyEngine<span class="sy4" style="color: teal;">::</span><span class="me2" style="color: #007788;">showGrid</span><span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">) </span><span style="background-color: white; color: green;">{</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>_debugger<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>showGrid<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw4" style="color: blue;">uint8</span> <span class="sy2" style="color: #000040;">*</span>grid <span class="sy1" style="color: navy;">=</span> _skyLogic<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>_skyGrid<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>giveGrid<span class="br0" style="color: green;">(</span>Logic<span class="sy4" style="color: teal;">::</span>_scriptVariables<span class="br0" style="color: green;">[</span>SCREEN<span class="br0" style="color: green;">]</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>grid<span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyScreen<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>showGrid<span class="br0" style="color: green;">(</span>grid<span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyScreen<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>forceRefresh<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #acacac;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
</ol>
<br />
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: x-small;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: inherit;">in result of all these actions I got clean and readable main loop. </span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: x-small;"><br /></span></div>
<div class="MsoNormal">
</div>
<ol style="background-color: #f8f8f8; color: #acacac; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace, serif; font-size: 12px; line-height: 21px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 48px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;">
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">while</span> <span class="br0" style="color: green;">(</span><span class="sy3" style="color: #000040;">!</span>shouldQuit<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>_systemVars.<span class="me1" style="color: #007788;">paused</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>updateScreen<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
delay<span class="br0" style="color: green;">(</span><span class="nu0" style="color: #0000dd;">50</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
handleKey<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
delayCount <span class="sy1" style="color: navy;">=</span> _system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>getMillis<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">else</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_debugger<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>onFrame<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
performAutosave<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skySound<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>checkFxQueue<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyMouse<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>mouseEngine<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
handleKey<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyLogic<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>engine<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyScreen<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>processSequence<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyScreen<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>recreate<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyScreen<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>spriteEngine<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
showGrid<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyScreen<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>flip<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span> </div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
delay<span class="br0" style="color: green;">(</span>calculateDelay<span class="br0" style="color: green;">(</span>delayCount<span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span> </div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
</ol>
<br />
<div>
<span style="font-family: inherit;">But it's not the end. I still can make few improvements here. Each state call delay and handleKey functions. I think, I can move them out of condition. But to do this, I need to change calculateDelay function and add those strings to it:</span></div>
<div>
<br /></div>
<div>
<ol style="background-color: #f8f8f8; color: #acacac; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace, serif; font-size: 12px; line-height: 21px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 48px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;">
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>_systemVars.<span class="me1" style="color: #007788;">paused</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
delayCount <span class="sy1" style="color: navy;">=</span> _system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>getMillis<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">return</span> <span class="nu0" style="color: #0000dd;">50</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
</ol>
</div>
<div>
<br /></div>
<div>
<span style="font-family: inherit;">Paused state calls <span style="color: #010001;">_</span><span lang="EN-US" style="color: #010001;">system</span>-><span lang="EN-US" style="color: #010001;">updateScreen</span>() method. After few ticks function delay calls the same method. I not sure, but it seems like we can remove this call from paused state. Aad we get situation where engine doesnt perform any actions in paused state. I've changed condition and main loop got following look:</span></div>
<div>
<br /></div>
<div>
<ol style="background-color: #f8f8f8; color: #acacac; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace, serif; font-size: 12px; line-height: 21px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 48px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;">
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">while</span> <span class="br0" style="color: green;">(</span><span class="sy3" style="color: #000040;">!</span>shouldQuit<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span><span class="sy3" style="color: #000040;">!</span>_systemVars.<span class="me1" style="color: #007788;">paused</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_debugger<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>onFrame<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skySound<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>checkFxQueue<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyMouse<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>mouseEngine<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyLogic<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>engine<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyScreen<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>processSequence<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyScreen<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>recreate<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyScreen<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>spriteEngine<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
showGrid<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyScreen<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>flip<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span> </div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
performAutosave<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
delay<span class="br0" style="color: green;">(</span>calculateDelay<span class="br0" style="color: green;">(</span>delayCount<span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
handleKey<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
</ol>
</div>
<br />
<div>
<span style="font-family: inherit;">In my opinion, it much more readable and clear than it was. We can move forward and make it FSM-like and remove delay function and one more loop, but I don't think we realy need to do this. </span></div>
<div>
<br /></div>
<div>
<span style="font-family: inherit;">Now, let's look to the delay() function.</span><br />
<span style="font-family: inherit;"><br /></span><br />
<ol style="background-color: #f8f8f8; color: #acacac; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace, serif; font-size: 12px; line-height: 21px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 48px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;">
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw4" style="color: blue;">void</span> SkyEngine<span class="sy4" style="color: teal;">::</span><span class="me2" style="color: #007788;">delay</span><span class="br0" style="color: green;">(</span><span class="kw4" style="color: blue;">int32</span> amount<span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
Common<span class="sy4" style="color: teal;">::</span><span class="me2" style="color: #007788;">Event</span> event<span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
</div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw4" style="color: blue;">uint32</span> start <span class="sy1" style="color: navy;">=</span> _system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>getMillis<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_keyPressed.<span class="me1" style="color: #007788;">reset</span><span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
</div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>amount <span class="sy1" style="color: navy;"><</span> <span class="nu0" style="color: #0000dd;">0</span><span class="br0" style="color: green;">)</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
amount <span class="sy1" style="color: navy;">=</span> <span class="nu0" style="color: #0000dd;">0</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
</div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">do</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">while</span> <span class="br0" style="color: green;">(</span>_eventMan<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>pollEvent<span class="br0" style="color: green;">(</span>event<span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">switch</span> <span class="br0" style="color: green;">(</span>event.<span class="me1" style="color: #007788;">type</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">case</span> Common<span class="sy4" style="color: teal;">::</span><span class="me2" style="color: #007788;">EVENT_KEYDOWN</span><span class="sy4" style="color: teal;">:</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_keyPressed <span class="sy1" style="color: navy;">=</span> event.<span class="me1" style="color: #007788;">kbd</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">break</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">case</span> Common<span class="sy4" style="color: teal;">::</span><span class="me2" style="color: #007788;">EVENT_MOUSEMOVE</span><span class="sy4" style="color: teal;">:</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span><span class="sy3" style="color: #000040;">!</span><span class="br0" style="color: green;">(</span>_systemVars.<span class="me1" style="color: #007788;">systemFlags</span> <span class="sy3" style="color: #000040;">&</span> SF_MOUSE_LOCKED<span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyMouse<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>mouseMoved<span class="br0" style="color: green;">(</span>event.<span class="me1" style="color: #007788;">mouse</span>.<span class="me1" style="color: #007788;">x</span>, event.<span class="me1" style="color: #007788;">mouse</span>.<span class="me1" style="color: #007788;">y</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">break</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">case</span> Common<span class="sy4" style="color: teal;">::</span><span class="me2" style="color: #007788;">EVENT_LBUTTONDOWN</span><span class="sy4" style="color: teal;">:</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span><span class="sy3" style="color: #000040;">!</span><span class="br0" style="color: green;">(</span>_systemVars.<span class="me1" style="color: #007788;">systemFlags</span> <span class="sy3" style="color: #000040;">&</span> SF_MOUSE_LOCKED<span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyMouse<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>mouseMoved<span class="br0" style="color: green;">(</span>event.<span class="me1" style="color: #007788;">mouse</span>.<span class="me1" style="color: #007788;">x</span>, event.<span class="me1" style="color: #007788;">mouse</span>.<span class="me1" style="color: #007788;">y</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyMouse<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>buttonPressed<span class="br0" style="color: green;">(</span><span class="nu0" style="color: #0000dd;">2</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">break</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">case</span> Common<span class="sy4" style="color: teal;">::</span><span class="me2" style="color: #007788;">EVENT_RBUTTONDOWN</span><span class="sy4" style="color: teal;">:</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span><span class="sy3" style="color: #000040;">!</span><span class="br0" style="color: green;">(</span>_systemVars.<span class="me1" style="color: #007788;">systemFlags</span> <span class="sy3" style="color: #000040;">&</span> SF_MOUSE_LOCKED<span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyMouse<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>mouseMoved<span class="br0" style="color: green;">(</span>event.<span class="me1" style="color: #007788;">mouse</span>.<span class="me1" style="color: #007788;">x</span>, event.<span class="me1" style="color: #007788;">mouse</span>.<span class="me1" style="color: #007788;">y</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyMouse<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>buttonPressed<span class="br0" style="color: green;">(</span><span class="nu0" style="color: #0000dd;">1</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">break</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">default</span><span class="sy4" style="color: teal;">:</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">break</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
</div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>updateScreen<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
</div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>amount <span class="sy1" style="color: navy;">></span> <span class="nu0" style="color: #0000dd;">0</span><span class="br0" style="color: green;">)</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>delayMillis<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">(</span>amount <span class="sy1" style="color: navy;">></span> <span class="nu0" style="color: #0000dd;">10</span><span class="br0" style="color: green;">)</span> <span class="sy4" style="color: teal;">?</span> <span class="nu0" style="color: #0000dd;">10</span> <span class="sy4" style="color: teal;">:</span> amount<span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
</div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span> <span class="kw1" style="color: blue;">while</span> <span class="br0" style="color: green;">(</span>_system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>getMillis<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span> <span class="sy1" style="color: navy;"><</span> start <span class="sy2" style="color: #000040;">+</span> amount<span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
</ol>
<br />
<span style="font-family: inherit;">There are 2 loops in delay() function. They make logicaly unrelated to each other actions. Outer loop makes delay, inner loop processes events. I think we need extract events processing to separate function (processEvents). This will make code more redable and willn't change logic. Delay funtion became more understandable, cause programmer don't need to filter event processing by his mind, he's just seeing "processEvents" word and understands what's going on. So, after extraction there are 2 functions:</span><br />
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: x-small;"><br /></span></div>
<div class="MsoNormal">
</div>
<ol style="background-color: #f8f8f8; color: #acacac; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace, serif; font-size: 12px; line-height: 21px; list-style-image: initial; list-style-position: initial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 48px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto; white-space: nowrap;">
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw4" style="color: blue;">void</span> SkyEngine<span class="sy4" style="color: teal;">::</span><span class="me2" style="color: #007788;">delay</span><span class="br0" style="color: green;">(</span><span class="kw4" style="color: blue;">int32</span> amount<span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw4" style="color: blue;">uint32</span> start <span class="sy1" style="color: navy;">=</span> _system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>getMillis<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_keyPressed.<span class="me1" style="color: #007788;">reset</span><span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
</div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>amount <span class="sy1" style="color: navy;"><</span> <span class="nu0" style="color: #0000dd;">0</span><span class="br0" style="color: green;">)</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
amount <span class="sy1" style="color: navy;">=</span> <span class="nu0" style="color: #0000dd;">0</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
</div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">do</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
processEvents<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>updateScreen<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
<div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
</div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span>amount <span class="sy1" style="color: navy;">></span> <span class="nu0" style="color: #0000dd;">0</span><span class="br0" style="color: green;">)</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>delayMillis<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">(</span>amount <span class="sy1" style="color: navy;">></span> <span class="nu0" style="color: #0000dd;">10</span><span class="br0" style="color: green;">)</span> <span class="sy4" style="color: teal;">?</span> <span class="nu0" style="color: #0000dd;">10</span> <span class="sy4" style="color: teal;">:</span> amount<span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
</div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span> <span class="kw1" style="color: blue;">while</span> <span class="br0" style="color: green;">(</span>_system<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>getMillis<span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span> <span class="sy1" style="color: navy;"><</span> start <span class="sy2" style="color: #000040;">+</span> amount<span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
</div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw4" style="color: blue;">void</span> SkyEngine<span class="sy4" style="color: teal;">::</span><span class="me2" style="color: #007788;">processEvents</span><span class="br0" style="color: green;">(</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
Common<span class="sy4" style="color: teal;">::</span><span class="me2" style="color: #007788;">Event</span> event<span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">while</span> <span class="br0" style="color: green;">(</span>_eventMan<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>pollEvent<span class="br0" style="color: green;">(</span>event<span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">switch</span> <span class="br0" style="color: green;">(</span>event.<span class="me1" style="color: #007788;">type</span><span class="br0" style="color: green;">)</span> <span class="br0" style="color: green;">{</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">case</span> Common<span class="sy4" style="color: teal;">::</span><span class="me2" style="color: #007788;">EVENT_KEYDOWN</span><span class="sy4" style="color: teal;">:</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_keyPressed <span class="sy1" style="color: navy;">=</span> event.<span class="me1" style="color: #007788;">kbd</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">break</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">case</span> Common<span class="sy4" style="color: teal;">::</span><span class="me2" style="color: #007788;">EVENT_MOUSEMOVE</span><span class="sy4" style="color: teal;">:</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span><span class="sy3" style="color: #000040;">!</span><span class="br0" style="color: green;">(</span>_systemVars.<span class="me1" style="color: #007788;">systemFlags</span> <span class="sy3" style="color: #000040;">&</span> SF_MOUSE_LOCKED<span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyMouse<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>mouseMoved<span class="br0" style="color: green;">(</span>event.<span class="me1" style="color: #007788;">mouse</span>.<span class="me1" style="color: #007788;">x</span>, event.<span class="me1" style="color: #007788;">mouse</span>.<span class="me1" style="color: #007788;">y</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">break</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">case</span> Common<span class="sy4" style="color: teal;">::</span><span class="me2" style="color: #007788;">EVENT_LBUTTONDOWN</span><span class="sy4" style="color: teal;">:</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span><span class="sy3" style="color: #000040;">!</span><span class="br0" style="color: green;">(</span>_systemVars.<span class="me1" style="color: #007788;">systemFlags</span> <span class="sy3" style="color: #000040;">&</span> SF_MOUSE_LOCKED<span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyMouse<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>mouseMoved<span class="br0" style="color: green;">(</span>event.<span class="me1" style="color: #007788;">mouse</span>.<span class="me1" style="color: #007788;">x</span>, event.<span class="me1" style="color: #007788;">mouse</span>.<span class="me1" style="color: #007788;">y</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyMouse<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>buttonPressed<span class="br0" style="color: green;">(</span><span class="nu0" style="color: #0000dd;">2</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">break</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">case</span> Common<span class="sy4" style="color: teal;">::</span><span class="me2" style="color: #007788;">EVENT_RBUTTONDOWN</span><span class="sy4" style="color: teal;">:</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">if</span> <span class="br0" style="color: green;">(</span><span class="sy3" style="color: #000040;">!</span><span class="br0" style="color: green;">(</span>_systemVars.<span class="me1" style="color: #007788;">systemFlags</span> <span class="sy3" style="color: #000040;">&</span> SF_MOUSE_LOCKED<span class="br0" style="color: green;">)</span><span class="br0" style="color: green;">)</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyMouse<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>mouseMoved<span class="br0" style="color: green;">(</span>event.<span class="me1" style="color: #007788;">mouse</span>.<span class="me1" style="color: #007788;">x</span>, event.<span class="me1" style="color: #007788;">mouse</span>.<span class="me1" style="color: #007788;">y</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
_skyMouse<span class="sy2" style="color: #000040;">-</span><span class="sy1" style="color: navy;">></span>buttonPressed<span class="br0" style="color: green;">(</span><span class="nu0" style="color: #0000dd;">1</span><span class="br0" style="color: green;">)</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">break</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">default</span><span class="sy4" style="color: teal;">:</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="kw1" style="color: blue;">break</span><span class="sy4" style="color: teal;">;</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
<li class="li2" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
<li class="li1" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><div class="de1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; color: black; margin-bottom: 0px; margin-left: -7px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; position: relative; vertical-align: top;">
<span class="br0" style="color: green;">}</span></div>
</li>
</ol>
<br class="Apple-interchange-newline" /></div>
</div>jakimushkahttp://www.blogger.com/profile/04190023392944923689noreply@blogger.com0tag:blogger.com,1999:blog-2894449204782293545.post-15764639724134961462012-03-27T01:19:00.000-07:002012-04-25T04:46:27.762-07:00How EventRecorder works (animated version)<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcGhXAHpuWftAucabNDyOMwXEkeOJ8ZPnquAknq8txRjobIFm3BR7IyKlcYYIo5SNLKyyNspsRC810wi7AMi2Ig6KvqR-YgyDuoHps0Tf-em8dRPUTy_t-zCuyEYRLyr4W2-EnggUV7jg/s1600/f7e69ab72c46.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><br /></a></div>
<br />
It isn't correct for this miment, so I'll put it under cut<br />
<a name='more'></a><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcGhXAHpuWftAucabNDyOMwXEkeOJ8ZPnquAknq8txRjobIFm3BR7IyKlcYYIo5SNLKyyNspsRC810wi7AMi2Ig6KvqR-YgyDuoHps0Tf-em8dRPUTy_t-zCuyEYRLyr4W2-EnggUV7jg/s1600/f7e69ab72c46.gif" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcGhXAHpuWftAucabNDyOMwXEkeOJ8ZPnquAknq8txRjobIFm3BR7IyKlcYYIo5SNLKyyNspsRC810wi7AMi2Ig6KvqR-YgyDuoHps0Tf-em8dRPUTy_t-zCuyEYRLyr4W2-EnggUV7jg/s1600/f7e69ab72c46.gif" /></a></div>jakimushkahttp://www.blogger.com/profile/04190023392944923689noreply@blogger.com0tag:blogger.com,1999:blog-2894449204782293545.post-91637345825001819682012-03-26T05:00:00.006-07:002012-03-26T21:46:40.415-07:00Proof Of Concept<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPZSTRlRmw21-_3J9zZgWbS9VHGU44XMN_ZkUq0o-XWzE5ogBeW6f3ovvfTbqnnF_fm0MrwzLycU-dBMvkz4LzDPlS6d4cd9_B-MUsr-Xr3TcOB3sjAl6qSyqves7lgFAoA_h0sR87BKU/s1600/how+it+works.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="355" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPZSTRlRmw21-_3J9zZgWbS9VHGU44XMN_ZkUq0o-XWzE5ogBeW6f3ovvfTbqnnF_fm0MrwzLycU-dBMvkz4LzDPlS6d4cd9_B-MUsr-Xr3TcOB3sjAl6qSyqves7lgFAoA_h0sR87BKU/s640/how+it+works.jpg" width="640" /></a></div>
<br />
Here you can see my vision of EventRecorder I've implemented. I've summoned all my mad msPaint skills and hopeing that it looking as well clear as funny. Let me describe how it works:<br />
<br />
<b><u>recording:</u></b><br />
EventsRecorder subscribed as observer to EventManager. Every income message it push into _eventsQueue. Every iteration of main loop(sync), engine calls EventsRecorder's sync method and all events from queue falling down into the file.<br />
<br />
<u><b>playback:</b></u><br />
Every iteration of main loop (sync), EventsRecorder clear _eventsQueue and push events from file to events queue. Then push it back into EventManager.<br />
<br />
Video of working demo: <a href="http://www.youtube.com/watch?v=6AcXYGLH4vE">http://www.youtube.com/watch?v=6AcXYGLH4vE</a><br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
I've forked scummvm on github and trying to understand how can i work with code (all this repositories, branches and collaborate work is very new for me). Now there is only clone of scummvm in my repository, but anyway, here is link for it:<br />
<a href="https://github.com/jakimushka/scummvm">https://github.com/jakimushka/scummvm</a></div>jakimushkahttp://www.blogger.com/profile/04190023392944923689noreply@blogger.com0tag:blogger.com,1999:blog-2894449204782293545.post-48122343010208325362012-03-23T03:33:00.001-07:002012-03-31T11:54:45.577-07:00At the beginning of a long journey<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div style="text-align: justify;">
<div style="text-align: left;">
<div style="text-align: -webkit-auto;">
<span lang="EN-US" style="font-family: Tahoma; line-height: 115%;">I want to take part
in summvm development as a part of the Google Summer of Code Event. Here I’ll
tell about work done, about my impressions from this project and about other
things related to this.<br />
<br />
It was highly recommended to make bugfix
or path of existing code for participation in the project. But I have some problems with
them. After trying about ten bugs from bugtracker, I can’t reproduce any of
them. That’s why, I’m going to start working on the idea I want to implement
during this project. <br />
<br />
So, my aim is to write testing framework, which can record or reproduce user’s
actions. There is already implemented module in the project, but it has some
problems with synchronization with states of engine. After analyzing the
existing sources, I’ve found that previous version of the recorder was based on
the idea that input events are in the form of interrupts and they linked to the
time. In fact, events are state of input controls during the current iteration
of engine. So for the recorders correct work, it’s necessary to store/restore the
state of input controls in each iteration. <br />
It looks much easier than previous version cause there is no necessity to make
any time calculations. But difficulty lay in the fact that calling of recorder
must be implemented in every supported engine and different implementation of
main loop in engines also can be a problem. So calls recorder’s interface must
be as easy and compact as possible. Ideally, recorder must be encapsulated into
Event Manger. <br />
<br />
My first step is implementation of Event Recorder class and integration into
one of the existing engines (I think it going to be Sky engine, cause it is very
easy to find game for testing) and testing until it will work perfectly.<br />
Then I’ll try to integrate it into another engine and analyze what difference
it has and what should I change in engines to make integration easy. </span><br />
<span lang="EN-US" style="font-family: Tahoma; line-height: 115%;">Next I’ll integrate it into all engines and will write guidelines for using it
in new engines. </span></div>
</div>
</div>
<div style="text-align: left;">
<span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px;">The main loop of engine was easily found in </span><a href="http://doxygen.scummvm.org/d2/d94/sky_8cpp-source.html#l00170" style="font-family: Tahoma; font-weight: bold; white-space: pre-wrap;"><span style="color: #1155cc; font-family: Tahoma; font-weight: normal; vertical-align: baseline;">g</span></a><a href="http://doxygen.scummvm.org/d2/d94/sky_8cpp-source.html#l00170" style="font-family: Tahoma; font-weight: bold; white-space: pre-wrap;"><span style="color: #1155cc; font-family: Tahoma; font-weight: normal; vertical-align: baseline;">o()</span></a><span style="font-family: Tahoma; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px;">method of SkyEngine class. This method implements all game logic and it calls</span> <a href="http://doxygen.scummvm.org/d2/d94/sky_8cpp-source.html#l00390" style="font-family: Tahoma; font-weight: bold; white-space: pre-wrap;"><span style="color: #1155cc; font-family: Tahoma; font-weight: normal; vertical-align: baseline;">delay()</span></a> <span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px;">function which sync engine with FPS and also processes events. </span><br />
<div style="text-align: left;">
<span style="text-align: -webkit-auto;"><span style="vertical-align: baseline;"><br style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;" /><span style="font-family: Tahoma; white-space: pre-wrap;"><i><span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;">Actually, I do not really like main loop implementation, and if it would be permitted, I refactor it. </span><br style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;" /><span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;">Firstly, I think that methods </span></i></span>
<span style="font-family: Tahoma; font-style: italic; text-align: left; vertical-align: baseline; white-space: pre-wrap;"> </span><a href="http://doxygen.scummvm.org/d2/d94/sky_8cpp-source.html#l00390" style="font-family: Tahoma; font-style: italic; font-weight: bold; text-align: left; white-space: pre-wrap;"><span style="color: #1155cc; font-family: Tahoma; font-weight: normal; vertical-align: baseline;">delay()</span></a><span style="font-family: Tahoma; font-style: italic; text-align: left; vertical-align: baseline; white-space: pre-wrap;"> and </span><a href="http://doxygen.scummvm.org/d2/d43/sky_2intro_8cpp-source.html#l00652" style="font-family: Tahoma; font-style: italic; font-weight: bold; text-align: left; white-space: pre-wrap;"><span style="color: #1155cc; font-family: Tahoma; font-weight: normal; vertical-align: baseline;">doIntro </span></a><span style="font-family: Tahoma; font-style: italic; text-align: left; vertical-align: baseline; white-space: pre-wrap;"> </span><i style="font-family: Tahoma; white-space: pre-wrap;"><span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;">isn’t routines. They are states of engine! And engine is a classic state machine, which can be in following states: </span><br style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;" /><span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;">STATE_INTRO - playing of intro, which can be interrupted by escape key pressing and going into action state </span><br style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;" /><span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;">STATE_ACTION - working iteration of engine. Makes updates in logic graphicks, analyze input </span><br style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;" /><span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;">STATE_IDLE - state for syncing with FPS </span><br style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;" /><span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;">STATE_PAUSE - ingame pause</span><br style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;" /><span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;">Now it works how statemachine but logic “smoothed“ with the code. Function delay() , following its name must pause application work. But it also makes an events processing (btw, events processing loop wants to be extracted from delay method). </span></i><br style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;" /><span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;">To test my idea, I’m adding public methods saveEngineInputState and restoreEngineInputState into EventRecorder class. They are only writing given state of keyboard and mouse to file depends from recorder state. (if recorder in writing state - restoreEngineInputState doesn’t work. if recorder in playback state, saveEngineInputState doesnt work) . I’m going to store input state after processMessages routine and push stored messages into EventManager before processMessages routine (faking real events). </span><br style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;" /><br style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;" /><span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;">Pseudocode: </span><br style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;" /><span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;">g_eventRec.restoreEngineInputState(); </span><br style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;" /><span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;">processMessages(); </span><br style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;" /><span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;">g_eventRec.saveEngineInputState(_keyBoardState, mouseState, mouseClicked); </span><br style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;" /><br style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;" /><span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;">After testing, I’ve noticed that this principle works really great in things related to synchronization. But it also has some problems, which must be solved:</span><br style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;" /><span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;">only mouse and keyboard events are processing now. And only aim engine routine. For instance, EVENT_QUIT willn’t handle. Keys pressing will not handling properly too. (but that moment I thought it was due to weak engine architecture)</span></span></span></div>
<ul style="font-family: Tahoma; text-align: left; white-space: pre-wrap;">
<li><span style="text-align: -webkit-auto;"><span style="vertical-align: baseline;"><span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;">aren’t processing mouse movement events</span></span></span></li>
<li><span style="text-align: -webkit-auto;"><span style="vertical-align: baseline;"><span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;">there may be some problems with using it in different engines</span></span></span></li>
<li><span style="text-align: -webkit-auto;"><span style="vertical-align: baseline;"><span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;">aren’t processing random (easy to fix)</span></span></span></li>
</ul>
<span style="text-align: -webkit-auto;"><span style="vertical-align: baseline;"><span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;">In general, I think, I get awesome progress for few hours of work. I’m looking forward for any suggestions and criticism </span><span style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;">comments.</span><b><br style="background-color: white; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; line-height: 14px; text-align: left; white-space: normal;" /></b></span></span></div>
<span id="internal-source-marker_0.6457978349644691" style="text-align: -webkit-auto;"><span style="font-family: Arial; vertical-align: baseline;">
</span></span></div>jakimushkahttp://www.blogger.com/profile/04190023392944923689noreply@blogger.com0