aboutsummaryrefslogtreecommitdiff
path: root/src/ui.moon
blob: f46d8b2bd4dc522c79c56676d9b9e9170992b550 (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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
--sprite packing sepcs
bp = require "broadphase"
main = require "main"
action = require "action"
color = require "color"
reg = require "ability_reg"
char = require "char"
import Enemy from char
mod = ...

mod.big_frame_top_left = {
	texture: "ui.png",
	s1: 0
	t1: 0
	s2: 0
	t2: 0
	--hold on, maybe don't do this since we would have to mess with imagebuffers and textures
}

mod.create_big_button = (node, segments, x, y) ->
	--Constants
	section_width = 32

	ret = {}
	trans = am.translate(x,y)
	button = am.group!
	button\append(trans^ am.sprite("data/big_frame_top_left.png",vec4(1,1,1,1),"left","top"))
	for i = 1,segments - 2
		button\append(am.translate(((-32)*(segments/2)) + 32*i,y)^ am.sprite("data/big_frame_top_mid.png",vec4(1,1,1,1),"left","top"))
	button\append(am.translate((32*((segments/2)-1)),y)^ am.sprite("data/big_frame_top_right.png",vec4(1,1,1,1),"left","top"))
	ret["node"] = button
	bp.add(ret,x,y,segments*32,64)
	node\append(button)
	ret


mod.create_small_button = (node, segments, x, y) ->
	assert(node ~= nil, "node was nil")
	assert(type(segments) == "number","segments must be a numbeR")
	assert(segments > 1, "segments must be at least 2")
	--Constants
	section_width = 18
	section_height = 40

	ret = {}
	trans = am.translate(x,y)
	button = am.group!
	button\append(trans^ am.sprite("data/small_frame_left.png",vec4(1,1,1,1),"left","top"))
	for i = 1,segments - 2
		button\append(am.translate(x + (section_width*i),y)^ am.sprite("data/small_frame_mid.png",vec4(1,1,1,1),"left","top"))
	button\append(am.translate(x+(section_width*(segments - 1)),y)^ am.sprite("data/small_frame_right.png",vec4(1,1,1,1),"left","top"))
	ret["node"] = button
	bp.add(ret,x,y,segments*section_width,section_height)
	node\append(button)
	ret

mod.create_any_button = (node, x_segs, y_segs, x, y) ->
	assert(x_segs >= 2, "x must have at least 2 segments")
	assert(y_segs >= 2, "y must have at leats 2 segments")
	section_width, section_height = 32,32
	ret = {}
	button = am.group!
	button\append(am.translate(x,y)^ am.sprite("data/any_frame_top_left.png",vec4(1,1,1,1),"left","top"))
	for i = 1, x_segs - 2
		button\append(am.translate(x + (i * section_width),y)^ am.sprite("data/any_frame_top_mid.png",vec4(1,1,1,1),"left","top"))
	button\append(am.translate(x + ((x_segs-1)*section_width),y)^ am.sprite("data/any_frame_top_right.png",vec4(1,1,1,1),"left","top"))
	for i = 1, y_segs - 2
		button\append(am.translate(x,y - (i * section_height))^ am.sprite("data/any_frame_mid_left.png",vec4(1,1,1,1),"left","top"))
		for j = 1, x_segs - 2
			button\append(am.translate(x + (j * section_width),y - (i * section_height))^ am.sprite("data/any_frame_mid_mid.png",vec4(1,1,1,1),"left","top"))
		button\append(am.translate(x + ((x_segs-1)*section_width),y - (i * section_height))^ am.sprite("data/any_frame_mid_right.png",vec4(1,1,1,1),"left","top"))
	button\append(am.translate(x,y - ((y_segs-1)*section_height))^ am.sprite("data/any_frame_bot_left.png",vec4(1,1,1,1),"left","top"))
	for i = 1, x_segs - 2
		button\append(am.translate(x + (i * section_width),y - ((y_segs-1)*section_height))^ am.sprite("data/any_frame_bot_mid.png",vec4(1,1,1,1),"left","top"))
	button\append(am.translate(x+((x_segs-1)*section_width),y - ((y_segs-1)*section_height))^ am.sprite("data/any_frame_bot_right.png",vec4(1,1,1,1),"left","top"))
	button\append(am.translate(x,y)\tag("loc"))
	ret["node"] = button
	bp.add(ret,x,y,x_segs*section_width,y_segs*section_height)
	node\append(button)
	ret

mod.create_char_selector2 = (node) ->
	left = mod.create_any_button(node,2,2,96,100)
	right = mod.create_any_button(node,2,2,-96-(32*2),100)
	text = am.text("Loading...",vec4(1,1,1,1),"center","top")
	node\append(am.translate(0,100)^ text)
	{left, right, text}

mod.create_lobby_player = (node, peerid) ->
	floor_y = -200
	rng_x = math.random(main.width) - (main.width/2)

mod.create_char_selector = (node) ->
	s = am.group!
	slx = (-96/2)-18
	sly = (96/2)
	srx = (96/2)
	sry = (96/2)
	scroll_left_node = am.translate(slx,sly)^ am.sprite("data/selector_left.png", vec4(1,1,1,1), "left","top")
	scroll_left = {
		node: scroll_left_node
	}
	scroll_right_node = am.translate(srx,sry)^ am.sprite("data/selector_right.png", vec4(1,1,1,1), "left","top")
	scroll_right = {
		node: scroll_right_node
	}
	s\append(scroll_left_node)
	s\append(scroll_right_node)
	bp.add(scroll_left,slx,sly,18,40)
	bp.add(scroll_right,srx,sry,18,40)
	node\append(s)
	{scroll_left, scroll_right}

mod.fadeout = () ->
	fadeout_walltime = 0.1
	screen = main.root("screen")
	hw = main.width/2
	hh = main.height/2
	bg = color.bg
	start_color = vec4(bg.r,bg.g,bg.b,0)
	fadeout = am.rect(-hw,hh,hw,-hh,color.bg)\tag("fade")
	screen\action(am.tween(0.1, {
		color: color.bg
	}))

mod.fadein = () ->
	fadein_walltime = 0.1
	fade = main.root("fade")
	fade\action(am.tween(0.1, {
		color: color.transparent
	}))

mod.create_join_input = (node) ->
	segments=3
	button_width = segments*18
	button_height = 40
	cell_padding = 18
	grid_w = 4
	grid_h = 4
	buttons = {}
	--but = mod.create_small_button(node,3,-36,0)
	start_x = cell_padding - ((grid_w/2) * button_width) - (((grid_w - 1)/2) * cell_padding)
	start_y = 0 + ((grid_h/2) * button_height) + (((grid_h - 1)/2) * cell_padding)
	for i = 0,grid_h - 1
		for j = 0, grid_w - 1
			button_x = start_x + (j * button_width) + ((j-1) * cell_padding)
			button_y = start_y - (i * button_height) - ((i-1) * cell_padding)
			small_button = mod.create_small_button(node,3,button_x,button_y)
			table.insert(buttons, small_button)
			rnode = small_button.node
			text_map = {
				"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"
			}
			bt = text_map[(i * grid_w) + j + 1]
			rnode\append(am.translate(button_x+16,button_y-10)^ am.text(bt,vec4(1,1,1,1),"left","top"))
			small_button["text"] = bt
			
	selected = mod.create_big_button(node,6,-32*3,-100)
	buttons

mod.tween_hit = (char, target, at_f) -> -- char is a character, target is a location (number)
	x_from, x_to = char.node("char_translate").x, 0
	room = char.room
	if char.__class == Enemy then
		--x_from = room\enemy_location_of(char.data.location)
		x_to = room\player_location_of(target)
	else
		--x_from = room\player_location_of(char.data.location)
		x_to = room\enemy_location_of(target)
	am.wait(am.tween(char.node("char_translate"), 0.1, {x: x_to},am.windup))
	if at_f
		at_f!
	am.wait(am.tween(char.node("char_translate"), 0.1, {x: x_from},am.linear))

mod.build_infocard = (node, ability) ->
	x_segs = 10
	y_segs = 4
	x = -310
	y = 80 
	section_width, section_height = 32,32
	button = am.group!
	button\append(am.translate(x,y)^ am.sprite("data/any_frame_top_left.png",vec4(1,1,1,1),"left","top"))
	for i = 1, x_segs - 2
		button\append(am.translate(x + (i * section_width),y)^ am.sprite("data/any_frame_top_mid.png",vec4(1,1,1,1),"left","top"))
	button\append(am.translate(x + ((x_segs-1)*section_width),y)^ am.sprite("data/any_frame_top_right.png",vec4(1,1,1,1),"left","top"))
	for i = 1, y_segs - 2
		button\append(am.translate(x,y - (i * section_height))^ am.sprite("data/any_frame_mid_left.png",vec4(1,1,1,1),"left","top"))
		for j = 1, x_segs - 2
			button\append(am.translate(x + (j * section_width),y - (i * section_height))^ am.sprite("data/any_frame_mid_mid.png",vec4(1,1,1,1),"left","top"))
		button\append(am.translate(x + ((x_segs-1)*section_width),y - (i * section_height))^ am.sprite("data/any_frame_mid_right.png",vec4(1,1,1,1),"left","top"))
	button\append(am.translate(x,y - ((y_segs-1)*section_height))^ am.sprite("data/any_frame_bot_left.png",vec4(1,1,1,1),"left","top"))
	for i = 1, x_segs - 2
		button\append(am.translate(x + (i * section_width),y - ((y_segs-1)*section_height))^ am.sprite("data/any_frame_bot_mid.png",vec4(1,1,1,1),"left","top"))
	button\append(am.translate(x+((x_segs-1)*section_width),y - ((y_segs-1)*section_height))^ am.sprite("data/any_frame_bot_right.png",vec4(1,1,1,1),"left","top"))
	button\append(am.translate(x,y)\tag("loc"))
	button("loc")\append(am.scale(2)^ am.translate(16,-8)^ am.text(ability.text, color.fg, "left","top"))
	button("loc")\append(am.scale(1)^ am.translate(16,-48)^ am.text(ability.description, color.fg, "left","top"))
	button("loc")\append(am.scale(1)^ am.translate(16,-80)^ am.text("Speed:" .. tostring(ability.speed), color.fg, "left","top"))
	button("loc")\append(am.scale(1)^ am.translate(16,-108)^ am.text("Hits:",color.fg,"left","center"))
	for i = 1,8
		button("loc")\append(am.translate(42 + (i*24), -96)^ am.sprite("data/pip_frame.png",color.white,"left","top"))
		if ability.hits_icon[i] == 1
			button("loc")\append(am.translate(42 + (i*24), -96)^ am.sprite("data/pip_light.png",color.white,"left","top"))

	node\append(button)
	button
	

mod.battle_log = (text) ->
	sx, sy = math.random(-100,100), math.random(-40,40)
	trans = am.translate(sx,sy)
	trans\action(am.tween(3,{y:sy + 40}))
	t = am.text(text, color.fg)
	t\action(am.tween(3,{color:color.transparent}))
	t\action(coroutine.create( () ->
		am.wait(am.delay(4))
		main.root("screen")\remove(trans)
	))
	main.root("screen")\append(trans^ t)

mod