@tdurtschi/bug
Version:
Bug is a simulation that models a weevil walking around in an HTML canvas.
100 lines • 3.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var canvas_helpers_1 = require("../../canvas-helpers");
var jade_1 = require("../../../entities/plant/jade/jade");
var plantago_1 = require("../../../entities/plant/plantago/plantago");
var leaf = loadLeafAsset();
var jade = loadJadeAsset();
var preRenderedPlants = [];
exports.default = (function (plant, ctx) {
if (window.OffscreenCanvas != undefined && !window.DEBUG) {
if (preRenderedPlants[plant.id]) {
drawPreRenderedPlant(plant, ctx);
}
else {
var offscreenCanvas = new OffscreenCanvas(ctx.canvas.width, ctx.canvas.height);
preRenderedPlants[plant.id] = offscreenCanvas;
drawPlantToCanvas(plant, offscreenCanvas.getContext("2d"));
}
}
else {
drawPlantToCanvas(plant, ctx);
}
});
var drawPreRenderedPlant = function (plant, ctx) {
var rendered = preRenderedPlants[plant.id];
ctx.drawImage(rendered, 0, 0, ctx.canvas.width, ctx.canvas.height);
};
var drawPlantToCanvas = function (plant, ctx) {
var pos = plant.pos;
ctx.save();
ctx.translate(pos.x, canvas_helpers_1.fixY(ctx.canvas.height, pos.y));
renderPlantRecursively(plant, plant.graph, ctx);
ctx.restore();
};
var renderPlantRecursively = function (plant, root, ctx) {
if (plant instanceof plantago_1.Plantago) {
renderLeaf(root, ctx);
}
else if (plant instanceof jade_1.Jade) {
renderJade(root, ctx);
}
else {
ctx.strokeStyle = "#000000";
ctx.lineWidth = 2;
renderBranch(root, ctx);
renderBranchChildren(plant, root, ctx);
}
};
var renderBranch = function (root, ctx) {
var x = Math.floor(root.node.x), y = Math.floor(root.node.y);
ctx.moveTo(0, 0);
ctx.lineTo(x, -y);
ctx.stroke();
};
var renderBranchChildren = function (plant, root, ctx) {
var x = Math.floor(root.node.x), y = Math.floor(root.node.y);
ctx.save();
ctx.translate(x, -y);
if (root.left) {
renderPlantRecursively(plant, root.left, ctx);
}
if (root.right) {
renderPlantRecursively(plant, root.right, ctx);
}
ctx.restore();
};
var renderLeaf = function (root, ctx) {
var x = Math.floor(root.node.x), y = Math.floor(root.node.y);
ctx.save();
if (window.DEBUG) {
ctx.moveTo(0, 0);
ctx.lineTo(x, -y);
ctx.stroke();
}
ctx.rotate(-root.node.angle() + Math.PI / 2);
ctx.drawImage(leaf, -24, -173, 42, 178);
ctx.restore();
};
function loadLeafAsset() {
var leaf = new Image();
leaf.src = require("./Leaf.png").default;
return leaf;
}
function loadJadeAsset() {
var leaf = new Image();
leaf.src = require("./Jade.png").default;
return leaf;
}
function renderJade(root, ctx) {
ctx.save();
ctx.translate(jade.width / 2, 0);
ctx.drawImage(jade, -jade.width, -jade.height, jade.width, jade.height);
ctx.translate(-jade.width / 2, 0);
if (window.DEBUG) {
renderBranch(root, ctx);
renderBranchChildren(undefined, root, ctx);
}
ctx.restore();
}
//# sourceMappingURL=plant-renderer.js.map