diff options
| author | Julie Lala <jules@okfoc.us> | 2014-06-10 19:46:53 -0400 |
|---|---|---|
| committer | Julie Lala <jules@okfoc.us> | 2014-06-10 19:46:53 -0400 |
| commit | 4e4b5b5668835097f335efaf55dfe837eec7dc3c (patch) | |
| tree | 5cd6cb12a203c5dd7c8cf9f62b9cd9235e52513c /public/assets/javascripts/rectangles/engine | |
| parent | 3074488306e041718dec221ff9142748e2e68916 (diff) | |
| parent | b231af3e38b8f066f18031fd69b0fdb30a5e244a (diff) | |
Merge branch 'master' of github.com:okfocus/vvalls
Diffstat (limited to 'public/assets/javascripts/rectangles/engine')
5 files changed, 88 insertions, 30 deletions
diff --git a/public/assets/javascripts/rectangles/engine/map/_map.js b/public/assets/javascripts/rectangles/engine/map/_map.js index b62a813..855ca5d 100644 --- a/public/assets/javascripts/rectangles/engine/map/_map.js +++ b/public/assets/javascripts/rectangles/engine/map/_map.js @@ -3,7 +3,7 @@ window.ctx = window.w = window.h = null; -var map = new function(){ +var Map = function(){ var base = this base.el = document.querySelector("#map") @@ -31,6 +31,9 @@ var map = new function(){ var w = window.w = canvas.width = base.dimensions.a var h = window.h = canvas.height = base.dimensions.b document.querySelector("#map").appendChild(canvas) + + base.draw = new MapDraw (base) + base.ui = new MapUI (base) base.update = function(){ base.draw.animate() diff --git a/public/assets/javascripts/rectangles/engine/map/draw.js b/public/assets/javascripts/rectangles/engine/map/draw.js index ec60d31..75e8ad1 100644 --- a/public/assets/javascripts/rectangles/engine/map/draw.js +++ b/public/assets/javascripts/rectangles/engine/map/draw.js @@ -1,33 +1,33 @@ -map.draw = new function(){ +var MapDraw = function(map){ - var base = this + var draw = this - base.animate = function(){ + draw.animate = function(){ ctx.save() - map.draw.clear_canvas() - map.draw.ruler() + draw.clear_canvas() + draw.ruler() ctx.translate( map.bounds.a * 1/2, map.bounds.b * 1/2) ctx.scale( map.zoom, map.zoom ) ctx.translate( map.center.a, map.center.b) ctx.scale( -1, 1 ) - map.draw.regions(Rooms.regions) - map.draw.mouse(map.ui.mouse.cursor) - map.draw.coords() - scene && map.draw.camera(scene.camera) + draw.regions(Rooms.regions) + draw.mouse(map.ui.mouse.cursor) + draw.coords() + scene && draw.camera(scene.camera) ctx.restore() } - base.clear_canvas = function(){ + draw.clear_canvas = function(){ ctx.fillStyle = "rgba(255,255,255,0.9)" ctx.clearRect(0,0,w,h) ctx.fillRect(0,0,w,h) } - base.ruler = function (){ + draw.ruler = function (){ ctx.strokeStyle = "rgba(80,80,80,0.5)" ctx.lineWidth = 1 var len = 5 @@ -37,16 +37,18 @@ map.draw = new function(){ } } - base.regions = function(regions){ + draw.regions = function(regions){ for (var i = 0; i < regions.length; i++) { if (regions[i].dupe) continue ctx.fillStyle = colors[i % colors.length] + ctx.strokeStyle = "#000" + ctx.lineWidth = (1 / map.zoom) fill_region(regions[i]) stroke_sides(regions[i]) } } - base.mouse = function(mouse){ + draw.mouse = function(mouse){ var radius = 3 / map.zoom ctx.fillStyle = "rgba(255,0,0,0.4)"; @@ -65,7 +67,7 @@ map.draw = new function(){ } } - base.camera = function(cam){ + draw.camera = function(cam){ ctx.lineWidth = 0.5 ctx.save() @@ -88,7 +90,7 @@ map.draw = new function(){ ctx.restore() } - base.coords = function(){ + draw.coords = function(){ ctx.fillStyle = "#888"; dot_at(0,0) ctx.fillStyle = "#bbb"; diff --git a/public/assets/javascripts/rectangles/engine/map/ui.js b/public/assets/javascripts/rectangles/engine/map/ui.js index 6e9a5ab..63e8e18 100644 --- a/public/assets/javascripts/rectangles/engine/map/ui.js +++ b/public/assets/javascripts/rectangles/engine/map/ui.js @@ -1,5 +1,5 @@ -map.ui = new function(){ +var MapUI = function(map){ var base = this diff --git a/public/assets/javascripts/rectangles/engine/rooms/_rooms.js b/public/assets/javascripts/rectangles/engine/rooms/_rooms.js index 411a093..a51edb9 100644 --- a/public/assets/javascripts/rectangles/engine/rooms/_rooms.js +++ b/public/assets/javascripts/rectangles/engine/rooms/_rooms.js @@ -2,7 +2,7 @@ var Rooms = new function(){ var base = this - base.list = [] + base.list = {} base.regions = [] base.init = function(){ @@ -12,30 +12,83 @@ var Rooms = new function(){ } base.filter = function(f){ - return base.list.filter(f) + return _.values(base.list).filter(f) + } + + base.add = function(room){ + base.list[room.id] = room } base.add_with_rect = function(rect){ var room = new Room({ - id: base.list.length, rect: rect, - height: quantize(randrange(300,800), 50), + height: 500 // quantize(randrange(300,800), 50), }) - base.list.push(room) + base.add(room) + } + + base.remove = function(room){ + delete base.list[room.id] + } + + base.count = function(){ + return this.values().length } base.forEach = function(f){ - return base.list.forEach(f) + return base.values().forEach(f) + } + base.map = function(f){ + return base.values().map(f) + } + + base.values = function(){ + return _.values(base.list) } + + base.serialize = function(){ + var rooms = base.map(function(room){ + return room.serialize() + }) + var rooms_data = { rooms: rooms } + return rooms_data + } + + base.deserialize = function(rooms_data){ + rooms_data.rooms.forEach(function(data){ + var rect = new Rect(data.rect.x[0], data.rect.y[0], data.rect.x[1], data.rect.y[1]) + var room = new Room({ + id: data.id, + rect: rect, + height: data.height + }) + base.add(room) + }) + } + + base.uid = (function(){ + var id = 0 + return function(s){ + s = s || "" + var ss + while (1) { + ss = s + (id++) + if (! (ss in base.list)) { + return ss + } + } + } + })() + base.sorted_by_position = function(){ - return sort_rooms_by_position( base.list ) + return sort_rooms_by_position( base.values() ) } base.sorted_by_height = function(){ - return sort_rooms_by_height( base.list ) + return sort_rooms_by_height( base.values() ) } base.sorted_by_area = function(){ - return sort_rooms_by_area( base.list ) + return sort_rooms_by_area( base.values() ) } } diff --git a/public/assets/javascripts/rectangles/engine/rooms/clipper.js b/public/assets/javascripts/rectangles/engine/rooms/clipper.js index 8989ba8..0854013 100644 --- a/public/assets/javascripts/rectangles/engine/rooms/clipper.js +++ b/public/assets/javascripts/rectangles/engine/rooms/clipper.js @@ -20,7 +20,7 @@ Rooms.clipper = new function(){ // Given a set of overlapping rooms, clip any intersections, then cull any duplicate polygons base.solve_rects = function(){ - if (Rooms.list.length == 0) return + if (Rooms.count() == 0) return base.reset_rects() base.clip_rects() @@ -31,9 +31,9 @@ Rooms.clipper = new function(){ // Reset the clipping/culling states of each of the rooms base.reset_rects = function(){ - for (var i = 0; i < Rooms.list.length; i++) { - Rooms.list[i].reset() - } + Rooms.forEach(function(room){ + room.reset() + }) } // Compare each room to the rooms it overlaps, and subdivide |
