This is just a matter of adding functions to return the values from the array in the same format we use elsewhere.
The following functions are added to the end of the program.
// Return Functions - WorkObject Array
function WorkObjectIsFree( thisObject )
if WorkObjectValid( thisObject )
thisIsFree = workObject[ thisObject ].isFree
else
thisIsFree = -1
endif
endfunction thisIsFree
function WorkObjectID( thisObject )
if WorkObjectValid( thisObject )
thisObjectID = workObject[ thisObject ].objectID
else
thisObjectID = -1
endif
endfunction thisObjectID
function WorkObjectSprite( thisObject )
if WorkObjectValid( thisObject )
thisSprite = workObject[ thisObject ].sprite
else
thisSprite = -1
endif
endfunction thisSprite
These work in exatly the same way as the other return function we have used, but since they access an array, an additional check is used to make sure the value passed is a valid index for the array.
If it is not, then a value of -1 is returned, which indicates an error.
Now we change the references to the array fields used in the other functions to use these new functions.
In FirstFreeWorkObject(), we change the line
if workObject[ thisObject ].isFree > 0 then exit
to
if workObjectIsFree( thisObject ) > 0 then exit
In DelWorkObject(), we change the lines
if workObject[ thisObject ].sprite > 0
thisSprite = workObject[ thisObject ].sprite
to
if WorkObjectSprite( thisObject ) > 0
thisSprite = workObjectSprite( thisObject )
and change
while workObject[ TopWorkObject() ].isFree = 1 and TopWorkObject() >= 0
to
while WorkObjectIsFree( TopWorkObject() ) = 1 and TopWorkObject() >= 0
Some would argue that these changes are not necessary and add additional processing - the fact that it checks the object is valid numerous times - each time the array fields are accessed.
It's an small overhead I am willing to take to keep the code tidy.
Also in the case of statements such as
WorkObjectIsFree( TopWorkObject() ) = 1
the = 1 is not actually necessary, since
WorkObjectIsFree( TopWorkObject() )
is still true (and in fact reads better), but there is an issue with AGK's true values which is awaiting a fix, so until that fix is done, I am going with the safe option.
Also we are only changing the places where the fields are read a this stage, not where they are changed.
No comments:
Post a Comment