Browse Source

NESTile now stores the proxy object for pixel access as a class level object instead of creating it for every call to the .pixels property.

dev
Bryan Miller 5 years ago
parent
commit
8c2ff16c7d
1 changed files with 18 additions and 15 deletions
  1. +18
    -15
      app/js/models/NESTile.js

+ 18
- 15
app/js/models/NESTile.js View File

@@ -33,13 +33,9 @@ export default class NESTile extends EventCaller{
super();
this.__paletteIndex = 0;
this.__data = new Uint8Array(16);
}

get width(){return 8;}
get height(){return 8;}

get pixels(){
return new Proxy(this, {
var self = this;
this.__pixels = new Proxy(this.__data, {
get: function(obj, prop){
if (prop === "length")
return 64;
@@ -49,8 +45,8 @@ export default class NESTile extends EventCaller{
throw new RangeError("Index out of bounds.");
var dindex = Math.floor(prop*0.125);
var bitoffset = 7 - (prop%8);
var v = (obj.__data[dindex] & (1 << bitoffset)) >> bitoffset;
v += 2*((obj.__data[8+dindex] & (1 << bitoffset)) >> bitoffset);
var v = (obj[dindex] & (1 << bitoffset)) >> bitoffset;
v += 2*((obj[8+dindex] & (1 << bitoffset)) >> bitoffset);
return v;
},

@@ -68,22 +64,29 @@ export default class NESTile extends EventCaller{
var dindex = Math.floor(prop*0.125);
var bitoffset = (prop % 8);
if (value == 1 || value == 3){
obj.__data[dindex] |= BitMask(bitoffset);
obj[dindex] |= BitMask(bitoffset);
} else {
obj.__data[dindex] &= BitMask(bitoffset, true);
obj[dindex] &= BitMask(bitoffset, true);
}
if (value == 2 || value == 3){
obj.__data[8+dindex] |= BitMask(bitoffset);
obj[8+dindex] |= BitMask(bitoffset);
} else {
obj.__data[8+dindex] &= BitMask(bitoffset, true);
obj[8+dindex] &= BitMask(bitoffset, true);
}
if (!BLOCK_CHANGE_EMIT)
obj.emit("data_changed");
self.emit("data_changed");
return true;
}
});
}

get width(){return 8;}
get height(){return 8;}

get pixels(){
return this.__pixels;
}

get dataArray(){
var d = [];
for (var y = 0; y < 8; y++){
@@ -149,7 +152,7 @@ export default class NESTile extends EventCaller{
if (ci < 0 || ci >= 4){
throw new ValueError("Color index out of bounds.");
}
this.pixels[(y*8)+x] = ci;
this.__pixels[(y*8)+x] = ci;
return this;
}

@@ -157,7 +160,7 @@ export default class NESTile extends EventCaller{
if (x < 0 || x >= 8 || y < 0 || y >= 8){
throw new ValueError("Coordinates out of bounds.");
}
return this.pixels[(8*y) + x];
return this.__pixels[(8*y) + x];
}

flip(flag){

Loading…
Cancel
Save