Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/public/simulation/helpers/Resources.js
/** | /** | ||||
* Builds a RelaxRNG schema based on currently valid elements. | * Builds a RelaxRNG schema based on currently valid elements. | ||||
* | * | ||||
* To prevent validation errors, disabled resources are included in the schema. | * To prevent validation errors, disabled resources are included in the schema. | ||||
* | * | ||||
* @param datatype - The datatype of the element | * @param datatype - The datatype of the element | ||||
* @param additional - Array of additional data elements. Time, xp, treasure, etc. | * @param additional - Array of additional data elements. Time, xp, etc. | ||||
* @param subtypes - If true, resource subtypes will be included as well. | * @param subtypes - If true, resource subtypes will be included as well. | ||||
* @return RelaxNG schema string | * @return RelaxNG schema string | ||||
*/ | */ | ||||
Resources.prototype.BuildSchema = function(datatype, additional = [], subtypes = false) | Resources.prototype.BuildSchema = function(datatype, additional = [], subtypes = false) | ||||
{ | { | ||||
if (!datatype) | if (!datatype) | ||||
return ""; | return ""; | ||||
Show All 26 Lines | for (let res of this.resourceData) | ||||
for (let subtype in res.subtypes) | for (let subtype in res.subtypes) | ||||
schema += | schema += | ||||
"<optional>" + | "<optional>" + | ||||
"<element name='" + res.code + "." + subtype + "'>" + | "<element name='" + res.code + "." + subtype + "'>" + | ||||
datatype + | datatype + | ||||
"</element>" + | "</element>" + | ||||
"</optional>"; | "</optional>"; | ||||
if (additional.indexOf("treasure") !== -1) | |||||
for (let res of resCodes) | |||||
schema += | |||||
"<optional>" + | |||||
"<element name='" + "treasure." + res + "'>" + | |||||
datatype + | |||||
"</element>" + | |||||
"</optional>"; | |||||
return "<interleave>" + schema + "</interleave>"; | return "<interleave>" + schema + "</interleave>"; | ||||
}; | }; | ||||
/** | /** | ||||
* Builds the value choices for a RelaxNG `<choice></choice>` object, based on currently valid resources. | * Builds the value choices for a RelaxNG `<choice></choice>` object, based on currently valid resources. | ||||
* | * | ||||
* @oaram subtypes - If set to true, the choices returned will be resource subtypes, rather than main types | * @oaram subtypes - If set to true, the choices returned will be resource subtypes, rather than main types | ||||
* @param treasure - If set to true, the pseudo resource 'treasure' (or its subtypes) will be included | |||||
* @return String of RelaxNG Schema `<choice/>` values. | * @return String of RelaxNG Schema `<choice/>` values. | ||||
*/ | */ | ||||
Resources.prototype.BuildChoicesSchema = function(subtypes = false, treasure = false) | Resources.prototype.BuildChoicesSchema = function(subtypes = false) | ||||
{ | { | ||||
let schema = ""; | let schema = ""; | ||||
if (!subtypes) | if (!subtypes) | ||||
{ | { | ||||
let resCodes = this.resourceData.map(resource => resource.code); | let resCodes = this.resourceData.map(resource => resource.code); | ||||
if (treasure) | |||||
resCodes.push("treasure"); | |||||
for (let res of resCodes) | for (let res of resCodes) | ||||
Stan: inline? | |||||
schema += "<value>" + res + "</value>"; | schema += "<value>" + res + "</value>"; | ||||
} | } | ||||
else | else | ||||
for (let res of this.resourceData) | for (let res of this.resourceData) | ||||
{ | |||||
for (let subtype in res.subtypes) | for (let subtype in res.subtypes) | ||||
schema += "<value>" + res.code + "." + subtype + "</value>"; | schema += "<value>" + res.code + "." + subtype + "</value>"; | ||||
if (treasure) | |||||
schema += "<value>" + "treasure." + res.code + "</value>"; | |||||
} | |||||
return "<choice>" + schema + "</choice>"; | return "<choice>" + schema + "</choice>"; | ||||
}; | }; | ||||
Resources = new Resources(); | Resources = new Resources(); |
Wildfire Games · Phabricator
inline?