UNPKG

@tdurtschi/bug

Version:

Bug is a simulation that models a weevil walking around in an HTML canvas.

100 lines 3.16 kB
"use strict"; 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