X Tutup
Skip to content

Commit f8a32b3

Browse files
committed
title screen and transition
1 parent eb648ff commit f8a32b3

File tree

2 files changed

+89
-11
lines changed

2 files changed

+89
-11
lines changed

main.moon

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class World
6666
collides: (thing) =>
6767
@bg\collides thing
6868

69-
class Game
69+
export class Game
7070
new: =>
7171
@viewport = EffectViewport scale: 4
7272

@@ -95,22 +95,26 @@ class Game
9595
snapper = nil
9696

9797
love.load = ->
98-
export game = Game!
98+
export dispatch = Dispatch TitleScreen!
99+
-- export game = Game!
99100

100101
font_image = imgfy"img/font.png"
101102

102103
font = g.newImageFont font_image.tex, " 1234567890"
103104
g.setFont font
104105

105106
love.mousepressed = (x,y, button) ->
106-
x, y = game.viewport\unproject x, y
107-
-- emitters.PourSmoke\add w, x, y
107+
if game
108+
x, y = game.viewport\unproject x, y
109+
-- emitters.PourSmoke\add w, x, y
108110

109111
love.keypressed = (key, code) ->
112+
return if dispatch\send_key key, code
113+
110114
switch key
111115
when "escape" then os.exit!
112116
when "d"
113-
game.player\die!
117+
game.player\die! if game
114118
when "x" -- cool
115119
if snapper
116120
slow_mode = false
@@ -125,9 +129,9 @@ love.load = ->
125129
love.update = (dt) ->
126130
reloader\update!
127131
dt /= 3 if slow_mode
128-
game\update dt
132+
dispatch\update dt
129133

130134
love.draw = ->
131135
snapper\tick! if snapper
132-
game\draw!
136+
dispatch\draw!
133137

ui.moon

Lines changed: 78 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,88 @@
11

22
g = love.graphics
33
import timer, keyboard from love
4+
import insert, remove from table
45

56
export *
67

7-
class Dispatch -- this holds the stack of stuff
8-
nil
8+
-- ugh
9+
fade_effect = (prev, current, t) ->
10+
t = smoothstep 0, 1, t
11+
12+
if t < 0.5
13+
prev\draw!
14+
15+
g.setColor 0,0,0, 255 * t * 2
16+
g.rectangle "fill", 0,0, g.getWidth!, g.getHeight!
17+
g.setColor 255,255,255,255
18+
else
19+
current\draw!
20+
21+
g.setColor 0,0,0, 255 * (1 - t) * 2
22+
g.rectangle "fill", 0,0, g.getWidth!, g.getHeight!
23+
g.setColor 255,255,255,255
24+
25+
class Dispatch
26+
new: (initial) =>
27+
@stack = { initial }
28+
29+
send: (event, ...) =>
30+
current = @top!
31+
current[event] current, ... if current and current[event]
32+
33+
send_key: (...) => @send "on_key", ...
34+
35+
top: => @stack[#@stack]
36+
parent: => @stack[#@stack - 1]
37+
38+
push: (state) =>
39+
@blend_effect = nil
40+
insert @stack, state
41+
42+
push_with_effect: (state, time, efx) =>
43+
@elapsed = 0
44+
@effect_time = time
45+
46+
prev = @top!
47+
@blend_effect = (t) => efx prev, state, t
48+
49+
insert @stack, state
50+
51+
pop: =>
52+
@blend_effect = nil
53+
54+
os.exit! if #stack == 0
55+
remove @stack
56+
57+
draw: =>
58+
if @blend_effect
59+
@blend_effect @elapsed / @effect_time
60+
else
61+
@send "draw"
62+
63+
update: (dt) =>
64+
if @blend_effect
65+
@elapsed += dt
66+
@blend_effect = nil if @elapsed > @effect_time
67+
68+
@send "update", dt
969

1070
class TitleScreen
11-
nil
71+
new: =>
72+
@viewport = Viewport scale: 4
73+
@img = imgfy"img/title.png"
74+
75+
on_key: (key) =>
76+
switch key
77+
when "escape" then os.exit!
78+
when "return" then @start_game!
79+
80+
start_game: =>
81+
dispatch\push_with_effect Game!, 1, fade_effect
82+
83+
draw: =>
84+
@viewport\apply!
85+
@img\draw 0, 0
1286

1387
class GameOver
1488
high_scores: {
@@ -65,6 +139,6 @@ class Hud
65139
if @display_score < @score
66140
@display_score += dt * math.max 200, @score - @display_score
67141
@display_score = math.min @display_score, @score
68-
142+
69143
@health_bar.value = @player.health / @player.max_health
70144

0 commit comments

Comments
 (0)
X Tutup