Script Classes for Adventure Games/Region Class
Author: Jeff Stephenson
The Region Class
A Region is an area of a game which is larger than a Room (see below) — for example a forest, island, or a planet. It is used to provide standard behavior (i.e. responses to user input) in an area of the game without having to code the behavior into each room in the region. For example in Space Quest, we might define the town of Ulence Flats and the planet of Kerona as regions. The Ulence Flats region would be used to handle the response to 'look city' while in the town, whereas the Kerona region would handle the response to 'look sky'. Regions take the place of the 'dynamic logics' of the AGI interpreter. A Region differs from a Locale (see below) in that a Region has a doit method that will be invoked every animation cycle by the game. This is where t. put any checks or code that encompasses more than one room and needs to be done each animation cycle.
scriptThe ID of a Script for the current room.
numberThe region number. Set by the setRegions: method discussed in class Room below, it is used when we dispose the region.
timerThe ID of a Timer set to cue: this Region.
keepSet this to TRUE if you want the Region to remain in the heap through a newRoom:, to FALSE if you want the Region unloaded.
initializedThis property is set to TRUE when the Region is sent the init: message after a setRegion: involving it has been done. The init: method is not invoked once initialized is TRUE, so a Region will only be initialized once for the Rooms which require it.
init:When a Region is added to the region list regions by the setRegions: method discussed in the class Room below, it is sent the init: message in case any setup is needed. The default init: method does nothing.
doit:Each active Region is sent the doit: message in each animation cycle. The default method passes the doit: message along to the script, if there is one, but does nothing else.
handleEvent: eventThe default method for this sends handleEvent: event to the Region's script, if there is one. You may handle events either in the Region itself or its script. Remember that in general you will not want to handle an event which is claimed, and that you should set the claimed property of the event to TRUE if you respond to it.
setScript: scriptSet the script of the Region to script and init: it.
cue: newStateCue this Region's script. If the optional newState is present, invoke (script changeState:newState) instead.