|
- import Utils from "/app/js/common/Utils.js";
- import ISurface from "/app/js/ifaces/ISurface.js";
- import NESBank from "/app/js/models/NESBank.js";
- import NESPalette from "/app/js/models/NESPalette.js";
-
-
- export default class NESNameTable extends ISurface{
- constructor(){
- super();
- this.__bank = null;
- this.__palette = null;
- this.__tiles = [];
- this.__attribs = [];
-
- for (let i=0; i < 960; i++)
- this.__tiles[i] = 0;
- for (let i=0; i < 64; i++)
- this.__attribs[i] = [0,0,0,0];
- }
-
-
- get bank(){return this.__bank;}
- set bank(b){
- if (b !== null and !(b instanceof NESBank))
- throw new TypeError("Expected a NESBank object.");
- this.__bank = b;
- }
-
- get palette(){return this.__palette;}
- set palette(p){
- if (p !== null && !(p instanceof NESPalette))
- throw new TypeError("Expected a NESPalette object.");
- this.__palette = p;
- }
-
- get width(){return 256;}
- get height(){return 240;}
- get length(){return 0;}
- get undos(){return 0;}
- get redos(){return 0;}
-
-
- copy(b){
- this.bank = b.bank;
- this.palette = b.palette;
- for (let i=0; i < 960; i++)
- this.__tiles[i] = b.__tiles[i];
- for (let i=0; i < 64; i++){
- this.__attribs[i] = [
- b.__attribs[i][0],
- b.__attribs[i][1],
- b.__attribs[i][2],
- b.__attribs[i][3]
- ];
- }
- return this;
- }
-
- clone(){
- return (new NESNameTable()).clone(this);
- }
-
- snapshot(){return this;}
- undo(){return this;}
- redo(){return this;}
- clearUndos(){return this;}
- clearRedos(){return this;}
- clearHistory(){
- return this.clearUndos().clearRedos();
- }
-
- getColor(x, y){
- var pal = {pi:-1, ci:-1};
- try {
- pal = this.getColorIndex(x, y);
- } catch (e) {throw e;}
-
- if (this.__palette !== null && pal.pi >= 0 && pal.ci >= 0) {
- return this.__palette.get_palette_color(pal.pi, pal.ci);
- } else if (pal.ci >= 0){
- return NESPalette.Default(pal.ci);
- }
- return NESPalette.Default(4);
- }
-
-
- getColorIndex(x, y){
- if (x < 0 || x >= this.width || y < 0 || y >= this.height)
- throw new RangeError("Coordinates are out of bounds.");
-
- var pi = -1;
- var ci = -1;
- if (this.__bank !== null){
- var _x = Math.floor(x % 8);
- var _y = Math.floor(y % 8);
-
- var tileX = Math.floor(x / 32);
- var tileY = Math.floor(y / 32);
- var tileIndex = 256 + this.__tiles[(tileY * 32) + tileX];
-
- ci = this.__bank.rp[tileIndex].getPixelIndex(_x, _y);
- pi = this._PaletteFromCoords(x, y);
- }
- return {pi:pi, ci:ci};
- }
-
-
- setColorIndex(x, y, ci, pi){
- return this;
- }
-
-
- _PaletteFromCoords(x,y){
- var blockX = Math.floor(x / 32);
- var blockY = Math.floor(y / 32);
- var bIndex = (blockY * 8) + blockX;
-
- var palX = Math.floor(x % 16);
- var palY = Math.floor(y % 16);
- var pIndex = ((palX < 8) ? 0 : 1) + ((palY >= 8) ? 2 : 0);
-
- return this.__attribs[bIndex][pIndex];
- }
- }
-
-
|