85 lines
2.4 KiB
JavaScript
85 lines
2.4 KiB
JavaScript
|
// adapted from populateModels.js in neohabitat
|
||
|
|
||
|
const replacements = [
|
||
|
[/UP/g, '"|"'],
|
||
|
[/DOWN/g, '"}"'],
|
||
|
[/LEFT/g, '"~"'],
|
||
|
[/RIGHT/g, '"\u007f"'],
|
||
|
[/SPACE/g, '" "'],
|
||
|
[/WEST/g, '0'],
|
||
|
[/SOUTH/g, '1'],
|
||
|
[/EAST/g, '2'],
|
||
|
[/NORTH/g, '3']
|
||
|
];
|
||
|
|
||
|
const joinReplacements = {
|
||
|
UP: '|',
|
||
|
DOWN: '}',
|
||
|
LEFT: '~',
|
||
|
RIGHT: '\u007f',
|
||
|
SPACE: ' ',
|
||
|
WEST: '0',
|
||
|
SOUTH: '1',
|
||
|
EAST: '2',
|
||
|
NORTH: '3'
|
||
|
};
|
||
|
|
||
|
const replacementJoinRegex = /((([A-Z]+\s?\+\s?)+)([A-Z]+\s?)+)/;
|
||
|
const stringJoinRegex = /(("([^"]|\\")*"\s*\+\s*)+"([^"]|\\")*")/g;
|
||
|
|
||
|
function templateStringJoins(data) {
|
||
|
if (data.search(/\+/) != -1) {
|
||
|
return data.replace(/(\n)/g, '').replace(stringJoinRegex,
|
||
|
function(origText, offset, string) {
|
||
|
var replacementText = [];
|
||
|
var splitText = origText.split('+');
|
||
|
for (var textLineId in splitText) {
|
||
|
var trimTextLine = splitText[textLineId].trim();
|
||
|
var quotesRemoved = trimTextLine.replace(/(^")|("$)/g, '');
|
||
|
replacementText.push(quotesRemoved);
|
||
|
}
|
||
|
return '"{0}"'.format(replacementText.join(''));
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
return data;
|
||
|
}
|
||
|
|
||
|
function templateConstantJoins(data) {
|
||
|
return data.replace(replacementJoinRegex, function(origText, offset, string) {
|
||
|
var replacementText = [];
|
||
|
var splitText = origText.split('+');
|
||
|
for (var habConstId in splitText) {
|
||
|
var trimHabConst = splitText[habConstId].trim();
|
||
|
if (trimHabConst in joinReplacements) {
|
||
|
replacementText.push(joinReplacements[trimHabConst]);
|
||
|
}
|
||
|
}
|
||
|
return '"{0}"'.format(replacementText.join(''));
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function templateHabitatObject(data) {
|
||
|
var templated = templateConstantJoins(data);
|
||
|
for (var replacementId in replacements) {
|
||
|
var replacement = replacements[replacementId];
|
||
|
var regex = replacement[0];
|
||
|
var replacementText = replacement[1];
|
||
|
templated = templated.replace(regex, replacementText);
|
||
|
}
|
||
|
return templateStringJoins(templated);
|
||
|
}
|
||
|
|
||
|
export function parseHabitatObject(data) {
|
||
|
return JSON.parse(templateHabitatObject(data))
|
||
|
}
|
||
|
|
||
|
export function colorsFromOrientation(orientation) {
|
||
|
const colorVal = (orientation & 0x78) >> 3
|
||
|
if (orientation & 0x80) {
|
||
|
return { wildcard: colorVal }
|
||
|
} else {
|
||
|
return { pattern: colorVal }
|
||
|
}
|
||
|
}
|