Here's an example in use:
var bshields = bshields || {};
bshields.Collision = (function() {
'use strict';
var version = 2.2,
behaviors = {
DONT_MOVE: 1,
WARN_PLAYER: 2,
STOP_AT_WALL: 4
},
config = {},
configDefaults = {
pathColor: '#ff00ff',
layer: 'walls',
behavior: behaviors.STOP_AT_WALL | behaviors.WARN_PLAYER
};
Object.defineProperties(config, {
pathColor: {
get: function() {
var stPathColor = state.bshields.Collision.config.pathColor;
if (/* stPathColor has an invalid value */) return configDefaults.pathColor;
/* ensure stPathColor is in correct format */
return stPathColor;
}
},
layer: {
get: function() {
var stLayer = state.bshields.Collision.config.layer;
if (/* stLayer has an invalid value */) return configDefaults.layer;
return stLayer;
}
},
behavior: {
get: function() {
var stBehavior = state.bshields.Collision.config.behavior;
if (!stBehavior) return configDefaults.behavior;
/* map string value stBehavior to integer return value */
}
}
});
// script contents
// config.pathColor, config.layer, and config.behavior are referenced
function checkInstall() {
if (!state.bshields ||
!state.bshields.Collision ||
!state.bshields.Collision.version ||
state.bshields.Collision.version !== version) {
state.bshields = state.bshields || {};
state.bshields.Collision = {
version: version,
gcUpdated: 0,
config: {}
};
}
checkGlobalConfig();
}
function checkGlobalConfig() {
var gc = globalconfig && globalconfig.collisiondetection,
st = state.bshields.Collision;
if (gc && gc.lastsaved && gc.lastsaved > st.gcUpdated) {
st.gcUpdated = gc.lastsaved;
st.config.pathColor = gc['Path Color'];
st.config.layer = gc.Layer;
st.config.behavior = gc.Behavior;
}
}
return {
checkInstall: checkInstall,
registerEventHandlers: registerEventHandlers
};
}());
on('ready', function() {
'use strict';
bshields.Collision.checkInstall();
bshields.Collision.registerEventHandlers();
});
"useroptions": [
{
"name": "Path Color",
"type": "text",
"default": "#ff00ff",
"description": ...
},
{
"name": "Layer",
"type": "select",
"options": ["all", "walls", "gmlayer", "objects", "map"],
"default": "walls",
"description": ...
},
{
"name": "Behavior",
"type": "select",
"options": ["Don't Move", "Warn Player", "Stop at Wall", "Don't Move & Warn Player", "Warn Player & Stop at Wall"],
"default": "Warn Player & Stop at Wall",
"description": ...
}],
The above script doesn't do it, but the gc.lastsaved check also lets you modify values in-play without overwriting them whenever you reload, while still overwriting them if you change the user options.