144 lines
3.6 KiB
JavaScript
144 lines
3.6 KiB
JavaScript
require('source-map-support').install();
|
|
|
|
import {Latus} from '@latus/core';
|
|
import {expect} from 'chai';
|
|
|
|
describe('Tiles', () => {
|
|
let latus;
|
|
beforeEach(async () => {
|
|
latus = Latus.mock({
|
|
'@avocado/resource': require('@avocado/resource'),
|
|
'@avocado/topdown': require('../src'),
|
|
});
|
|
await Promise.all(latus.invokeFlat('@latus/core/starting'));
|
|
});
|
|
it("has sane defaults", async () => {
|
|
const {Tiles} = latus.get('%resources');
|
|
const tiles = new Tiles();
|
|
expect(tiles.size).to.deep.equal([0, 0]);
|
|
expect(tiles.data.length).to.equal(0);
|
|
});
|
|
it("gets and sets tile data", async () => {
|
|
const {Tiles} = latus.get('%resources');
|
|
const tiles = new Tiles({data: [0, 1, 2, 3], size: [2, 2]});
|
|
expect(tiles.tileAt([0, 0])).to.equal(0);
|
|
expect(tiles.tileAt([1, 0])).to.equal(1);
|
|
expect(tiles.tileAt([0, 1])).to.equal(2);
|
|
expect(tiles.tileAt([1, 1])).to.equal(3);
|
|
tiles.setTileAt([0, 0], 69);
|
|
tiles.setTileAt([1, 0], 420);
|
|
tiles.setTileAt([0, 1], 311);
|
|
tiles.setTileAt([1, 1], 42);
|
|
expect(tiles.data).to.deep.equal([69, 420, 311, 42]);
|
|
});
|
|
it("can get a data slice", async () => {
|
|
const {Tiles} = latus.get('%resources');
|
|
const tiles = new Tiles(
|
|
{
|
|
data: [
|
|
0, 1, 2, 3,
|
|
4, 5, 6, 7,
|
|
8, 9, 10, 11,
|
|
12, 13, 14, 15,
|
|
],
|
|
size: [4, 4],
|
|
},
|
|
);
|
|
expect(tiles.slice([1, 1, 2, 2])).to.deep.equal([5, 6, 9, 10]);
|
|
expect(tiles.slice([1, 0, 3, 3])).to.deep.equal([1, 2, 3, 5, 6, 7, 9, 10, 11]);
|
|
expect(tiles.slice([-1, -1, 5, 5])).to.deep.equal([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]);
|
|
expect(tiles.slice([1, 1, 1, 1])).to.deep.equal([5]);
|
|
expect(tiles.slice([1, 1, 0, 0])).to.deep.equal([]);
|
|
});
|
|
it("can get convex hulls around indices", () => {
|
|
const {Tiles} = latus.get('%resources');
|
|
const hulls = [
|
|
[
|
|
[2, 0],
|
|
[3, 0],
|
|
[3, 3],
|
|
[1, 3],
|
|
[1, 1],
|
|
],
|
|
[
|
|
[4, 2],
|
|
[6, 2],
|
|
[7, 3],
|
|
[7, 4],
|
|
[4, 4],
|
|
],
|
|
];
|
|
const tiles = new Tiles(
|
|
{
|
|
data: [
|
|
0, 0, 1, 0, 0, 0, 0, 0,
|
|
0, 1, 1, 0, 0, 0, 0, 0,
|
|
0, 1, 1, 0, 1, 1, 0, 0,
|
|
0, 0, 0, 0, 1, 1, 1, 0,
|
|
],
|
|
size: [8, 4],
|
|
},
|
|
);
|
|
expect(tiles.indexHulls(new Set([1]))).to.deep.equal(hulls);
|
|
});
|
|
it("can stamp at", async () => {
|
|
const {Tiles} = latus.get('%resources');
|
|
const tiles = new Tiles(
|
|
{
|
|
data: [
|
|
0, 0, 0, 0,
|
|
0, 0, 0, 0,
|
|
0, 0, 0, 0,
|
|
0, 0, 0, 0,
|
|
],
|
|
size: [4, 4],
|
|
},
|
|
);
|
|
tiles.stampAt([0, 0, 2, 3], [1, 1, 1, 1, 1, 1])
|
|
expect(tiles.data).to.deep.equal([
|
|
1, 1, 0, 0,
|
|
1, 1, 0, 0,
|
|
1, 1, 0, 0,
|
|
0, 0, 0, 0,
|
|
]);
|
|
expect(tiles.packetsFor()).to.deep.equal([
|
|
[
|
|
'TilesUpdate',
|
|
{
|
|
position: [0, 0],
|
|
size: [2, 3],
|
|
tiles: [1, 1, 1, 1, 1, 1],
|
|
},
|
|
],
|
|
]);
|
|
});
|
|
it("can handle pathological hulls", () => {
|
|
const {Tiles} = latus.get('%resources');
|
|
const hulls = [
|
|
[
|
|
[ 0, 0 ],
|
|
[ 3, 0 ],
|
|
[ 4, 2 ],
|
|
[ 6, 2 ],
|
|
[ 6, 4 ],
|
|
[ 4, 4 ],
|
|
[ 3, 3 ],
|
|
[ 1, 2 ],
|
|
[ 0, 1 ],
|
|
],
|
|
];
|
|
const tiles = new Tiles(
|
|
{
|
|
data: [
|
|
1, 1, 1, 0, 0, 0, 0, 0,
|
|
0, 1, 1, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 1, 1, 1, 0, 0,
|
|
0, 0, 0, 0, 1, 1, 0, 0,
|
|
],
|
|
size: [8, 4],
|
|
},
|
|
);
|
|
expect(tiles.indexHulls(new Set([1]))).to.deep.equal(hulls);
|
|
});
|
|
});
|