From c7e27b743eb8488ec71adaf365056ff500b458ab Mon Sep 17 00:00:00 2001 From: Julie Lala Date: Wed, 23 Jul 2014 17:03:04 -0400 Subject: preparing modules for clip test --- public/assets/javascripts/rectangles/util/uid.js | 31 ++++++++++++++++-------- 1 file changed, 21 insertions(+), 10 deletions(-) (limited to 'public/assets/javascripts/rectangles/util/uid.js') diff --git a/public/assets/javascripts/rectangles/util/uid.js b/public/assets/javascripts/rectangles/util/uid.js index ca22fb3..648bf0c 100644 --- a/public/assets/javascripts/rectangles/util/uid.js +++ b/public/assets/javascripts/rectangles/util/uid.js @@ -1,14 +1,25 @@ -var UidGenerator = function(list){ - var id = 0 - return function(s){ - s = s || "" - var ss - while (1) { - ss = s + (id++) - if (! (ss in list)) { - return ss +(function(){ + + var UidGenerator = function(list){ + var id = 0 + return function(s){ + s = s || "" + var ss + while (1) { + ss = s + (id++) + if (! (ss in list)) { + return ss + } } } } -} \ No newline at end of file + + if ('window' in this) { + window.UidGenerator = UidGenerator + } + else { + module.exports = UidGenerator + } + +})() -- cgit v1.2.3-70-g09d2 From 5e0c67b5d70d90ea12b207e3c442378559f8f219 Mon Sep 17 00:00:00 2001 From: Julie Lala Date: Wed, 23 Jul 2014 18:51:51 -0400 Subject: basic culling tests --- Makefile | 3 + .../javascripts/rectangles/engine/rooms/_rooms.js | 6 +- .../javascripts/rectangles/engine/rooms/clipper.js | 8 ++- .../assets/javascripts/rectangles/models/room.js | 6 +- .../assets/javascripts/rectangles/models/vec2.js | 2 +- .../assets/javascripts/rectangles/util/colors.js | 10 ++- public/assets/javascripts/rectangles/util/uid.js | 12 ++-- test/00-setup.js | 2 +- test/02-test-rect.js | 22 +++++++ test/03-test-clipping.js | 77 ++++++++++++++++++++-- 10 files changed, 126 insertions(+), 22 deletions(-) (limited to 'public/assets/javascripts/rectangles/util/uid.js') diff --git a/Makefile b/Makefile index b7e7836..877cd69 100644 --- a/Makefile +++ b/Makefile @@ -2,5 +2,8 @@ test: ./node_modules/.bin/mocha -R nyan +spec: + ./node_modules/.bin/mocha -R spec + .PHONY: test diff --git a/public/assets/javascripts/rectangles/engine/rooms/_rooms.js b/public/assets/javascripts/rectangles/engine/rooms/_rooms.js index f7fad3e..4ad3e2c 100644 --- a/public/assets/javascripts/rectangles/engine/rooms/_rooms.js +++ b/public/assets/javascripts/rectangles/engine/rooms/_rooms.js @@ -13,8 +13,8 @@ vec2 = require('../../models/vec2') Rect = require('../../models/rect') Room = require('../../models/room') - sort = require('../../util/sort') UidGenerator = require('../../util/uid') + sort = require('../../util/sort') _ = require('lodash') FRONT = 0x1, BACK = 0x2, LEFT = 0x4, RIGHT = 0x8, FLOOR = 0x10, CEILING = 0x20 TOP = CEILING, BOTTOM = FLOOR @@ -38,6 +38,8 @@ base.walls = {} base.regions = [] + UidGenerator.setList(base.list) + base.init = function(){ Rooms.builder.init() Rooms.clipper.init() @@ -116,8 +118,6 @@ return [] } - base.uid = UidGenerator(base.list) - base.sorted_by_position = function(){ return sort.rooms_by_position( base.values() ) } diff --git a/public/assets/javascripts/rectangles/engine/rooms/clipper.js b/public/assets/javascripts/rectangles/engine/rooms/clipper.js index cd45479..365ae8c 100644 --- a/public/assets/javascripts/rectangles/engine/rooms/clipper.js +++ b/public/assets/javascripts/rectangles/engine/rooms/clipper.js @@ -41,7 +41,7 @@ app.tube("clip") } - var rooms, regions + var regions // Given a set of overlapping rooms, clip any intersections, then cull any duplicate polygons base.solve_rects = function(){ @@ -59,6 +59,7 @@ // Reset the clipping/culling states of each of the rooms base.reset_rects = function(){ + regions = [] Rooms.forEach(function(room){ room.reset() }) @@ -67,7 +68,6 @@ // Compare each room to the rooms it overlaps, and subdivide base.clip_rects = function(){ var rooms = Rooms.sorted_by_position() - regions = [] var left, right for (var i = 0; i < rooms.length; i++) { @@ -89,6 +89,8 @@ rooms[i].regions = rooms[i].regions.filter(function(r){ return !!r }) regions = regions.concat(rooms[i].regions) } + + return regions } // Find overlapping regions (of the same size) and dedupe @@ -125,6 +127,8 @@ ttx.data = new Tree (regions[i].y.a, [regions[i]]) } } + + return regions } return base diff --git a/public/assets/javascripts/rectangles/models/room.js b/public/assets/javascripts/rectangles/models/room.js index 748b244..e5f42fe 100644 --- a/public/assets/javascripts/rectangles/models/room.js +++ b/public/assets/javascripts/rectangles/models/room.js @@ -1,14 +1,16 @@ (function(){ - var vec2, Rect, sort + var vec2, Rect, UidGenerator, sort if ('window' in this) { vec2 = window.vec2 Rect = window.Rect + UidGenerator = window.UidGenerator sort = window.sort } else { vec2 = require('./vec2') Rect = require('./rect') + UidGenerator = require('../util/uid') sort = require('../util/sort') FRONT = 0x1, BACK = 0x2, LEFT = 0x4, RIGHT = 0x8, FLOOR = 0x10, CEILING = 0x20 TOP = CEILING, BOTTOM = FLOOR @@ -25,7 +27,7 @@ } var Room = function(opt){ - this.id = opt.id || Rooms.uid("room_") + this.id = opt.id || UidGenerator("room_") this.rect = opt.rect this.regions = [] this.walls = [] diff --git a/public/assets/javascripts/rectangles/models/vec2.js b/public/assets/javascripts/rectangles/models/vec2.js index 5c2b519..b0c88c1 100644 --- a/public/assets/javascripts/rectangles/models/vec2.js +++ b/public/assets/javascripts/rectangles/models/vec2.js @@ -7,7 +7,7 @@ return this.b-this.a } vec2.prototype.length = function(){ - return abs(this.b-this.a) + return Math.abs(this.b-this.a) } vec2.prototype.dist = function(){ return dist(0,this.a,0,this.b) diff --git a/public/assets/javascripts/rectangles/util/colors.js b/public/assets/javascripts/rectangles/util/colors.js index c590072..95827cc 100644 --- a/public/assets/javascripts/rectangles/util/colors.js +++ b/public/assets/javascripts/rectangles/util/colors.js @@ -3,6 +3,12 @@ alpha: [ "rgba(0,0,0,0.1)", ], + alphaQuad: [ + "rgba(0,0,0,0.1)", + "rgba(0,0,0,0.1)", + "rgba(0,0,0,0.1)", + "rgba(0,0,0,0.1)", + ], redblue: [ "rgba(0,0,0,0.2)", "rgba(255,0,0,0.2)", @@ -52,9 +58,9 @@ select.blur() }) - window.colors = color_palettes[select ? select.value : 'bone'] + window.colors = color_palettes[select ? select.value : 'alphaQuad'] window.grayColors = {} - _.zip([FRONT, LEFT, BACK, RIGHT], color_palettes.bone).map(function(pair){ + _.zip([FRONT, LEFT, BACK, RIGHT], color_palettes.alphaQuad).map(function(pair){ window.grayColors[pair[0]] = pair[1] }) window.palettes = color_palettes diff --git a/public/assets/javascripts/rectangles/util/uid.js b/public/assets/javascripts/rectangles/util/uid.js index 648bf0c..50d18c5 100644 --- a/public/assets/javascripts/rectangles/util/uid.js +++ b/public/assets/javascripts/rectangles/util/uid.js @@ -1,9 +1,8 @@ - (function(){ var UidGenerator = function(list){ var id = 0 - return function(s){ + var generator = function(s){ s = s || "" var ss while (1) { @@ -13,13 +12,18 @@ } } } + generator.setList = function(newList){ + list = newList + } + return generator } if ('window' in this) { - window.UidGenerator = UidGenerator + window.UidGenerator = new UidGenerator } else { - module.exports = UidGenerator + module.exports = new UidGenerator } })() + diff --git a/test/00-setup.js b/test/00-setup.js index 8d06a13..78ad2c4 100644 --- a/test/00-setup.js +++ b/test/00-setup.js @@ -1,2 +1,2 @@ -Error.stackTraceLimit = 1 +Error.stackTraceLimit = 5 diff --git a/test/02-test-rect.js b/test/02-test-rect.js index 55f1ec9..29998da 100644 --- a/test/02-test-rect.js +++ b/test/02-test-rect.js @@ -183,6 +183,28 @@ describe('rect', function(){ it('corner splits on all 4 sides', function(){ assert.equal(ALL, sides(s1)) }) + + var rect_map = {} + var corner_map = {} + var rect_state = s0.forEach(function(r){ + rect_map[r.sides] = rect_map[r.sides] || [] + rect_map[r.sides].push(r) + }) + var corner_state = s1.forEach(function(r){ + corner_map[r.sides] = corner_map[r.sides] || [] + corner_map[r.sides].push(r) + }) + + it('rect contains a rect with no sides', function(){ + assert.equal(1, rect_map[0].length) + }) + it('corner contains a rect with no sides', function(){ + assert.equal(1, corner_map[0].length) + }) + it('rect and corner overlap', function(){ + assert.equal(String(rect_map[0][0]), String(corner_map[0][0])) + }) + }) }) diff --git a/test/03-test-clipping.js b/test/03-test-clipping.js index 1668bd1..4743eb0 100644 --- a/test/03-test-clipping.js +++ b/test/03-test-clipping.js @@ -1,5 +1,5 @@ var assert = require("assert") -var vec2 = require("../public/assets/javascripts/rectangles/models/vec2.js") +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") @@ -7,15 +7,78 @@ var Clipper = require("../public/assets/javascripts/rectangles/engine/rooms/clip 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,4), new vec(1,4) ) +var east = new Rect( new vec(2,5), new vec(1,4) ) +var corner = new Rect( new vec(3,5), new vec(3,5) ) + +function report(a) { + console.log( a.join("\n") ) +} + describe('clipper', function(){ - describe('#intersects()', function(){ - // var rect = new Rect(0, 0, 10, 10) + 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('intersects itself', function(){ - assert.equal(true, rect.intersects( new Rect(0, 0, 10, 10) )); + 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) + }) }) + }) + -- cgit v1.2.3-70-g09d2 From 1e044ca74467d5ff46292822a274e678bd74a9b3 Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Tue, 29 Jul 2014 18:02:11 -0400 Subject: uid fixes --- public/assets/img/playbutton.png | Bin 0 -> 3616 bytes .../assets/javascripts/rectangles/engine/rooms/_rooms.js | 2 +- .../javascripts/rectangles/engine/scenery/_scenery.js | 2 +- public/assets/javascripts/rectangles/models/room.js | 6 +++--- public/assets/javascripts/rectangles/util/uid.js | 4 ++-- public/assets/javascripts/ui/editor/MediaViewer.js | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) create mode 100644 public/assets/img/playbutton.png (limited to 'public/assets/javascripts/rectangles/util/uid.js') diff --git a/public/assets/img/playbutton.png b/public/assets/img/playbutton.png new file mode 100644 index 0000000..51ad4a4 Binary files /dev/null and b/public/assets/img/playbutton.png differ diff --git a/public/assets/javascripts/rectangles/engine/rooms/_rooms.js b/public/assets/javascripts/rectangles/engine/rooms/_rooms.js index 4ad3e2c..29dee41 100644 --- a/public/assets/javascripts/rectangles/engine/rooms/_rooms.js +++ b/public/assets/javascripts/rectangles/engine/rooms/_rooms.js @@ -38,7 +38,7 @@ base.walls = {} base.regions = [] - UidGenerator.setList(base.list) + base.uid = new UidGenerator(base.list) base.init = function(){ Rooms.builder.init() diff --git a/public/assets/javascripts/rectangles/engine/scenery/_scenery.js b/public/assets/javascripts/rectangles/engine/scenery/_scenery.js index abd14ba..fe5f037 100644 --- a/public/assets/javascripts/rectangles/engine/scenery/_scenery.js +++ b/public/assets/javascripts/rectangles/engine/scenery/_scenery.js @@ -40,7 +40,7 @@ var Scenery = new function(){ media && media.destroy() } - base.uid = UidGenerator(base.list) + base.uid = new UidGenerator(base.list) base.forEach = function(f){ return base.values().forEach(f) diff --git a/public/assets/javascripts/rectangles/models/room.js b/public/assets/javascripts/rectangles/models/room.js index 32549e9..d19ca2f 100644 --- a/public/assets/javascripts/rectangles/models/room.js +++ b/public/assets/javascripts/rectangles/models/room.js @@ -1,16 +1,16 @@ (function(){ - var vec2, Rect, UidGenerator, sort + var vec2, Rect, sort if ('window' in this) { vec2 = window.vec2 Rect = window.Rect - UidGenerator = window.UidGenerator sort = window.sort } else { vec2 = require('./vec2') Rect = require('./rect') UidGenerator = require('../util/uid') + Rooms = { uid: new UidGenerator({}) } sort = require('../util/sort') FRONT = 0x1, BACK = 0x2, LEFT = 0x4, RIGHT = 0x8, FLOOR = 0x10, CEILING = 0x20 TOP = CEILING, BOTTOM = FLOOR @@ -29,7 +29,7 @@ } var Room = function(opt){ - this.id = opt.id || UidGenerator("room_") + this.id = opt.id || Rooms.uid("room_") this.rect = opt.rect this.regions = [] this.walls = [] diff --git a/public/assets/javascripts/rectangles/util/uid.js b/public/assets/javascripts/rectangles/util/uid.js index 50d18c5..0c0b176 100644 --- a/public/assets/javascripts/rectangles/util/uid.js +++ b/public/assets/javascripts/rectangles/util/uid.js @@ -19,10 +19,10 @@ } if ('window' in this) { - window.UidGenerator = new UidGenerator + window.UidGenerator = UidGenerator } else { - module.exports = new UidGenerator + module.exports = UidGenerator } })() diff --git a/public/assets/javascripts/ui/editor/MediaViewer.js b/public/assets/javascripts/ui/editor/MediaViewer.js index 264ed7c..5540023 100644 --- a/public/assets/javascripts/ui/editor/MediaViewer.js +++ b/public/assets/javascripts/ui/editor/MediaViewer.js @@ -133,10 +133,10 @@ var MediaViewer = ModalView.extend({ var $floatingImg = $('.floatingImg'); Scenery.nextMedia = media - + console.log(media.type) switch (media.type) { case "video": - $floatingImg.attr('src', 'http://www.rawrcast.com/wp-content/uploads/2010/02/BluePlayButton.png') + $floatingImg.attr('src', '/assets/img/playbutton.png') break default: -- cgit v1.2.3-70-g09d2