aboutsummaryrefslogtreecommitdiff
path: root/src/prefab/lobby.moon
diff options
context:
space:
mode:
Diffstat (limited to 'src/prefab/lobby.moon')
-rw-r--r--src/prefab/lobby.moon112
1 files changed, 112 insertions, 0 deletions
diff --git a/src/prefab/lobby.moon b/src/prefab/lobby.moon
new file mode 100644
index 0000000..a560469
--- /dev/null
+++ b/src/prefab/lobby.moon
@@ -0,0 +1,112 @@
+sprites = require("sprites")
+GraphicsComponent = require("ecs.graphics")
+log = require("log")
+
+sd = sprites.floor
+w1 = sprites.wall
+
+floor = (x, y) ->
+ r = {
+ --floor
+ vec3(x,y,0),
+ vec3(x+1,y,0),
+ vec3(x+1,y-1,0),
+ vec3(x+1,y-1,0),
+ vec3(x,y-1,0),
+ vec3(x,y,0)
+ }
+ r
+
+floor_uv = (x, y) ->
+ r = {
+ vec4(sd.s1,sd.t1,1,1),
+ vec4(sd.s2,sd.t1,1,1),
+ vec4(sd.s2,sd.t2,1,1),
+ vec4(sd.s2,sd.t2,1,1),
+ vec4(sd.s1,sd.t2,1,1),
+ vec4(sd.s1,sd.t1,1,1)
+ }
+ r
+
+
+left_wall = (x,y) ->
+ r = {
+ -- Left wall
+ vec3(x+1,y,1),
+ vec3(x+1,y,0),
+ vec3(x+1,y-1,0),
+ vec3(x+1,y-1,0),
+ vec3(x+1,y-1,1),
+ vec3(x+1,y,1)
+ }
+ r
+
+left_wall_uv = (x,y) ->
+ r = {
+ vec4(w1.s1,w1.t1,1,1),
+ vec4(w1.s1,w1.t2,1,1),
+ vec4(w1.s2,w1.t2,1,1),
+ vec4(w1.s2,w1.t2,1,1),
+ vec4(w1.s2,w1.t1,1,1),
+ vec4(w1.s1,w1.t1,1,1)
+ }
+ r
+
+right_wall = (x,y) ->
+ r = {
+ --Right wall
+ vec3(x,y,0),
+ vec3(x,y,1),
+ vec3(x,y-1,1),
+ vec3(x,y-1,1),
+ vec3(x,y-1,0),
+ vec3(x,y,0)
+ }
+ r
+
+right_wall_uv = (x,y) ->
+ r = {
+ vec4(w1.s2,w1.t2,1,1),
+ vec4(w1.s2,w1.t1,1,1),
+ vec4(w1.s1,w1.t1,1,1),
+ vec4(w1.s1,w1.t1,1,1),
+ vec4(w1.s1,w1.t2,1,1),
+ vec4(w1.s2,w1.t2,1,1)
+ }
+ r
+
+compute = () ->
+ geom = {}
+ uv = {}
+ for x = 0,2
+ for y = 0,2
+ for _,v in ipairs(floor(x,y))
+ table.insert(geom,v)
+ for _,v in ipairs(floor_uv(x,y))
+ table.insert(uv,v)
+ for i = 0,2 -- room's left wall
+ for _,v in ipairs(left_wall(-1,i))
+ table.insert(geom,v)
+ for _,v in ipairs(left_wall_uv(-1,i))
+ table.insert(uv,v)
+ for i = 0,2 -- room's right wall
+ for _,v in ipairs(right_wall(3,i))
+ table.insert(geom,v)
+ for _,v in ipairs(right_wall_uv(3,i))
+ table.insert(uv,v)
+ geom, uv, #geom / 3
+
+
+class LobbyGraphic extends GraphicsComponent
+ new: (name, properties) =>
+ @geom, @uv, @n_tris = compute!
+ properties.graphic = sprites.floor.texture
+ super(name, properties)
+ tris: () =>
+ @n_tris
+ populate_buf: (geom_view, uv_view, offset) =>
+ log.info("Creating lobby graphic" .. tostring(@geom),{"level","graphic","lobby"})
+ geom_view\set(@geom, offset, @n_tris * 3)
+ uv_view\set(@uv, offset, @n_tris * 3)
+
+LobbyGraphic