cell/src/cell.js
2023-01-29 08:18:58 -05:00

46 lines
1.4 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Cell = void 0;
const MAX_CELL_SIZE = 100;
class Cell {
constructor(pos, script = '') {
this.pos = pos;
this.script = script;
this.energy = 100;
this.cellWall = 5;
this.api = {
move: {
down: () => this.move(0, -1),
left: () => this.move(-1, 0),
right: () => this.move(1, 0),
up: () => this.move(0, 1)
}
};
}
get dead() { return this.energy <= 20; }
get size() { return Math.min(MAX_CELL_SIZE, 50 * (this.energy / 100)); }
draw(p5, offsetX, offsetY) {
if (!this.dead)
this.run();
p5.fill(100, 100, 200);
p5.stroke(150, 150, 255);
p5.strokeWeight(this.cellWall);
p5.circle(offsetX + this.pos[0], offsetY - this.pos[1], this.size);
}
move(x, y) {
const energyCost = Math.round(this.size / 25 * 10) / 10;
if (this.energy - energyCost <= 20)
return;
this.energy -= energyCost;
this.pos[0] += x;
this.pos[1] += y;
}
run() {
if (!this.script)
return;
const script = `${this.script}; run(this);`;
return function () { return eval(script); }.call(this.api);
}
}
exports.Cell = Cell;
//# sourceMappingURL=cell.js.map