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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
var assert = require("assert")
var vec = require("../public/assets/javascripts/rectangles/models/vec2.js")
var Rect = require("../public/assets/javascripts/rectangles/models/rect.js")
var Room = require("../public/assets/javascripts/rectangles/models/room.js")
var Rooms = require("../public/assets/javascripts/rectangles/engine/rooms/_rooms.js")
var Clipper = require("../public/assets/javascripts/rectangles/engine/rooms/clipper.js")
var FRONT = 0x1, BACK = 0x2, LEFT = 0x4, RIGHT = 0x8, FLOOR = 0x10, CEILING = 0x20
var ALL = FRONT | BACK | LEFT | RIGHT
var rect = new Rect( new vec(1,5), new vec(1,5) )
var east = new Rect( new vec(2,6), new vec(1,5) )
var corner = new Rect( new vec(3,7), new vec(3,7) )
var peninsula = new Rect( new vec(4,6), new vec(6,8) )
function report(a) {
console.log( a.join("\n") )
}
describe('clipper', function(){
Rooms.list = {}
Rooms.regions = []
Rooms.add_with_rect( rect )
Rooms.add_with_rect( east )
describe('#clip_rects(rect, east)', function(){
Rooms.clipper.reset_rects()
var regions = Rooms.clipper.clip_rects()
it('contains duplicates', function(){
var map = {}
var state = regions.some(function(a){
var s = a.toString()
if (s in map) return true
map[s] = s
return false
})
assert.equal(true, state)
})
})
describe('#cull_rects(rect, east)', function(){
Rooms.clipper.reset_rects()
var regions = Rooms.clipper.clip_rects()
var culled = Rooms.clipper.cull_rects()
var culled_dupes = culled.filter(function(r){ return r.dupe })
var culled_regions = culled.filter(function(r){ return ! r.dupe })
it('clipper returns 4 rects', function(){
assert.equal(4, regions.length)
})
it('culling marks 1 duplicate', function(){
assert.equal(1, culled_dupes.length)
})
it('culling marks 3 non-duplicate', function(){
assert.equal(3, culled_regions.length)
})
})
//
Rooms.list = {}
Rooms.regions = []
Rooms.add_with_rect( rect )
Rooms.add_with_rect( corner )
describe('#cull_rects(rect, corner)', function(){
Rooms.clipper.reset_rects()
var regions = Rooms.clipper.clip_rects()
var culled = Rooms.clipper.cull_rects()
var culled_dupes = culled.filter(function(r){ return r.dupe })
var culled_regions = culled.filter(function(r){ return ! r.dupe })
it('clipper returns 8 rects', function(){
assert.equal(8, regions.length)
})
it('culling marks 1 duplicate', function(){
assert.equal(1, culled_dupes.length)
})
it('culling marks 7 non-duplicate', function(){
assert.equal(7, culled_regions.length)
})
})
//
Rooms.list = {}
Rooms.regions = []
Rooms.add_with_rect( rect )
Rooms.add_with_rect( corner )
Rooms.add_with_rect( peninsula )
/*
// this method uses a tree to match areas, which tends to leave extra overlapping regions
describe('#cull_rects(rect, corner, peninsula)', function(){
Rooms.clipper.reset_rects()
var regions = Rooms.clipper.clip_rects()
var culled = Rooms.clipper.cull_rects()
var culled_dupes = culled.filter(function(r){ return r.dupe })
var culled_regions = culled.filter(function(r){ return ! r.dupe })
it('clipper returns 16 rects', function(){
assert.equal(16, regions.length)
})
it('culling marks 2 duplicate', function(){
assert.equal(2, culled_dupes.length)
})
it('culling marks 14 non-duplicate', function(){
assert.equal(14, culled_regions.length)
})
})
*/
// this method iterates to match areas, which omits regions in some cases
describe('#cull_rects_iterative(rect, corner, peninsula)', function(){
Rooms.clipper.reset_rects()
var regions = Rooms.clipper.clip_rects()
var culled = Rooms.clipper.cull_rects_iterative()
var culled_dupes = culled.filter(function(r){ return r.dupe })
var culled_regions = culled.filter(function(r){ return ! r.dupe })
it('clipper returns 16 rects', function(){
assert.equal(16, regions.length)
})
it('culling marks 3 duplicate', function(){
assert.equal(3, culled_dupes.length)
})
it('culling marks 14 non-duplicate', function(){
assert.equal(13, culled_regions.length)
})
})
})
|