import GlobalEvents from "/app/js/EventCaller.js"; import {NESPalette} from "/app/js/NESPalette.js"; const ATTRIB_NESIDX = "nesidx"; // The two attributes below MUST BOTH be in the element. const ATTRIB_PALIDX = "palidx"; // This is the palette index (0 - 3 (Tiles) 4 - 7 (Sprites)) const ATTRIB_COLIDX = "palcolidx"; // This is the color index in the selected palette (0 - 3) var Active_Palette_Index = 0; var Active_Color_Index = 0; function InvertRGB(hex){ var h = (255 - parseInt(hex, 16)).toString(16); return (h.length < 2) ? "0" + h : h; } function InvertColor(chex, bw){ bw = (bw === true); if (chex.indexOf("#") === 0){ chex = chex.slice(1); } if (chex.length === 3){ chex = chex[0] + chex[0] + chex[1] + chex[1] + chex[2] + chex[2]; } if (chex.length !== 6){ throw new ValueError("Hex color expected to be 3 or 6 characters long."); } if (bw) { var r = parseInt(chex.slice(0, 2), 16); var g = parseInt(chex.slice(2, 4), 16); var b = parseInt(chex.slice(4, 6), 16); // http://stackoverflow.com/a/3943023/112731 return (r * 0.299 + g * 0.587 + b * 0.114) > 186 ? '#000000' : '#FFFFFF'; } return "#" + InvertRGB(chex.slice(0, 2)) + InvertRGB(chex.slice(2, 4)) + InvertRGB(chex.slice(4, 6)); } class CTRLPalettes{ constructor(){ this.__NESPalette = null; this.__pi = 0; // Palette index. this.__ci = 0; // Palette color index. var self = this; var handle_syspalette_clicked = function(event){ if (this.hasAttribute(ATTRIB_NESIDX)){ var idx = parseInt(this.getAttribute(ATTRIB_NESIDX), 16); if (idx >= 0 && idx < NESPalette.SystemColor.length){ console.log(idx); // TODO: Set a selected Tile/Sprite palette index to the color index clicked. } } }; var elist = document.querySelectorAll("[" + ATTRIB_NESIDX + "]"); elist.forEach(function(el){ var idx = parseInt(el.getAttribute(ATTRIB_NESIDX), 16); if (idx >= 0 && idx < NESPalette.SystemColor.length){ el.style["background-color"] = NESPalette.SystemColor[idx]; el.style.color = InvertColor(NESPalette.SystemColor[idx], true); el.addEventListener("click", handle_syspalette_clicked); } }); var handle_palcolor_clicked = function(event){ if (this.hasAttribute(ATTRIB_PALIDX) && this.hasAttribute(ATTRIB_COLIDX)){ self.__pi = this.getAttribute(ATTRIB_PALIDX); self.__ci = this.getAttribute(ATTRIB_COLIDX); console.log("Requesting Palette: " + self.__pi + " | Color: " + self.__ci); } }; var elist = document.querySelectorAll("[" + ATTRIB_PALIDX + "]"); elist.forEach(function(el){ if (el.hasAttribute(ATTRIB_PALIDX) && el.hasAttribute(ATTRIB_COLIDX)){ el.addEventListener("click", handle_palcolor_clicked); } }); } get palette(){ return this.__NESPalette; } set palette(p){ if (!(p instanceof NESPalette)){ throw new TypeError("Expected NESPalette object instance."); } this.__NESPalette = p; } } const instance = new CTRLPalettes(); export default instance;