[gameprogrammer] Re: Level triggered data synchronization

  • From: Bob Pendleton <bob@xxxxxxxxxxxxx>
  • To: Gameprogrammer Mailing List <gameprogrammer@xxxxxxxxxxxxx>
  • Date: Wed, 21 Apr 2004 09:09:46 -0500

On Tue, 2004-04-20 at 23:31, Kevin Jenkins wrote:
> While working on my game I (now) consistently use a programming design
> that makes it easier to write and maintain code.
> 
> I call it level triggered data synchronization.  By level triggered I mean
> as opposed to edge triggered - data changes during processing rather than
> when the event to change the data occurs.
> 
> The concept is quite simple.  When you have a variable that you can set
> based on the current program state you should recreate the value for that
> data every cycle rather than setting that data on the conditions that
> directly modify it.
> 
> For example, lets say you have a program where the user clicks on one of 3
> filenames and a bitmap shows up to display the filename chosen.
> 
> To program this using edge triggered data synchronization, you would put
> code in the MousePress function.  Depending on which filename was clicked,
> you immediately load that file and unload the older image if necessary.
> 
> To program this using level triggered data synchronization, you would put
> code in the Render function.  The render function would check the variable
> containing the index of which filename was picked.  It would then compare
> this filename what Bitmap::Name() returns.  If they are different, or if the
> bitmap is NULL, then load the new image.
> 
> The second way is slightly less efficient because you are doing a comparison
> every frame.  However, it is far more maintainable because if at a later
> point you add another place to show another image it will show the correct
> image for free.  In the first case, you would either cut and paste the code
> to load the image or at best call a function, assuming (in the unlikely
> case) that you made this a function to begin with or put it in a function to
> avoid code duplication.

There is a different term for this, I can't remember it, but there is
another name for it. You have discovered on your own a principle that
many programmers "don't get" even when it is pointed out to them. 

Thanks for posting it.

                Bob Pendleton


> 
> Another benefit of the second way is you sometimes avoid processing.  For
> example, lets say there were two places you could pick the same bitmap.  If
> you picked the new bitmap that had the exact same path/filename as the old
> one,
> it would avoid an unnecessary load.
> 
> In trivial cases both ways works fine.  But in large classes with many
> variables this can cut down on a lot of code and maintenance.  It also makes
> the program more maintainable if someone else has to work on it because they
> can change one section of the code and it just works - as opposed to working
> in some cases and not others.  Of course when it takes a lot of processing
> to determine the state then stay with edge triggered.  But in most cases
> it's as simple as checking a few pointers.
> 
> I'm sure a lot of people know this.  The reason I point it out is because I
> didn't strictly follow it before and now I do and have really seen the
> benefit.
> I think it's important enough to point out.
> 
-- 
+---------------------------------------+
+ Bob Pendleton: writer and programmer. +
+ email: Bob@xxxxxxxxxxxxx              +
+ web:   www.GameProgrammer.com         +
+---------------------------------------+


Other related posts: