|
|
|
|
|
|
|
|
|
|
|
import GlobalEvents from "/app/js/common/EventCaller.js"; |
|
|
|
|
|
import Utils from "/app/js/common/Utils.js"; |
|
|
|
|
|
import NESPalette from "/app/js/models/NESPalette.js"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var Palettes = []; |
|
|
|
|
|
var CurrentPaletteIndex = 0; |
|
|
|
|
|
|
|
|
|
|
|
var BlockEmits = false; |
|
|
|
|
|
|
|
|
|
|
|
class CTRLPalettesStore{ |
|
|
|
|
|
constructor(){} |
|
|
|
|
|
|
|
|
|
|
|
get json(){ |
|
|
|
|
|
var d = { |
|
|
|
|
|
cpi: CurrentPaletteIndex, |
|
|
|
|
|
pals: [] |
|
|
|
|
|
}; |
|
|
|
|
|
for (let i=0; i < Palettes.length; i++){ |
|
|
|
|
|
d.pals.push([Palettes[i][0], Palettes[i][1].json]); |
|
|
|
|
|
} |
|
|
|
|
|
return JSON.stringify(d); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
set json(j){ |
|
|
|
|
|
try { |
|
|
|
|
|
var d = JSON.parse(j); |
|
|
|
|
|
} catch (e) { |
|
|
|
|
|
throw e; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (d.hasOwnProperty("cpi") && d.hasOwnProperty("pals")){ |
|
|
|
|
|
if (Utils.isInt(d.cpi) && d.pals instanceof Array){ |
|
|
|
|
|
var newPalettes = [] |
|
|
|
|
|
for (let i=0; i < d.pals.length; i++){ |
|
|
|
|
|
if (d.pals[i] instanceof Array){ |
|
|
|
|
|
if (this.getPalette(d.pals[i][0]) === null){ |
|
|
|
|
|
var palette = new NESPalette(); |
|
|
|
|
|
try{ |
|
|
|
|
|
palette.json = d.pals[i][1] |
|
|
|
|
|
} catch (e) { |
|
|
|
|
|
console.log("Failed to create palette.", e.toString()); |
|
|
|
|
|
palette = null; |
|
|
|
|
|
} |
|
|
|
|
|
if (palette !== null){ |
|
|
|
|
|
newPalettes.push([d.pals[i][0], palette]); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
CurrentPaletteIndex = 0 |
|
|
|
|
|
if (newPalettes.length > 0){ |
|
|
|
|
|
if (d.cpi >= 0 && d.cpi < newPalettes.length){ |
|
|
|
|
|
CurrentPaletteIndex = d.cpi; |
|
|
|
|
|
} |
|
|
|
|
|
Palettes = newPalettes; |
|
|
|
|
|
GlobalEvents.emit("set_app_palette", Palettes[CurrentPaletteIndex][1]); |
|
|
|
|
|
} |
|
|
|
|
|
} else { |
|
|
|
|
|
throw new TypeError("JSON Property Value types invalid."); |
|
|
|
|
|
} |
|
|
|
|
|
} else { |
|
|
|
|
|
throw new TypeError("JSON missing expected properties."); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
initialize(){ |
|
|
|
|
|
if (Palettes.length <= 0) |
|
|
|
|
|
this.createPalette("Palette"); |
|
|
|
|
|
return this; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
paletteIndexFromName(name){ |
|
|
|
|
|
for (let i=1; i < Palettes.length; i++){ |
|
|
|
|
|
if (Palettes[i][0] == name){ |
|
|
|
|
|
return i; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return -1; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
getPalette(name){ |
|
|
|
|
|
var i = this.paletteIndexFromName(name); |
|
|
|
|
|
return (i >= 0) ? Palettes[i][1] : null; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
createPalette(name){ |
|
|
|
|
|
var palette = this.getPalette(name); |
|
|
|
|
|
if (palette === null){ |
|
|
|
|
|
palette = new NESPalette(); |
|
|
|
|
|
palette.set_palette([ |
|
|
|
|
|
"0F", |
|
|
|
|
|
"05","06","07", |
|
|
|
|
|
"09","0A","0B", |
|
|
|
|
|
"01","02","03", |
|
|
|
|
|
"0D","00","20", |
|
|
|
|
|
"15","16","17", |
|
|
|
|
|
"19","1A","1B", |
|
|
|
|
|
"11","21","31", |
|
|
|
|
|
"1D","10","30" |
|
|
|
|
|
]); |
|
|
|
|
|
Palettes.push([name, palette]); |
|
|
|
|
|
// TODO: Create an HTML entry for this new palette. |
|
|
|
|
|
|
|
|
|
|
|
if (Palettes.length <= 1 && !BlockEmits){ |
|
|
|
|
|
GlobalEvents.emit("set_app_palette", palette); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return this; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
removePalette(name){ |
|
|
|
|
|
// TODO: Write this function. |
|
|
|
|
|
return this; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
renamePalette(oldname, newname){ |
|
|
|
|
|
var i = paletteIndexFromName(oldname); |
|
|
|
|
|
if (i < 0) |
|
|
|
|
|
throw new ValueError("Failed to find palette named '" + oldname +"'. Cannot rename."); |
|
|
|
|
|
Palettes[i][0] = newname; |
|
|
|
|
|
return this; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
activatePalette(name){ |
|
|
|
|
|
var i = this.paletteIndexFromName(name); |
|
|
|
|
|
if (i >= 0 && CurrentPaletteIndex !== i){ |
|
|
|
|
|
CurrentPaletteIndex = i; |
|
|
|
|
|
if (!BlockEmits){ |
|
|
|
|
|
GlobalEvents.emit("set_app_palette", Palettes[pindex][1]); |
|
|
|
|
|
} |
|
|
|
|
|
// TODO: Highlight palette HTML entry and unhighlight old one. |
|
|
|
|
|
} |
|
|
|
|
|
return this; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const instance = new CTRLPalettesStore(); |
|
|
|
|
|
export default instance; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|