@tdurtschi/bug
Version:
Bug is a simulation that models a weevil walking around in an HTML canvas.
52 lines • 1.84 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var bug_ui_1 = __importDefault(require("./bug-ui"));
var canvas_helpers_1 = require("../../canvas-helpers");
var Victor = require("victor");
var bugUIs = [];
var GROUND_Y_OFFSET = 0.08;
var CLIMBING_Y_OFFSET = 0.1;
var createNewBug = function (bug) {
var bugUI = new bug_ui_1.default(bug.id, bug);
bugUIs[bug.id] = bugUI;
return bugUI;
};
var getUIBug = function (bug) {
return bugUIs[bug.id] || createNewBug(bug);
};
exports.default = (function (bug, ctx) {
var uiBug = getUIBug(bug);
uiBug.update();
var climbingYOffset = bug.climbingOn ? Math.ceil(bug.size.y * CLIMBING_Y_OFFSET) : 0;
var groundYOffset = bug.climbingOn ? 0 : Math.ceil(bug.size.y * GROUND_Y_OFFSET);
var XOffset = bug.size.x * -1 / 3;
var direction = bug.direction, size = bug.size;
var pos = new Victor(bug.pos.x, canvas_helpers_1.fixY(ctx.canvas.height, bug.pos.y));
ctx.save();
ctx.translate(pos.x, pos.y);
window.DEBUG && canvas_helpers_1.circle(ctx, 5);
if (direction.x > 0) {
ctx.rotate(-direction.angle());
ctx.scale(-1, 1);
}
else {
var newDir = direction.clone().multiplyScalarX(-1);
ctx.rotate(newDir.angle());
}
if (shouldFlipY(bug)) {
ctx.scale(1, -1);
}
window.DEBUG && canvas_helpers_1.horizLine(ctx, size.x);
ctx.drawImage(uiBug.getImage(), XOffset, -size.y + climbingYOffset + groundYOffset, size.x * 10 / 6, size.y);
ctx.restore();
});
function shouldFlipY(bug) {
if (bug.climbingOn && bug.climbingOn.branch.flipY) {
return true;
}
return false;
}
//# sourceMappingURL=bug-renderer.js.map