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
|