summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/rectangles
diff options
context:
space:
mode:
authorJulie Lala <jules@okfoc.us>2014-06-10 19:46:53 -0400
committerJulie Lala <jules@okfoc.us>2014-06-10 19:46:53 -0400
commit4e4b5b5668835097f335efaf55dfe837eec7dc3c (patch)
tree5cd6cb12a203c5dd7c8cf9f62b9cd9235e52513c /public/assets/javascripts/rectangles
parent3074488306e041718dec221ff9142748e2e68916 (diff)
parentb231af3e38b8f066f18031fd69b0fdb30a5e244a (diff)
Merge branch 'master' of github.com:okfocus/vvalls
Diffstat (limited to 'public/assets/javascripts/rectangles')
-rw-r--r--public/assets/javascripts/rectangles/_env.js28
-rw-r--r--public/assets/javascripts/rectangles/engine/map/_map.js5
-rw-r--r--public/assets/javascripts/rectangles/engine/map/draw.js32
-rw-r--r--public/assets/javascripts/rectangles/engine/map/ui.js2
-rw-r--r--public/assets/javascripts/rectangles/engine/rooms/_rooms.js71
-rw-r--r--public/assets/javascripts/rectangles/engine/rooms/clipper.js8
-rw-r--r--public/assets/javascripts/rectangles/models/rect.js3
-rw-r--r--public/assets/javascripts/rectangles/models/room.js12
-rw-r--r--public/assets/javascripts/rectangles/models/vec2.js3
-rw-r--r--public/assets/javascripts/rectangles/util/colors.js2
-rw-r--r--public/assets/javascripts/rectangles/util/sort.js2
11 files changed, 121 insertions, 47 deletions
diff --git a/public/assets/javascripts/rectangles/_env.js b/public/assets/javascripts/rectangles/_env.js
index 09d1532..46b43a9 100644
--- a/public/assets/javascripts/rectangles/_env.js
+++ b/public/assets/javascripts/rectangles/_env.js
@@ -1,6 +1,8 @@
-
var environment = new function(){}
environment.init = function(){
+
+ map = new Map ()
+
if (window.scene) {
scene.camera.move({
"x": 0,
@@ -20,18 +22,18 @@ environment.init = function(){
map.center.a = 0
map.center.b = 0
- Rooms.list.push( new Room ({
- rect: new Rect(-500,-500, 500,500),
- height: 500,
- }))
- Rooms.list.push( new Room ({
- rect: new Rect(600,0, 1100,500),
- height: 500,
- }))
- Rooms.list.push( new Room ({
- rect: new Rect(450,150, 650,350),
- height: 300,
- }))
+// Rooms.add( new Room ({
+// rect: new Rect(-500,-500, 500,500),
+// height: 500,
+// }))
+// Rooms.add( new Room ({
+// rect: new Rect(600,0, 1100,500),
+// height: 500,
+// }))
+// Rooms.add( new Room ({
+// rect: new Rect(450,150, 650,350),
+// height: 300,
+// }))
app.movements.gravity(true)
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
diff --git a/public/assets/javascripts/rectangles/models/rect.js b/public/assets/javascripts/rectangles/models/rect.js
index 7a2ac6f..cb14e66 100644
--- a/public/assets/javascripts/rectangles/models/rect.js
+++ b/public/assets/javascripts/rectangles/models/rect.js
@@ -94,6 +94,9 @@ window.Rect = (function(){
var s = "[" + this.x.toString() + " " + this.y.toString() + "] " + sides
return s
}
+ Rect.prototype.serialize = function(){
+ return { x: this.x.serialize(), y: this.y.serialize() }
+ }
Rect.prototype.quantize = function(n){
this.x.quantize(n)
this.y.quantize(n)
diff --git a/public/assets/javascripts/rectangles/models/room.js b/public/assets/javascripts/rectangles/models/room.js
index 731411c..d0478b3 100644
--- a/public/assets/javascripts/rectangles/models/room.js
+++ b/public/assets/javascripts/rectangles/models/room.js
@@ -1,7 +1,7 @@
window.Room = (function(){
var Room = function(opt){
- this.id = opt.id || Rooms.list.length
+ this.id = opt.id || Rooms.uid("room_")
this.rect = opt.rect
this.regions = []
this.walls = []
@@ -15,7 +15,15 @@ window.Room = (function(){
Room.prototype.toString = function(){
return this.rect.toString()
}
-
+
+ Room.prototype.serialize = function(){
+ return {
+ id: this.id,
+ rect: this.rect.serialize(),
+ height: ~~this.height,
+ }
+ }
+
Room.prototype.reset = function(){
var copy = this.rect.clone()
copy.id = this.id
diff --git a/public/assets/javascripts/rectangles/models/vec2.js b/public/assets/javascripts/rectangles/models/vec2.js
index 9b0447c..e56a010 100644
--- a/public/assets/javascripts/rectangles/models/vec2.js
+++ b/public/assets/javascripts/rectangles/models/vec2.js
@@ -91,6 +91,9 @@ vec2.prototype.intersection = function(v){
vec2.prototype.toString = function(){
return "[" + ~~this.a + " " + ~~this.b + "]"
}
+vec2.prototype.serialize = function(){
+ return [ ~~this.a, ~~this.b ]
+}
vec2.prototype.quantize = function(n){
n = n || 10
this.a = quantize(this.a, n)
diff --git a/public/assets/javascripts/rectangles/util/colors.js b/public/assets/javascripts/rectangles/util/colors.js
index d970b0b..58553b1 100644
--- a/public/assets/javascripts/rectangles/util/colors.js
+++ b/public/assets/javascripts/rectangles/util/colors.js
@@ -44,7 +44,7 @@
var select = document.querySelector("#palette")
select && select.addEventListener("change", function(){
colors = color_palettes[select.value]
- Rooms.list.forEach(function(room){
+ Rooms.forEach(function(room){
room.walls.forEach(function(wall){
wall.randomize_colors()
})
diff --git a/public/assets/javascripts/rectangles/util/sort.js b/public/assets/javascripts/rectangles/util/sort.js
index 0985b75..a0665ae 100644
--- a/public/assets/javascripts/rectangles/util/sort.js
+++ b/public/assets/javascripts/rectangles/util/sort.js
@@ -64,7 +64,7 @@ function sort_rooms_by_position(list){
function sort_rooms_by_area(list){
return list.map(room_area_tuple)
.sort(compare_car)
- .map(cdr)
+ .map(cdr)
}
function sort_rects_by_position(list){