Spaces:
Running
Running
File size: 2,350 Bytes
87b3b3a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
describe("FOV", function() {
var MAP8_RING0 = [
"#####",
"#####",
"##@##",
"#####",
"#####"
];
var RESULT_MAP8_RING0 = [
" ",
" ... ",
" ... ",
" ... ",
" "
];
var MAP8_RING1 = [
"#####",
"#...#",
"#.@.#",
"#...#",
"#####"
];
var RESULT_MAP8_RING1 = [
".....",
".....",
".....",
".....",
"....."
]
var buildLightCallback = function(map) {
var center = [0, 0];
/* locate center */
for (var j=0;j<map.length;j++) {
for (var i=0;i<map[j].length;i++) {
if (map[j].charAt(i) == "@") {
center = [i, j];
}
}
}
var result = function(x, y) {
var ch = map[y].charAt(x);
return (ch != "#");
};
result.center = center;
return result;
}
var checkResult = function(fov, center, result) {
var used = {};
var callback = function(x, y, dist) {
expect(result[y].charAt(x)).toEqual(".");
used[x+","+y] = 1;
}
fov.compute(center[0], center[1], 2, callback);
for (var j=0;j<result.length;j++) {
for (var i=0;i<result[j].length;i++) {
if (result[j].charAt(i) != ".") { continue; }
expect((i+","+j) in used).toEqual(true);
}
}
}
describe("Discrete Shadowcasting", function() {
describe("8-topology", function() {
it("should compute visible ring0", function() {
var lightPasses = buildLightCallback(MAP8_RING0);
var fov = new ROT.FOV.DiscreteShadowcasting(lightPasses, {topology:8});
checkResult(fov, lightPasses.center, RESULT_MAP8_RING0);
});
it("should compute visible ring1", function() {
var lightPasses = buildLightCallback(MAP8_RING1);
var fov = new ROT.FOV.DiscreteShadowcasting(lightPasses, {topology:8});
checkResult(fov, lightPasses.center, RESULT_MAP8_RING1);
});
});
});
describe("Precise Shadowcasting", function() {
describe("8-topology", function() {
it("should compute visible ring0", function() {
var lightPasses = buildLightCallback(MAP8_RING0);
var fov = new ROT.FOV.PreciseShadowcasting(lightPasses, {topology:8});
checkResult(fov, lightPasses.center, RESULT_MAP8_RING0);
});
it("should compute visible ring1", function() {
var lightPasses = buildLightCallback(MAP8_RING1);
var fov = new ROT.FOV.PreciseShadowcasting(lightPasses, {topology:8});
checkResult(fov, lightPasses.center, RESULT_MAP8_RING1);
});
});
});
}); /* FOV */
|