@tdurtschi/bug
Version:
Bug is a simulation that models a weevil walking around in an HTML canvas.
127 lines • 5.41 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var Victor = require("victor");
var treeBuilder_1 = __importDefault(require("../../plant/tree/treeBuilder"));
var bug_1 = __importDefault(require("../bug"));
var climb_1 = require("./climb");
var stats_1 = require("../../../util/stats");
var vectors_1 = require("../../../util/vectors");
var turnAround_1 = require("./turnAround");
var BugInstinct_1 = require("./BugInstinct");
var tree_1 = require("../../plant/tree/tree");
describe("Climbing mode", function () {
it("Climbs up on a branch", function () {
var tree = new tree_1.Tree(1, {
pos: new Victor(0, 0),
graph: new treeBuilder_1.default().node(0, 100).build(),
});
var bug = new bug_1.default(0, {
speed: 1,
pos: new Victor(0, 30),
climbingOn: { plant: tree, branch: tree.graph },
direction: new Victor(0, 1),
});
new climb_1.Climb(bug).do();
expect(bug.pos.y).toEqual(31);
});
it("Will pick the left or right branch to climb up if its at the end of a branch", stats_1.multi(10, function () {
var tree = new treeBuilder_1.default()
.node(0, 30)
.left(new treeBuilder_1.default().node(-30, 30).build())
.right(new treeBuilder_1.default().node(30, 30).build())
.build();
var bug = new bug_1.default(0, {
speed: 1,
pos: new Victor(0, 30),
climbingOn: {
plant: new tree_1.Tree(1, { pos: new Victor(0, 0), graph: tree }),
branch: tree,
},
direction: new Victor(0, 1),
});
new climb_1.Climb(bug).do();
var onLeftBranch = bug.climbingOn.branch === tree.left;
var onRightBranch = bug.climbingOn.branch === tree.right;
expect(onLeftBranch || onRightBranch).toBeTruthy();
vectors_1.expectEquals(bug.direction, (onLeftBranch ? tree.left : tree.right).node.clone().norm());
}));
it("Turns around if the next branch doesn't exist", function () {
var tree = new treeBuilder_1.default().node(0, 30).build();
var bug = new bug_1.default(0, {
speed: 1,
pos: new Victor(0, 30),
climbingOn: {
plant: new tree_1.Tree(1, { pos: new Victor(0, 0), graph: tree }),
branch: tree,
},
direction: new Victor(0, 1),
});
bug.bugInstinct = new BugInstinct_1.DummyBugInstinct({ IsTiredOfClimbing: false });
var climb = new climb_1.Climb(bug);
bug.queueBehavior(climb);
bug.update();
expect(bug.behaviorQueue.find(function (behavior) { return behavior instanceof turnAround_1.TurnAround; })).not.toBeUndefined();
});
it("Moves to the parent branch when climbing down", function () {
var tree = new treeBuilder_1.default()
.node(0, 30)
.left(new treeBuilder_1.default().node(-30, 30).build())
.build();
var climbingBranch = tree.left;
var direction = climbingBranch.node.clone().norm().multiplyScalar(-1);
var bug = new bug_1.default(0, {
speed: 1,
pos: new Victor(0, 30),
climbingOn: {
plant: new tree_1.Tree(1, { pos: new Victor(0, 0), graph: tree }),
branch: tree.left,
},
direction: direction,
});
new climb_1.Climb(bug).do();
expect(bug.climbingOn.branch).toBe(tree);
vectors_1.expectEquals(bug.direction, new Victor(0, -1));
});
it("Returns to the ground if no parent branch", stats_1.multi(5, function () {
var tree = new treeBuilder_1.default().node(0, 30).build();
var climbingBranch = tree;
var direction = climbingBranch.node.clone().norm().multiplyScalar(-1);
var bug = new bug_1.default(0, {
speed: 1,
pos: new Victor(0, 0),
size: new Victor(30, 20),
climbingOn: {
plant: new tree_1.Tree(1, { pos: new Victor(0, 0), graph: tree }),
branch: tree,
},
direction: direction,
});
bug.finishBehavior = jasmine.createSpy();
new climb_1.Climb(bug).do();
expect(bug.climbingOn).toBeUndefined();
expect(bug.direction.y).toEqual(0);
expect(Math.abs(bug.pos.x)).toBeGreaterThan(bug.size.x);
expect(bug.finishBehavior).toHaveBeenCalled();
}));
it("Emits an event when it returns to the ground", function (done) {
var tree = new treeBuilder_1.default().node(0, 30).build();
var climbingBranch = tree;
var direction = climbingBranch.node.clone().norm().multiplyScalar(-1);
var bug = new bug_1.default(0, {
speed: 1,
pos: new Victor(0, 0),
size: new Victor(30, 20),
climbingOn: {
plant: new tree_1.Tree(1, { pos: new Victor(0, 0), graph: tree }),
branch: tree,
},
direction: direction,
});
bug.zIndexChanged.subscribe(done);
new climb_1.Climb(bug).do();
});
});
//# sourceMappingURL=climb.spec.js.map