diff options
Diffstat (limited to 'src/prefab/lobby.moon')
| -rw-r--r-- | src/prefab/lobby.moon | 112 |
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 |
