1
1
import canvas/canvas
2
+ import gleam/bool
2
3
import gleam/float
3
4
import gleam/int
4
5
import gleam/list
@@ -14,47 +15,38 @@ fn apply_gravity(
14
15
y : Int ,
15
16
) -> canvas . ImageData {
16
17
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 )
57
43
}
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
58
50
}
59
51
}
60
52
@@ -64,24 +56,20 @@ fn collapse_like(
64
56
y : Int ,
65
57
) -> canvas . ImageData {
66
58
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
85
73
}
86
74
}
87
75
0 commit comments