Dev console finds materials by display name from the real material table (t82)
This commit is contained in:
+11
-5
@@ -26,7 +26,13 @@ function devError(text) { return Object.assign([text], { error: true }); }
|
||||
function devName(text) { return text.toLowerCase().replace(/\s+/g, ''); }
|
||||
function devGiveable(id) { return id !== EMPTY && PH[id] !== PH_GAS && (PH[id] !== PH_SOLID || !!YLD[id]); }
|
||||
function devMaterialList(text = '') {
|
||||
return Object.entries(DEV_MATERIALS).filter(([key, id]) => devGiveable(id) && (devName(key).includes(devName(text)) || devName(MD[id].name).includes(devName(text))));
|
||||
const keys = new Map(Object.entries(DEV_MATERIALS).map(([key, id]) => [id, key]));
|
||||
const list = [], name = devName(text);
|
||||
for (let id = 1; id < NMAT; id++) {
|
||||
const key = keys.get(id) || '';
|
||||
if (devGiveable(id) && (devName(key).includes(name) || devName(MD[id].name).includes(name))) list.push([key, id]);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
// Edit distance is only used on a console error, never in the simulation tick.
|
||||
function devDistance(a, b) {
|
||||
@@ -83,12 +89,12 @@ function devComplete(text, previous) {
|
||||
const DEV_MATERIALS = { EMPTY, GRASS, DIRT, LDIRT, SAND, GRAVEL, CLAY, STONE, GRANITE, BASALT, WOOD, LEAVES, COALV, COAL, CUV, CUORE, FEV, FEORE, ASH, SLAG, BRICK, GLASS, COPPER, IRON, STEEL, WATER, MAGMA, MCU, MFE, MST, MGL, STEAM, SMOKE, FIRE, BELTL, BELTR, SHAFT, GATE, HULL, SPRING, RSTONE, RGRAN, RBAS, LCLAY, LWOOD, RBRICK, CULLET, SCRCU, SCRFE, SCRST, BARCU, BARFE, BARST, ACORN, CHARCOAL, SNOW, ICE, SNV, SNORE, TIN, MSN, SCRSN, BARSN, ZNV, ZNORE, ZINC, MZN, SCRZN, BARZN, AGV, AGORE, SILVER, MAG, SCRAG, BARAG, AUV, AUORE, GOLD, MAU, SCRAU, BARAU, BRONZE, MBZ, SCRBZ, BARBZ, BRASS, MBS, SCRBS, BARBS, DOCKW, MSLAG, PIPE, BARGL, CUTST, BARSB, GRINDER, SAWB, PLANK, PRESSB, GREENB, BARBR, RACKB };
|
||||
function devMaterial(name) {
|
||||
name = devName(name);
|
||||
const ids = Object.entries(DEV_MATERIALS);
|
||||
const internal = ids.find(([key]) => devName(key) === name);
|
||||
const internal = Object.entries(DEV_MATERIALS).find(([key]) => devName(key) === name);
|
||||
if (internal) return internal[1];
|
||||
const ids = devMaterialList();
|
||||
const exact = ids.filter(([, id]) => devName(MD[id].name) === name);
|
||||
const matches = [...new Set((exact.length ? exact : ids.filter(([key, id]) => devName(key).startsWith(name) || devName(MD[id].name).startsWith(name))).map(([, id]) => id))];
|
||||
return matches.length === 1 ? matches[0] : matches.length ? `Ambiguous material: ${matches.map(id => MD[id].name + ' (' + ids.find(([, m]) => m === id)[0] + ')').join(', ')}.` : 'Unknown material. Did you mean: ' + devSuggestions(name) + '? Use materials to list names.';
|
||||
return matches.length === 1 ? matches[0] : matches.length ? `Ambiguous material: ${matches.map(id => { const key = ids.find(([, m]) => m === id)[0]; return MD[id].name + (key ? ' (' + key + ')' : ''); }).join(', ')}.` : 'Unknown material. Did you mean: ' + devSuggestions(name) + '? Use materials to list names.';
|
||||
}
|
||||
function devCommand(text, cursor) {
|
||||
if (typeof text !== 'string' || !text.trim()) return ['Type help to list commands.'];
|
||||
@@ -105,7 +111,7 @@ function devCommand(text, cursor) {
|
||||
return ['Usage: ' + def[0], 'Example: ' + def[1]];
|
||||
}
|
||||
if (cmd === 'materials') {
|
||||
const lines = devMaterialList(args.join(' ')).map(([key, id]) => MD[id].name + ' (' + key + ')');
|
||||
const lines = devMaterialList(args.join(' ')).map(([key, id]) => MD[id].name + (key ? ' (' + key + ')' : ''));
|
||||
return lines.length ? lines : ['No matching materials.'];
|
||||
}
|
||||
if (cmd === 'clear') return args.length ? usage() : Object.assign([], { clear: true });
|
||||
|
||||
Reference in New Issue
Block a user