aboutsummaryrefslogtreecommitdiff
path: root/src/prefab/lobby.moon
blob: a56046925205bdad42f1fc39ded18ceb69da7a3f (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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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