|
|
@ -11,19 +11,20 @@ export const enumColors = {
|
|
|
|
white: "white",
|
|
|
|
white: "white",
|
|
|
|
uncolored: "uncolored",
|
|
|
|
uncolored: "uncolored",
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
const c = enumColors;
|
|
|
|
|
|
|
|
|
|
|
|
/** @enum {string} */
|
|
|
|
/** @enum {string} */
|
|
|
|
export const enumColorToShortcode = {
|
|
|
|
export const enumColorToShortcode = {
|
|
|
|
[enumColors.red]: "r",
|
|
|
|
[c.red]: "r",
|
|
|
|
[enumColors.green]: "g",
|
|
|
|
[c.green]: "g",
|
|
|
|
[enumColors.blue]: "b",
|
|
|
|
[c.blue]: "b",
|
|
|
|
|
|
|
|
|
|
|
|
[enumColors.yellow]: "y",
|
|
|
|
[c.yellow]: "y",
|
|
|
|
[enumColors.purple]: "p",
|
|
|
|
[c.purple]: "p",
|
|
|
|
[enumColors.cyan]: "c",
|
|
|
|
[c.cyan]: "c",
|
|
|
|
|
|
|
|
|
|
|
|
[enumColors.white]: "w",
|
|
|
|
[c.white]: "w",
|
|
|
|
[enumColors.uncolored]: "u",
|
|
|
|
[c.uncolored]: "u",
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/** @enum {enumColors} */
|
|
|
|
/** @enum {enumColors} */
|
|
|
@ -34,131 +35,41 @@ for (const key in enumColorToShortcode) {
|
|
|
|
|
|
|
|
|
|
|
|
/** @enum {string} */
|
|
|
|
/** @enum {string} */
|
|
|
|
export const enumColorsToHexCode = {
|
|
|
|
export const enumColorsToHexCode = {
|
|
|
|
[enumColors.red]: "#ff666a",
|
|
|
|
[c.red]: "#ff666a",
|
|
|
|
[enumColors.green]: "#78ff66",
|
|
|
|
[c.green]: "#78ff66",
|
|
|
|
[enumColors.blue]: "#66a7ff",
|
|
|
|
[c.blue]: "#66a7ff",
|
|
|
|
|
|
|
|
|
|
|
|
// red + green
|
|
|
|
// red + green
|
|
|
|
[enumColors.yellow]: "#fcf52a",
|
|
|
|
[c.yellow]: "#fcf52a",
|
|
|
|
|
|
|
|
|
|
|
|
// red + blue
|
|
|
|
// red + blue
|
|
|
|
[enumColors.purple]: "#dd66ff",
|
|
|
|
[c.purple]: "#dd66ff",
|
|
|
|
|
|
|
|
|
|
|
|
// blue + green
|
|
|
|
// blue + green
|
|
|
|
[enumColors.cyan]: "#00fcff",
|
|
|
|
[c.cyan]: "#00fcff",
|
|
|
|
|
|
|
|
|
|
|
|
// blue + green + red
|
|
|
|
// blue + green + red
|
|
|
|
[enumColors.white]: "#ffffff",
|
|
|
|
[c.white]: "#ffffff",
|
|
|
|
|
|
|
|
|
|
|
|
[enumColors.uncolored]: "#aaaaaa",
|
|
|
|
[c.uncolored]: "#aaaaaa",
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const c = enumColors;
|
|
|
|
|
|
|
|
/** @enum {Object.<string, string>} */
|
|
|
|
/** @enum {Object.<string, string>} */
|
|
|
|
export const enumColorMixingResults = {
|
|
|
|
export const enumColorMixingResults = {};
|
|
|
|
// 255, 0, 0
|
|
|
|
|
|
|
|
[c.red]: {
|
|
|
|
const bitfieldToColor = [
|
|
|
|
[c.green]: c.yellow,
|
|
|
|
/* 000 */ c.uncolored,
|
|
|
|
[c.blue]: c.purple,
|
|
|
|
/* 001 */ c.red,
|
|
|
|
|
|
|
|
/* 010 */ c.green,
|
|
|
|
[c.yellow]: c.yellow,
|
|
|
|
/* 011 */ c.yellow,
|
|
|
|
[c.purple]: c.purple,
|
|
|
|
/* 100 */ c.blue,
|
|
|
|
[c.cyan]: c.white,
|
|
|
|
/* 101 */ c.purple,
|
|
|
|
|
|
|
|
/* 110 */ c.cyan,
|
|
|
|
[c.white]: c.white,
|
|
|
|
/* 111 */ c.white,
|
|
|
|
},
|
|
|
|
];
|
|
|
|
|
|
|
|
for (let i = 0; i < 1 << 3; ++i) {
|
|
|
|
// 0, 255, 0
|
|
|
|
enumColorMixingResults[bitfieldToColor[i]] = {};
|
|
|
|
[c.green]: {
|
|
|
|
for (let j = 0; j < 1 << 3; ++j) {
|
|
|
|
[c.blue]: c.cyan,
|
|
|
|
enumColorMixingResults[bitfieldToColor[i]][bitfieldToColor[j]] = bitfieldToColor[i | j];
|
|
|
|
|
|
|
|
|
|
|
|
[c.yellow]: c.yellow,
|
|
|
|
|
|
|
|
[c.purple]: c.white,
|
|
|
|
|
|
|
|
[c.cyan]: c.cyan,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[c.white]: c.white,
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 0, 255, 0
|
|
|
|
|
|
|
|
[c.blue]: {
|
|
|
|
|
|
|
|
[c.yellow]: c.white,
|
|
|
|
|
|
|
|
[c.purple]: c.purple,
|
|
|
|
|
|
|
|
[c.cyan]: c.cyan,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[c.white]: c.white,
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 255, 255, 0
|
|
|
|
|
|
|
|
[c.yellow]: {
|
|
|
|
|
|
|
|
[c.purple]: c.white,
|
|
|
|
|
|
|
|
[c.cyan]: c.white,
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 255, 0, 255
|
|
|
|
|
|
|
|
[c.purple]: {
|
|
|
|
|
|
|
|
[c.cyan]: c.white,
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 0, 255, 255
|
|
|
|
|
|
|
|
[c.cyan]: {},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//// SPECIAL COLORS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 255, 255, 255
|
|
|
|
|
|
|
|
[c.white]: {
|
|
|
|
|
|
|
|
// auto
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// X, X, X
|
|
|
|
|
|
|
|
[c.uncolored]: {
|
|
|
|
|
|
|
|
// auto
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Create same color lookups
|
|
|
|
|
|
|
|
for (const color in enumColors) {
|
|
|
|
|
|
|
|
enumColorMixingResults[color][color] = color;
|
|
|
|
|
|
|
|
enumColorMixingResults[color][c.white] = c.white;
|
|
|
|
|
|
|
|
// Anything with uncolored is the same color
|
|
|
|
|
|
|
|
enumColorMixingResults[color][c.uncolored] = color;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Create reverse lookup and check color mixing lookups
|
|
|
|
|
|
|
|
for (const colorA in enumColorMixingResults) {
|
|
|
|
|
|
|
|
for (const colorB in enumColorMixingResults[colorA]) {
|
|
|
|
|
|
|
|
const resultColor = enumColorMixingResults[colorA][colorB];
|
|
|
|
|
|
|
|
if (!enumColorMixingResults[colorB]) {
|
|
|
|
|
|
|
|
enumColorMixingResults[colorB] = {
|
|
|
|
|
|
|
|
[colorA]: resultColor,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
const existingResult = enumColorMixingResults[colorB][colorA];
|
|
|
|
|
|
|
|
if (existingResult && existingResult !== resultColor) {
|
|
|
|
|
|
|
|
assertAlways(
|
|
|
|
|
|
|
|
false,
|
|
|
|
|
|
|
|
"invalid color mixing configuration, " +
|
|
|
|
|
|
|
|
colorA +
|
|
|
|
|
|
|
|
" + " +
|
|
|
|
|
|
|
|
colorB +
|
|
|
|
|
|
|
|
" is " +
|
|
|
|
|
|
|
|
resultColor +
|
|
|
|
|
|
|
|
" but " +
|
|
|
|
|
|
|
|
colorB +
|
|
|
|
|
|
|
|
" + " +
|
|
|
|
|
|
|
|
colorA +
|
|
|
|
|
|
|
|
" is " +
|
|
|
|
|
|
|
|
existingResult
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
enumColorMixingResults[colorB][colorA] = resultColor;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (const colorA in enumColorMixingResults) {
|
|
|
|
|
|
|
|
for (const colorB in enumColorMixingResults) {
|
|
|
|
|
|
|
|
if (!enumColorMixingResults[colorA][colorB]) {
|
|
|
|
|
|
|
|
assertAlways(false, "Color mixing of", colorA, "with", colorB, "is not defined");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|