// string_lookup.js
(function() {
/*global adventurejs A*/
"use strict";
var p = adventurejs.Dictionary.prototype;
/**
* A lookup table for strings to describe ranges, such as temperature.
* @var {Object} adventurejs.Dictionary#string_lookup
* @default {}
*/
p.string_lookup =
{
/**
* Lookup table for prepositions that describe Aspects.
* @var {Object} adventurejs.Dictionary#string_lookup.prepositions
* @todo add ability to set new prepositions?
* @todo revisit - is this needed? not currently using but can see case for 'attached to'
*/
prepositions:
{
"attached": "attached to",
"behind": "behind",
"in": "in",
"on": "on",
"over": "over",
"through": "through",
"under": "under",
"worn": "worn", /* experimental */
},
/**
* Lookup table for strings that describe the player's position.
* @var {Object} adventurejs.Dictionary#string_lookup#positions
*/
posture_positions:
{
"default": "resting",
"resting": "resting",
"lying": "lying",
"sitting": "sitting",
"standing": "standing",
"hanging": "hanging",
"suspended": "suspended",
"floating": "floating",
"tied": "tied",
},
/**
* Lookup table for strings that provide a gerund
* to describe the player's current posture.
* @var {Object} adventurejs.Dictionary#string_lookup#posture_gerunds
*/
posture_gerunds:
{
"climb":"climbing",
"cling":"clinging",
"crawl":"crawling",
"float":"floating",
"fly":"flying",
"hang":"hanging",
"hover":"hovering",
"kneel":"kneeling",
"lie":"lying",
"sit":"sitting",
"slither":"slithering",
"stand":"standing",
"swim":"swimming",
},
/**
* Lookup table for strings that provide a gerund
* to describe the player's movement.
* @var {Object} adventurejs.Dictionary#string_lookup#movement_gerunds
*/
movement_verbs:
{
"climb":"climb",
"cling":"shinny",
"crawl":"crawl",
"float":"float",
"fly":"fly",
"hang":"hang",
"hover":"hover",
"kneel":"crawl",
"lie":"belly crawl",
"sit":"scoot",
"slither":"slither",
"stand":"walk",
"swim":"swim",
},
/**
* Lookup table for strings that describe how full of
* {@link adventurejs.Substance|Substance} is a
* {@link adventurejs.Vessel|Vessel}.
* @var {Object} adventurejs.Dictionary#string_lookup#substance_percents
*/
substance_percents:
{
"0" : "empty",
"0.0" : "empty",
"0.1" : "slightly full",
"0.2" : "about a quarter full",
"0.3" : "about a third full",
"0.4" : "almost half full",
"0.5" : "half full",
"0.6" : "slightly over half full",
"0.7" : "about three quarters full",
"0.8" : "mostly full",
"0.9" : "about full",
"1.0" : "full",
"1" : "full",
},
/**
* Lookup table for strings that describe temperature of
* {@link adventurejs.Substance|Substance} in a
* {@link adventurejs.Vessel|Vessel}.
* @var {Object} adventurejs.Dictionary#string_lookup#substance_temperatures
*/
substance_temperatures:
{
"0" : "freezing",
"5" : "near freezing",
"10" : "chilled",
"14" : "cold",
"17" : "cool",
"20" : "tepid",
"23" : "lukewarm",
"40" : "warm",
"60" : "hot",
"85" : "scalding",
"90" : "near boiling",
"100" : "boiling",
},
}
/**
*
* @memberOf adventurejs.Dictionary
* @method adventurejs.Dictionary#getStringLookup
* @param {string} type The type to look up, ie "prepositions"
* or "posture_gerunds".
* @param {string} value The value to look up, ie "standing" or "0.1".
* @returns {string}
*/
p.getStringLookup = function Dictionary_getStringLookup( type, value )
{
var see = "See adventurejs.Dictionary.html#getStringLookup. ";
if( "string" !== typeof type )
{
var msg = "Dictionary.getStringLookup received a non-string for type. "
+ see;
this.game.log("warn","critical",msg, 'dictionary' );
return '';
}
if( "string" !== typeof value )
{
var msg = "Dictionary.getStringLookup received a non-string for "
+ type
+ "value. "
+ see;
this.game.log("warn","critical",msg, 'dictionary' );
return '';
}
if( "undefined" === typeof this.string_lookup[type] )
{
var msg = "Dictionary.getStringLookup received a non-existent type: "
+ type
+ ". "
+ see;
this.game.log("warn","critical",msg, 'dictionary' );
return '';
}
if( "undefined" === typeof this.string_lookup[type][value] )
{
var msg = "Dictionary.getStringLookup received a non-existent value of "
+ type
+ ": "
+ value
+ ". "
+ see;
this.game.log("warn","critical",msg, 'dictionary' );
return '';
}
return this.string_lookup[type][value];
}
/**
*
* @memberOf adventurejs.Dictionary
* @method adventurejs.Dictionary#setStringLookup
* @param {string} type The type to set, ie "prepositions"
* or "posture_gerunds".
* @param {object} values An object containing values to set,
* ie {"standing":"standing up"} or {"0":"empty","1":"full"}.
* @returns {boolean}
*/
p.setStringLookup = function Dictionary_setStringLookup( type, values )
{
var see = "See adventurejs.Dictionary.html#setStringLookup. ";
if( "string" !== typeof type )
{
var msg = "Dictionary.setStringLookup received a non-string for type. "
+ see;
this.game.log("warn","critical",msg, 'dictionary' );
return false;
}
if( "object" !== typeof values )
{
var msg = "Dictionary.getStringLookup received a non-object for "
+ type
+ " values. "
+ see;
this.game.log("warn","critical",msg, 'dictionary' );
//console.warn( 'a' );
return false;
}
if( "undefined" === typeof this.string_lookup[type] )
{
this.string_lookup[type] = {};
var msg = "Dictionary.getStringLookup received a non-existent type: "
+ type
+ ". adventurejs will try to add this type. "
+ see;
this.game.log("warn","critical",msg, 'dictionary' );
}
var valuekeys = Object.keys(values);
for(var v=0; v<valuekeys.length; v++)
{
var valuekey = valuekeys[v];
this.string_lookup[type][valuekey] = values[valuekey];
}
msg = "Dictionary.setStringLookup: " + JSON.stringify(this.string_lookup[type]);
this.game.log( "log", "high", msg , 'dictionary' );
return true;
}
/*
// this sorts by value
var list = {"you": 100, "me": 75, "foo": 116, "bar": 15};
keysSorted = Object.keys(list).sort(function(a,b){return list[a]-list[b]})
console.log(keysSorted);
// this sorts by key
var list = {"100": "you", "75":"me", "116":"foo", "15":"bar"};console.log("Object.keys(list): " + Object.keys(list));
keysSorted = Object.keys(list).sort(function(a,b){return a-b})
console.log("keysSorted: " + keysSorted);
*/
/**
*
* @memberOf adventurejs.Dictionary
* @method adventurejs.Dictionary#getStringLookupByRange
* @param {string} type The type to look up, ie "prepositions"
* or "posture_gerunds".
* @param {string|number} value The numerical value to look up, ie "70" or "0.1".
* @returns {string}
*/
p.getStringLookupByRange = function Dictionary_getStringLookupByRange( type, value )
{
var see = "See adventurejs.Dictionary.html#getStringLookupByRange. ";
var str_return = '';
var keysSorted;
if( "string" !== typeof type )
{
var msg = "Dictionary.getStringLookupByRange received a non-string for type. "
+ see;
this.game.log("warn","critical",msg, 'dictionary' );
}
if( isNaN(value) )
{
var msg = "Dictionary.getStringLookupByRange received a non-numerical value for "
+ type
+ " value. "
+ see;
this.game.log("warn","critical",msg, 'dictionary' );
}
if( "undefined" === typeof this.string_lookup[type] )
{
var msg = "Dictionary.getStringLookup received a non-existent type: "
+ type
+ ". "
+ see;
this.game.log("warn","critical",msg, 'dictionary' );
return '';
}
keysSorted = Object.keys( this.string_lookup[type] ).sort(function(a,b){return a-b});
for(var i = 0; i < keysSorted.length; i++)
{
if( Number(value) >= keysSorted[i] )
{
str_return = this.string_lookup[type][keysSorted[i]];
}
}
return str_return;
}
}());