Skip to content
This repository was archived by the owner on Aug 24, 2024. It is now read-only.

Commit 0613170

Browse files
committed
Less nesting
1 parent bac494f commit 0613170

File tree

1 file changed

+46
-58
lines changed

1 file changed

+46
-58
lines changed

src/conjam.gleam

+46-58
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import canvas/canvas
2+
import gleam/bool
23
import gleam/float
34
import gleam/int
45
import gleam/list
@@ -14,47 +15,38 @@ fn apply_gravity(
1415
y: Int,
1516
) -> canvas.ImageData {
1617
use <- canvas.ensure_pixel_exists(frame_data, x, y)
17-
18-
case y == max_y {
19-
True -> frame_data
20-
False -> {
21-
let pixel_val =
22-
frame_data
23-
|> canvas.get_pixel(x, y)
24-
let below_pixel_val =
25-
frame_data
26-
|> canvas.get_pixel(x, y + 1)
27-
let below_left_pixel_val =
28-
frame_data
29-
|> canvas.get_pixel(x - 1, y + 1)
30-
let below_right_pixel_val =
31-
frame_data
32-
|> canvas.get_pixel(x + 1, y + 1)
33-
34-
case
35-
pixel_val,
36-
below_pixel_val,
37-
below_left_pixel_val,
38-
below_right_pixel_val
39-
{
40-
0x00000000, _, _, _ -> frame_data
41-
_, 0x00000000, _, _ ->
42-
frame_data
43-
|> canvas.set_pixel(x, y + 1, pixel_val)
44-
|> canvas.set_pixel(x, y, 0x00000000)
45-
_, _, 0x00000000, _ if x > 0 -> {
46-
frame_data
47-
|> canvas.set_pixel(x - 1, y + 1, pixel_val)
48-
|> canvas.set_pixel(x, y, 0x00000000)
49-
}
50-
_, _, _, 0x00000000 if x < max_x -> {
51-
frame_data
52-
|> canvas.set_pixel(x + 1, y + 1, pixel_val)
53-
|> canvas.set_pixel(x, y, 0x00000000)
54-
}
55-
_, _, _, _ -> frame_data
56-
}
18+
use <- bool.guard(when: y == max_y, return: frame_data)
19+
20+
let pixel_val =
21+
frame_data
22+
|> canvas.get_pixel(x, y)
23+
let below_pixel_val =
24+
frame_data
25+
|> canvas.get_pixel(x, y + 1)
26+
let below_left_pixel_val =
27+
frame_data
28+
|> canvas.get_pixel(x - 1, y + 1)
29+
let below_right_pixel_val =
30+
frame_data
31+
|> canvas.get_pixel(x + 1, y + 1)
32+
33+
case pixel_val, below_pixel_val, below_left_pixel_val, below_right_pixel_val {
34+
0x00000000, _, _, _ -> frame_data
35+
_, 0x00000000, _, _ ->
36+
frame_data
37+
|> canvas.set_pixel(x, y + 1, pixel_val)
38+
|> canvas.set_pixel(x, y, 0x00000000)
39+
_, _, 0x00000000, _ if x > 0 -> {
40+
frame_data
41+
|> canvas.set_pixel(x - 1, y + 1, pixel_val)
42+
|> canvas.set_pixel(x, y, 0x00000000)
5743
}
44+
_, _, _, 0x00000000 if x < max_x -> {
45+
frame_data
46+
|> canvas.set_pixel(x + 1, y + 1, pixel_val)
47+
|> canvas.set_pixel(x, y, 0x00000000)
48+
}
49+
_, _, _, _ -> frame_data
5850
}
5951
}
6052

@@ -64,24 +56,20 @@ fn collapse_like(
6456
y: Int,
6557
) -> canvas.ImageData {
6658
use <- canvas.ensure_pixel_exists(frame_data, x, y)
67-
68-
case y == 0 {
69-
True -> frame_data
70-
False -> {
71-
let pixel_val =
72-
frame_data
73-
|> canvas.get_pixel(x, y)
74-
let above_pixel_val =
75-
frame_data
76-
|> canvas.get_pixel(x, y - 1)
77-
78-
case pixel_val == above_pixel_val && pixel_val != 0x00000000 {
79-
True ->
80-
frame_data
81-
|> canvas.set_pixel(x, y, 0x00000000)
82-
False -> frame_data
83-
}
84-
}
59+
use <- bool.guard(when: y == 0, return: frame_data)
60+
61+
let pixel_val =
62+
frame_data
63+
|> canvas.get_pixel(x, y)
64+
let above_pixel_val =
65+
frame_data
66+
|> canvas.get_pixel(x, y - 1)
67+
68+
case pixel_val == above_pixel_val && pixel_val != 0x00000000 {
69+
True ->
70+
frame_data
71+
|> canvas.set_pixel(x, y, 0x00000000)
72+
False -> frame_data
8573
}
8674
}
8775

0 commit comments

Comments
 (0)