|
|
@@ -528,6 +528,29 @@ export default class NESBank extends ISurface{ |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
getRegion(x, y, w, h){ |
|
|
|
if (w <= 0 || h <= 0) |
|
|
|
throw new RangeError("Width and/or Height must be greater than zero."); |
|
|
|
var region = []; |
|
|
|
|
|
|
|
for (let j=y; j<y+h; j++){ |
|
|
|
if (j === this.height){ |
|
|
|
h = j - y; |
|
|
|
break; |
|
|
|
} |
|
|
|
for (let i=x; i<x+w; i++){ |
|
|
|
if (i === this.width){ |
|
|
|
w = i - x; |
|
|
|
break; |
|
|
|
} |
|
|
|
region.push(this.getColorIndex(i, j)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return {w:w, h:h, r:region}; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
setColorIndex(x, y, ci, pi){ |
|
|
|
if (x < 0 || x >= this.width || y < 0 || y > this.height) |
|
|
|
throw new RangeError("Coordinates out of bounds."); |
|
|
@@ -550,6 +573,31 @@ export default class NESBank extends ISurface{ |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
setRegion(x, y, w, h, r){ |
|
|
|
if (w <= 0 || h <= 0) |
|
|
|
throw new RangeError("Width and/or Height must be greater than zero."); |
|
|
|
if (!(r instanceof Array)){ |
|
|
|
throw new TypeError("Region expected to be an array."); |
|
|
|
} |
|
|
|
if (r.length !== w*h) |
|
|
|
throw new RangeError("Region length does not match given width/height values."); |
|
|
|
|
|
|
|
for (let j=0; j < h; j++){ |
|
|
|
for (let i=0; i < w; i++){ |
|
|
|
var index = (j*w) + i; |
|
|
|
if ("pi" in r[index] && "ci" in r[index] && r[index].ci >= 0){ |
|
|
|
var _x = i+x; |
|
|
|
var _y = j+y; |
|
|
|
if (_x >= 0 && _x < this.width && _y >= 0 && _y < this.height) |
|
|
|
this.setColorIndex(_x, _y, r[index].ci, r[index].pi); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return this; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
snapshot(){ |
|
|
|
if (this.__redos.length > 0) // Remove the redo history. We're adding a new snapshot. |
|
|
|
this.__redos = []; |