aboutsummaryrefslogtreecommitdiff
path: root/src/ecs/graphics.moon
blob: 66e5e809ff797e87502368c3fca8154214b633b5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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