Component = require("ecs.component") sprites = require("sprites") gworld = require("shaders.world") world = require("world") log = require("log") sd = sprites.floor w1 = sprites.wall1_diffuse panel = { vec3(0, 1, 0.4), vec3(1, 1, 0.4), vec3(1, 0, 0.4), vec3(1, 0, 0.4), vec3(0, 0, 0.4), vec3(0, 1, 0.4) } class GraphicsComponent extends Component new: (name, properties) => --assert(properties and properties.node , "Failed to find node for graphics component") --assert(@@node, ".node not set for GraphicsComponent") assert(world.geom_view,".geom_view not set for world") assert(world.uv_view, ".uv_view not set for world") --@node = properties.node super(name, properties) static: () => @@static join: () => --log.info("Joining with graphics component" .. tostring(@node), {"graphics"}) --@@node\append(@node) gworld.add(@) leave: () => gworld.remove(@) --@@node\remove(@node) node: () => error("Tried to access graphic component's .node") --@properties.node tris: () => 2 populate_buf: (geom_view, uv_view, offset) => assert(@properties.graphic, "Graphics component needs a graphic") assert(offset == 1, "Offset was " .. tostring(offset)) log.info("Populating:" .. tostring(offset) .. ":" .. tostring(@properties.graphic), {"graphic","ecs"}) log.info(debug.traceback(), {"graphic","ecs"}) log.info("Populating with:" .. tostring(panel),{"graphic","ecs"}) geom_view\set(panel, offset, @tris! * 3) @geom_view = geom_view @uv_view = uv_view @offset = offset uv = @properties.graphic uv_view[1] = vec4(uv.s1,uv.t1,1,1) uv_view[2] = vec4(uv.s1,uv.t2,1,1) uv_view[3] = vec4(uv.s2,uv.t2,1,1) uv_view[4] = vec4(uv.s2,uv.t2,1,1) uv_view[5] = vec4(uv.s2,uv.t1,1,1) uv_view[6] = vec4(uv.s1,uv.t1,1,1) --error("Graphics components must override .populate_buf()") move: (move_off) => for i, set in ipairs(panel) @geom_view[@offset + i - 1] = @geom_view[@offset + i - 1] + move_off moveto: (loc) => assert(@offset, "Moveto called before populate_buf") for i, set in ipairs(panel) @geom_view[@offset + i - 1] = loc + set GraphicsComponent