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