Browse Source

Very rough ISurface object rendering now functional.

dev-tmpl
Bryan Miller 5 years ago
parent
commit
a6c7aad9de
2 changed files with 73 additions and 5 deletions
  1. +71
    -5
      app/js/ctrls/CTRLPainter.js
  2. +2
    -0
      app/js/main.js

+ 71
- 5
app/js/ctrls/CTRLPainter.js View File



import Input from "/app/js/ui/Input.js"; import Input from "/app/js/ui/Input.js";


import NESTile from "/app/js/models/NESTile.js";
import NESBank from "/app/js/models/NESBank.js";

import NESPalette from "/app/js/models/NESPalette.js";
//import NESTile from "/app/js/models/NESTile.js";
//import NESBank from "/app/js/models/NESBank.js";
import ISurface from "/app/js/ifaces/ISurface.js";


const EL_CANVAS_ID = "painter"; const EL_CANVAS_ID = "painter";


var h = canvas.clientHeight; var h = canvas.clientHeight;
canvas.width = w; canvas.width = w;
canvas.height = h; canvas.height = h;
GlobalEvents.emit("resize", w, h);
} }
}, 250); }, 250);
window.addEventListener("resize", HANDLE_Resize); window.addEventListener("resize", HANDLE_Resize);
this.__brushColor = 0; this.__brushColor = 0;
this.__brushPalette = 0; this.__brushPalette = 0;


this.__gridEnabled = false;
this.__gridSize = 1;

this.__surface = null; this.__surface = null;


var self = this; var self = this;


var handle_resize = (function(w,h){
this.render();
}).bind(this);
GlobalEvents.listen("resize", handle_resize);

var handle_change_surface = (function(surf){ var handle_change_surface = (function(surf){
if (!(surf instanceof ISurface)){ if (!(surf instanceof ISurface)){
console.log("WARNING: Attempted to set painter to non-surface instance."); console.log("WARNING: Attempted to set painter to non-surface instance.");
return; return;
} }
this.__surface = surf; this.__surface = surf;
// TODO: Call a rerender
this.render();
}).bind(this); }).bind(this);
GlobalEvents.listen("change_surface", handle_change_surface); GlobalEvents.listen("change_surface", handle_change_surface);


get onePaletteMode(){return this.__onePaletteMode;} get onePaletteMode(){return this.__onePaletteMode;}
set onePaletteMode(e){ set onePaletteMode(e){
this.__onePaletteMode = (e === true); this.__onePaletteMode = (e === true);
// TODO: Call a rerender.
this.render();
} }


get scale(){ get scale(){
this.__scale = Math.max(0.1, Math.min(100.0, s)); this.__scale = Math.max(0.1, Math.min(100.0, s));
} }


get showGrid(){return this.__gridEnabled;}
set showGrid(e){
this.__gridEnabled = (e === true);
}

initialize(){ initialize(){
if (canvas === null){ if (canvas === null){
canvas = document.getElementById(EL_CANVAS_ID); canvas = document.getElementById(EL_CANVAS_ID);
context = canvas.getContext("2d"); context = canvas.getContext("2d");
if (!context) if (!context)
throw new Error("Failed to obtain canvas context."); throw new Error("Failed to obtain canvas context.");
context.imageSmoothingEnabled = false;
input.mouseTargetElement = canvas; input.mouseTargetElement = canvas;
} }
} }
scale_down(amount=1){ scale_down(amount=1){
this.scale = this.scale - (amount*0.1); this.scale = this.scale - (amount*0.1);
} }

render(){
if (context === null || this.__surface === null)
return;

// Get the contexts initial fillStyle. Don't want the render operation to override it.
var fillStyle = context.fillStyle;

var ie = this.__surface.width - this.__offset[0];
var je = this.__surface.height - this.__offset[1];
var scalemult = 1.0/this.__scale;

// Clearing the context surface...
context.fillStyle = NESPalette.Default[4];
context.fillRect(
0,0,
Math.floor(canvas.clientWidth),
Math.floor(canvas.clientHeight)
);

for (var j = -this.__offset[1]; j < je; j++){
var y = Math.floor(j*scalemult);
for (var i = -this.__offset[0]; i < ie; i++){
var x = Math.floor(i*scalemult);
var color = "#666666";
if (this.__onePaletteMode){
var pinfo = this.__surface.getColorIndex(x, y);
if (pinfo.ci >= 0)
color = NESPalette.Default[pinfo.ci];
} else {
color = this.__surface.getColor(x, y);
}

context.fillStyle = color;
context.fillRect(
i + this.__offset[0],
j + this.__offset[1],
1, 1
);
}
}

if (this.__gridEnabled && this.__scale > 0.5){
// TODO: render the grid!
}

// Return to the context's initial fillStyle.
context.fillStyle = fillStyle;
}
} }





+ 2
- 0
app/js/main.js View File

console.log("Bank color at coordinates (8,0): ", bnk.getColor(8,0)); console.log("Bank color at coordinates (8,0): ", bnk.getColor(8,0));
console.log("Bank color at coordinates (7,0): ", bnk.getColor(7,0)); console.log("Bank color at coordinates (7,0): ", bnk.getColor(7,0));
console.log("Bank color at coordinates (135, 15): ", bnk.getColor(135,15)); console.log("Bank color at coordinates (135, 15): ", bnk.getColor(135,15));

GlobalEvents.emit("change_surface", bnk);
} }





Loading…
Cancel
Save