This will get quite complex, so I'll start with the basics and expand on it as more data is added.
Firstly we need to know how many objects were loaded. This will be a new field called topObject in the GameType UDT, which now looks like this.
type GameType state level topObject endtypeAs always we create a return function for this.
function TopObject() endfunction game.topObjectAnd set the initial value in the Initialise() function.
game.topObject = 0And also after the closefile() command in the LoadObjectData() function.
game.topObject = 0The array to store the game data will be called MainObject[].
It's structure is defined in another UDT.
type MainObjectType name$ icon isKnown endtypeInitially, this just includes fields for the object name and it's icon number, as well as the field isKnown, which indicates if the object is known about.
The array is dimmed with zero elements in the Initialise() function.
dim MainObject[0] as MainObjectTypeThough it is empty, we can still set up the basic functions which will eventually be needed to access the array. These are very similar to the ones used by the WorkObject[] array.
The validation function.
// Main Object Functions function ObjectValid( thisObject ) thisBool = ( thisObject > 0 and thisObject <= TopObject() ) endfunction thisBoolA function to locate an object by its name.
function FindObjectByName( thisName$ ) thisName$ = upper( thisName$ ) for thisObject = 1 to TopObject() if upper( ObjectName( thisObject )) = thisName$ then exit next thisObject if thisObject > TopObject() then thisObject = 0 endfunction thisObjectwhich compares the value passed against each array object's name field, after both have been converted to upper case. This ensures that the case used does not affect the search.
And the return functions for the array
// Return Functions - Main Object function ObjectName( thisObject ) if ObjectValid( thisObject ) thisString$ = MainObject [ thisObject ].name$ else thisString$ = "" endif endfunction thisString$ function ObjectIcon( thisObject ) if ObjectValid( thisObject ) thisIcon = MainObject [ thisObject ].icon else thisIcon = -1 endif endfunction thisIcon function ObjectIsKnown( thisObject ) if ObjectValid( thisObject ) thisBool = MainObject [ thisObject ].isKnown else thisBool = -1 endif endfunction thisBoolEverything is now in place to start filling the array with data.
As a final step, we add a print statement just after the games State line in PrintDiagnostics() function.
print("Objects : " + str( TopObject() ) + chr(10) )So we can see at any time how many objects are loaded.
No comments:
Post a Comment