Module Wherigo
Wherigo Library, backward compatible with Wherigo Library by Groundspeak
    Info:
    
	
	| MessageBox (t) | Show message to user
   accepts table param or multiple parameters as below. | 
	
	| _MessageBoxResponse (action) | Receives users response and calls desired callback. | 
	
	| Dialog (t) | Shows series of messages to user, one after another. | 
	
	| PlayAudio (Media) | Request to play user some audio. | 
	
	| ShowStatusText (Text) | Shows status text somewhere. | 
	
	| VectorToZone (point, zone) | Calculates distance from given point to nearest point of given zone | 
	
	| VectorToSegment (point, p1, p2) | Calculates distance from given point to nearest point on segment of zone
   defined by two points (p1, p2) | 
	
	| Inject () | Unknown purpose | 
	
	| IsPointInZone (point, zone) | Determines whether is given point in given zone using Minimal Bounding
   Box algorithm and then with Cross Count algorithm | 
	
	| TranslatePoint (point, distance, bearing) | Calculate new position of point, which is translated by given distance
   and with given bearing | 
	
	| VectorToPoint (p1, p2) | Calculate distance and bearing from one point to another | 
	
	| NoCaseEquals (f, s) | Compare two strings ignoring case | 
	
	| Command (text) | Sends some command to engine Possible values:
 
		SaveClose	- Saves cartridges and prompt user to quit
		DriveTo		- This should start Turn-by-turn navigation, but it is not used
		StopSound	- Stops playing sound in user interface
		Alert		- Beep. | 
	
	| LogMessage (Text, Level) | Write message into logfile for opened cartridge
   params can be table | 
	
	| GetInput (input) | Request user to fill in input. | 
	
	| _GetInputResponse (response) | Callback of GetInput. | 
	
	| ShowScreen (screen, item) | Sends request to user interface to show screen | 
	
	| __tonumber (arg) | Conversion function from Distance or Bearing object to number
   used in metamethods to arithmetic and comparisons | 
	
	| _callback (event, id) | Execute user command or click event on UI item. | 
	
	| _getMediaField (field, t) | Get field with media path in JSON notation for UI. | 
	
	| _addCommands (item) | Get Commands field with array of enabled commands for current object in JSON notation. | 
	
	| _bool2str (b) | Convert boolean value to string for JSON notation. | 
	
	| _toJSON (str) | Escape string to put in JSON structure. | 
	
	| _getUI () | Get JSON fields to send to UI, containing all 4 sections, without brackets around,
   so C++ can add more fields. | 
	
	| _getLocations () | Get Locations data in JSON to be send to UI. | 
	
	| _getInventory () | Get Inventory data in JSON to be send to UI. | 
	
	| _getYouSee () | Get YouSee data in JSON to be send to UI. | 
	
	| _getTasks () | Get Tasks data in JSON to be send to UI. | 
	
	| _Internal | Virtual object to execute command with other item, same way as GetInput. | 
    Functions
    
    - 
    
    MessageBox (t)
    
- 
    Show message to user
   accepts table param or multiple parameters as below.
   Params table: 
   -  Text 		string message to show (required)
   
-  Media		ZMedia image to show with it
   
-  Buttons		Table with text to show on buttons
   
-  Callback	Function to call after user pushes on of the buttons
   
 Parameters:
- 
    
    _MessageBoxResponse (action)
    
- 
    Receives users response and calls desired callback.  Called only if
   callback was set. Internal usage only!
    Parameters:
        - action
        	Button1 or Button2 or nil depending on user choice
 
- 
    
    Dialog (t)
    
- 
    Shows series of messages to user, one after another.  Internal using
   MessageBox. For more details @see MessageBox
    Parameters:
        - t
        	Table of tables with keys "Text" and "Media" to be shown
 
- 
    
    PlayAudio (Media)
    
- 
    Request to play user some audio.  Sends request to user interface what
   handles it. If it is long, can be stopped by calling Command("StopSound")
    Parameters:
        - Media
        	ZMedia object containing audio to play
 
- 
    
    ShowStatusText (Text)
    
- 
    Shows status text somewhere.  Not used and not well documented
    Parameters:
        - Text
        	What should be shown to user
 
- 
    
    VectorToZone (point, zone)
    
- 
    Calculates distance from given point to nearest point of given zone
    Parameters:
        - point
        	ZonePoint object as a starting location
- zone
        	Zone object as a destination
 Returns:
        - 
        Distance (object) to nearest point of zone
- 
        Bearing (object) to nearest point of zone
 
- 
    
    VectorToSegment (point, p1, p2)
    
- 
    Calculates distance from given point to nearest point on segment of zone
   defined by two points (p1, p2)
    Parameters:
        - point
        	ZonePoint object as a starting location
- p1
        		ZonePoint, first point of segment
- p2
        		ZonePoint, second point of segment
 Returns:
        - 
        Distance (object) to nearest point of segment
- 
        Bearing (object) to nearest point of segment
 
- 
    
    Inject ()
    
- 
    Unknown purpose
- 
    
    IsPointInZone (point, zone)
    
- 
    Determines whether is given point in given zone using Minimal Bounding
   Box algorithm and then with Cross Count algorithm
    Parameters:
        - point
        	ZonePoint object
- zone
        	Zone object
 Returns:
        True if is point in zone
     
- 
    
    TranslatePoint (point, distance, bearing)
    
- 
    Calculate new position of point, which is translated by given distance
   and with given bearing
    Parameters:
        - point
        		ZonePoint object as a starting point
- distance
        	Distance object
- bearing
        		Bearing object or number to determine direction
 Returns:
        ZonePoint object with new location
     
- 
    
    VectorToPoint (p1, p2)
    
- 
    Calculate distance and bearing from one point to another
    Parameters:
        - p1
        	Starting ZonePoint
- p2
        	Destination ZonePoint
 Returns:
        - 
        Distance object
- 
        Bearing object
 
- 
    
    NoCaseEquals (f, s)
    
- 
    Compare two strings ignoring case
    Parameters:
        - f
        	First string
- s
        	Second string
 Returns:
        True if they equals
     
- 
    
    Command (text)
    
- 
    Sends some command to engine
 Possible values:
		- SaveClose	- Saves cartridges and prompt user to quit
		
- DriveTo		- This should start Turn-by-turn navigation, but it is not used
		
- StopSound	- Stops playing sound in user interface
		
- Alert		- Beep.  Used on Garmins, which can't play sound
    
 Parameters:
- 
    
    LogMessage (Text, Level)
    
- 
    Write message into logfile for opened cartridge
   params can be table
    Parameters:
        - Text
        	Message to log
- Level
        	Level of message
 
- 
    
    GetInput (input)
    
- 
    Request user to fill in input.  Appearance depends on ZInput object
    Parameters:
        - input
        	ZInput object containing data about input appearance
 
- 
    
    _GetInputResponse (response)
    
- 
    Callback of GetInput.  Internal usage only!
   This is called for every GetInput
    Parameters:
        - response
        	User's response (selected button or written string)
 
- 
    
    ShowScreen (screen, item)
    
- 
    Sends request to user interface to show screen
    Parameters:
        - screen
        	Screen name (see constants)
- item
        	For 'DETAILSCREEN' particular ZObject
 
- 
    
    __tonumber (arg)
    
- 
    Conversion function from Distance or Bearing object to number
   used in metamethods to arithmetic and comparisons
    Parameters:
        - arg
        		Number or object to convert
 Returns:
        Number representing Distance in meters or bearing in degrees
     
- 
    
    _callback (event, id)
    
- 
    Execute user command or click event on UI item.  OnClick is simply executed,
   other events On* of commands must be handled with care of command type.
   Internal use only.
    Parameters:
        - event
        	Event name in Commands table, or Click for OnClick event
- id
        		Global id in AllZObjects table
 
- 
    
    _getMediaField (field, t)
    
- 
    Get field with media path in JSON notation for UI.  Internal usa only.
    Parameters:
        - field
        	String "media" or "icon" used as index in JSON
- t
        		Table value to chech and add it exists
 Returns:
        String containing JSON notation of field or empty string if t is nil
     
- 
    
    _addCommands (item)
    
- 
    Get Commands field with array of enabled commands for current object in JSON notation.
   Internal use only!
    Parameters:
        - item
        	ZObject to get commands for
 Returns:
        String containing JSON notation of commands field
     
- 
    
    _bool2str (b)
    
- 
    Convert boolean value to string for JSON notation.  Internal use only!
    Parameters:Returns:
        String value containing true or false
     
- 
    
    _toJSON (str)
    
- 
    Escape string to put in JSON structure.  Just proxy to ignore nil values.
   Internal use only!
    Parameters:Returns:
        Escaped string
     
- 
    
    _getUI ()
    
- 
    Get JSON fields to send to UI, containing all 4 sections, without brackets around,
   so C++ can add more fields.  Internal use only!
    Returns:
        String containing JSON notation of UI data
     
- 
    
    _getLocations ()
    
- 
    Get Locations data in JSON to be send to UI.  Internal use only!
    Returns:
        String containing JSON
     
- 
    
    _getInventory ()
    
- 
    Get Inventory data in JSON to be send to UI.  Internal use only!
    Returns:
        String containing JSON
     
- 
    
    _getYouSee ()
    
- 
    Get YouSee data in JSON to be send to UI.  Internal use only!
    Returns:
        String containing JSON
     
- 
    
    _getTasks ()
    
- 
    Get Tasks data in JSON to be send to UI.  Internal use only!
    Returns:
        String containing JSON
     
Tables
    
    - 
    
    _Internal
    
- 
    Virtual object to execute command with other item, same way as GetInput.
   Internaly substitutes ZInput object.
    Fields:
Class Wherigo.Bearing 
        Object representing a bearing in degrees.
    
    - 
    
    Wherigo.Bearing.metatable
    
- 
    Metatable for Bearing objects.  Implements arithmetic, call and tostring
   as required by cartridges
    Fields:
        - __tostring
        
- __call
        
- __add
        
- __sub
        
- __mul
        
- __div
        
 
- 
    
    Wherigo.Bearing.new (value)
    
- 
    Bearing object constructor.  Number is automatically normalized to interval
   0 - 360 degrees
    Parameters:
        - value
         Numeric value representing bearing in degrees
 Returns:
        Bearing instance
     
Class Wherigo.Distance 
        Object representing distance in meters.
    
    - 
    
    Wherigo.Distance.metatable
    
- 
    Metatable for Distance objects.  Implements arithmetic, comparison, call
   and tostring as required by cartridges
    Fields:
        - __tostring
        
- __call
        
- __eq
        
- __lt
        
- __le
        
- __add
        
- __sub
        
- __mul
        
- __div
        
 
- 
    
    Wherigo.Distance.new (value, units)
    
- 
    Distance object constructor.  Represent distance in meters
    Parameters:
        - value
         Numeric value of distance (required)
- units
         String representation of units in which is value set for conversion, default "meters"
 Returns:
        Distance instance
     
- 
    
    Wherigo.Distance:GetValue (units)
    
- 
    Conversion function to get distance in other units
    Parameters:
        - units
         String representation of units in which you want the result, default "meters"
 Returns:
        Numeric representation of distance in required units
     
Class Wherigo.ZCommand 
        Object representing ZCommand of ZObject.
    
    - 
    
    Wherigo.ZCommand.metatable
    
- 
    Metatable for ZCommand objects.  Implements index, newindex to watch
   Enabled property and tostring
    Fields:
        - __tostring
        
- __index
        
- __newindex
        
 
- 
    
    Wherigo.ZCommand.new (table)
    
- 
    ZCommand object constructor.  Sets allowed combination of parameters
    Parameters:
        - table
         Parameters of command to set
 Returns:
        ZCommand object
     
- 
    
    ZCommand:made (object)
    
- 
    Check membership of given object to class ZCommand
    Parameters:Returns:
        True if object is a member of class
     
Class Wherigo.ZReciprocalCommand 
        ZReciprocalCommand object
    
    - 
    
    Wherigo.ZReciprocalCommand.metatable
    
- 
    Metatable for ZReciprocalCommand objects.  Implements tostring
    Fields:
- 
    
    Wherigo.ZReciprocalCommand.new (table)
    
- 
    ZReciprocalCommand object constructor.  Sets parameters from arguments.
   Not used in runtime.
    Parameters:
        - table
         Parameters of command to set
 Returns:
        ZReciprocalCommand object
     
- 
    
    ZReciprocalCommand:made (object)
    
- 
    Check membership of given object to class ZReciprocalCommand
    Parameters:Returns:
        True if object is a member of class
     
Class Wherigo.ZObject 
        Base object for all next Z* objects.  Implements all common
    
    - 
    
    Wherigo.ZObject.metatable
    
- 
    Metatable for ZObject objects.  Implements index and newindex to keep
   a track of desired properties and to invoke desired actions
    Fields:
- 
    
    Wherigo.ZObject.new (cartridge, container)
    
- 
    ZObject constructor.  Sets default values and parameters of all objects.
   Also can accept table argument with all values to set
    Parameters:
        - cartridge
         ZCartridge object of global cartridge
- container
         Default location of object. Can be moved later by calling Wherigo.ZObject.MoveTo function
 Returns:
        ZObject
     
- 
    
    Wherigo.ZObject:Contains (obj)
    
- 
    Check weather obj is contained in self container (recursive search)
   Special handling for Player and detecting if is in zone.
    Parameters:Returns:
        True if self contains obj
     
- 
    
    Wherigo.ZObject:MoveTo (owner)
    
- 
    Move self object to another container or to nil
    Parameters:
        - owner
         Destination container
 
- 
    
    Wherigo.ZObject:_is_visible ()
    
- 
    Checks if self object is visible to player.  Internal use only!
    Returns:
        True if is object visible
     
- 
    
    Wherigo.ZObject:_get_pos ()
    
- 
    Return position of object.  Recurs into Container property. Internal use only!
    Returns:
        ZonePoint object or nil if is position of object undefined
     
- 
    
    ZObject:made (object)
    
- 
    Check membership of given object to class ZObject
    Parameters:
        - object
         Some object to test
 Returns:
        True if object is a member of class
     
Class Wherigo.ZonePoint 
        ZonePoint object representing geographical point on sphere
    
    - 
    
    Wherigo.ZonePoint.metatable
    
- 
    Metatable for ZonePoint objects.  Implements tostring as required by cartridges
    Fields:
- 
    
    Wherigo.ZonePoint.new (lat, lon, alt)
    
- 
    ZonePoint constructor.  Creates new ZonePoint object defined by geographical
   coordinates and altitude.
    Parameters:
        - lat
        	Latitude
- lon
        	Longitude
- alt
        	Altitude
 Returns:
        ZonePoint object
     
- 
    
    ZonePoint:made (object)
    
- 
    Check membership of given object to class ZonePoint
    Parameters:
        - object
         Some object to test
 Returns:
        True if object is a member of class
     
Class Wherigo.Zone 
        Zone object extends ZObject.  Location, defined with 3 or more ZonePoint.
    
    - 
    
    Wherigo.Zone.metatable
    
- 
    Metatable for ZonePoint objects.  Implements tostring as required by
   cartridges. Other metamethods are inherited from ZObject
    Fields:
- 
    
    Wherigo.Zone.new (cartridge)
    
- 
    Zone constructor, extend ZObject.  Creates new Zone object.
    Parameters:
        - cartridge
        	global cartridge object
 Returns:
        Zone object
     
- 
    
    Wherigo.Zone._calculateBoundingBox ()
    
- 
    Computes minimum bounding rectangle of this zone.  Internal use only!
- 
    
    Zone:made (object)
    
- 
    Check membership of given object to class Zone
    Parameters:
        - object
         Some object to test
 Returns:
        True if object is a member of class
     
- 
    
    Wherigo.Zone._update (v)
    
- 
    Update zone state depending on location update.  Recalculate distance
   and change state if required
    Parameters:Returns:
        True if changed. Unused.
     
Class Wherigo.ZCartridge 
        ZCartridge object extend ZObject.  Global cartridge object to store all
   game data.
    
    - 
    
    Wherigo.ZCartridge.metatable
    
- 
    Metatable for ZCartridge object.  Implements tostring as required by
   cartridges. Other metamethods are inherited from ZObject
    Fields:
- 
    
    Wherigo.ZCartridge.new ()
    
- 
    ZCartridge constructor, extend ZObject.  Creates new ZCartridge object
   and initializes all default values and structures for storing all game data
    Returns:
        ZCartridge object
     
- 
    
    ZCartridge:RequestSync ()
    
- 
    Request cartridge synchronization (store runtime data to file).
   Only accepts the request and waits for the end of lua call stack
   and then stores data.
- 
    
    ZCartridge:GetAllOfType (t)
    
- 
    Request all Z* objects by type
    Parameters:
- 
    
    Wherigo.ZCartridge._update (position, t, accuracy)
    
- 
    Process position update.  Internal use only!
    Parameters:
        - position
        	ZonePoint object with player location
- t
        			Time to update timers
- accuracy
        	GPS position accuracy
 Returns:
        If something changed, request GUI update
     
- 
    
    ZCartridge:made (object)
    
- 
    Check membership of given object to class ZCartridge
    Parameters:
        - object
         Some object to test
 Returns:
        True if object is a member of class
     
Class Wherigo.ZMedia 
        ZMedia object extend ZObject.  Media object with defined resources.
    
    - 
    
    Wherigo.ZMedia.metatable
    
- 
    Metatable for ZMedia objects.  Implements tostring as required by
   cartridges. Other metamethods are inherited from ZObject
    Fields:
- 
    
    Wherigo.ZMedia.new (cartridge)
    
- 
    ZMedia constructor, extend ZObject.  Creates new ZMedia object
   and initializes default values. Parameters can be in table.
    Parameters:
        - cartridge
         ZCartridge object of global cartridge
 Returns:
        ZMedia object
     
- 
    
    ZMedia:made (object)
    
- 
    Check membership of given object to class ZMedia
    Parameters:
        - object
         Some object to test
 Returns:
        True if object is a member of class
     
Class Wherigo.ZItem 
        ZItem object extend ZObject.  Item that can be seen or that can be in
   inventory. This can have also some ZCommands.
    
    - 
    
    Wherigo.ZItem.metatable
    
- 
    Metatable for ZItem objects.  Implements tostring as required by
   cartridges. Other metamethods are inherited from ZObject
    Fields:
- 
    
    Wherigo.ZItem.new (cartridge, container)
    
- 
    ZItem constructor, extend ZObject.  Creates new ZItem object
   and initializes default values. Parameters can be in table.
    Parameters:
        - cartridge
         ZCartridge object of global cartridge
- container
         Default container tu put
 Returns:
        ZItem object
     
- 
    
    ZItem:made (object)
    
- 
    Check membership of given object to class ZItem
    Parameters:
        - object
         Some object to test
 Returns:
        True if object is a member of class
     
Class Wherigo.ZTask 
        ZTask object extends ZObject.  Tasks given to player. Showing or hiding,
   but keeps user in track what to do.
    
    - 
    
    Wherigo.ZTask.metatable
    
- 
    Metatable for ZTask objects.  Implements tostring as required by
   cartridges. Other metamethods are inherited from ZObject
    Fields:
- 
    
    Wherigo.ZTask.new (cartridge, container)
    
- 
    ZTask constructor, extend ZObject.  Creates new ZTask object
   and initializes default values. Parameters can be in table.
   Also keeps track of all tasks to set default SortOrder.
    Parameters:
        - cartridge
         ZCartridge object of global cartridge
- container
         Default location of object. Can be moved later by calling Wherigo.ZObject.MoveTo function
 Returns:
        ZTask object
     
- 
    
    ZTask:made (object)
    
- 
    Check membership of given object to class ZTask
    Parameters:
        - object
         Some object to test
 Returns:
        True if object is a member of class
     
Class Wherigo.ZTimer 
        ZTimer object extends ZObject.  Can invoke action in some time.
    
    - 
    
    Wherigo.ZTimer.metatable
    
- 
    Metatable for ZTask objects.  Implements tostring as required by
   cartridges. Other metamethods are inherited from ZObject
    Fields:
- 
    
    Wherigo.ZTimer.new (cartridge)
    
- 
    ZTimer constructor, extend ZObject.  Creates new ZTimer object
   and initializes default values. Parameters can be in table.
    Parameters:
        - cartridge
         ZCartridge object of global cartridge
 Returns:
        ZTimer object
     
- 
    
    ZTimer:Start ()
    
- 
    Starts timer (countdown) and execute attached event
- 
    
    ZTimer:Stop ()
    
- 
    Stops this timer and execute attached event
- 
    
    ZTimer:Tick ()
    
- 
    Timer expired.  Desired action is executed and timer reset.
   if type is interval, then it starts again
- 
    
    ZTimer:made (object)
    
- 
    Check membership of given object to class ZTimer
    Parameters:
        - object
         Some object to test
 Returns:
        True if object is a member of class
     
- 
    
    Wherigo.ZTimer._Tick (id)
    
- 
    Internaly used function to call from C API.
   Calls desired Tick event by given id in AllZObjects table
    Parameters:
        - id
        	ID from AllZobjects table
 
Class Wherigo.ZInput 
        ZInput object extends ZObject.  Request input from user. Can be text or
   multiple choice
    
    - 
    
    Wherigo.ZInput.metatable
    
- 
    Metatable for ZInput objects.  Implements tostring as required by
   cartridges. Other metamethods are inherited from ZObject
    Fields:
- 
    
    Wherigo.ZInput.new (cartridge)
    
- 
    Zinput constructor, extend ZObject.  Creates new Zinput object
   and initializes default values. Parameters can be in table.
    Parameters:
        - cartridge
         ZCartridge object of global cartridge
 Returns:
        ZTimer object
     
- 
    
    ZInput:made (object)
    
- 
    Check membership of given object to class ZInput
    Parameters:
        - object
         Some object to test
 Returns:
        True if object is a member of class
     
Class Wherigo.ZCharacter 
        ZCharacter object extends ZObject.  Player or other character to be seen in
   inventory or in nearby zones.
    
    - 
    
    Wherigo.ZCharacter.metatable
    
- 
    Metatable for ZCharacter objects.  Implements tostring as required by
   cartridges. Other metamethods are inherited from ZObject
    Fields:
- 
    
    Wherigo.ZCharacter.new (cartridge, container)
    
- 
    ZCharacter constructor, extend ZObject.  Creates new ZCharacter object
   and initializes default values. Parameters can be in table.
    Parameters:
        - cartridge
         ZCartridge object of global cartridge
- container
         Default container for character
 Returns:
        ZCharacter object
     
- 
    
    ZCharacter:made (object)
    
- 
    Check membership of given object to class ZCharacter
    Parameters:
        - object
         Some object to test
 Returns:
        True if object is a member of class
     
Class Wherigo.Player 
        Global object representing player as ZCharacter with position.
    
    - 
    
    Player:RefreshLocation ()
    
- 
    Request new position update for special application.  Required by some
   cartridges. There is not implemented since I can't see point in it.
- 
    
    Wherigo.Player._removeFromZone (zone)
    
- 
    Remove zone from InsideOfZones table of Player.  Required for runtime
   for some cartridges and used for savegame. Internal use only!
    Parameters:
        - zone
         Zone object to remove