UNPKG

@tdurtschi/bug

Version:

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

127 lines 5.41 kB
"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