1
- use super :: Perception ;
2
- use std:: { cell:: RefCell , rc:: Rc } ;
3
- use wasm_bindgen:: prelude:: * ;
4
- use web_sys:: Element ;
5
-
6
- impl Perception {
7
- pub ( super ) fn setup_click_handler ( game_state : Rc < RefCell < Self > > ) -> Result < ( ) , JsValue > {
8
- let click_handler = {
9
- let game_state = game_state. clone ( ) ;
10
- Closure :: wrap ( Box :: new ( move |event : web_sys:: MouseEvent | {
11
- if let Ok ( mut game) = game_state. try_borrow_mut ( ) {
12
- if let Some ( target) = event. target ( ) {
13
- if let Some ( element) = target. dyn_ref :: < Element > ( ) {
14
- if let Ok ( Some ( maze_el) ) = element. closest ( "#maze" ) {
15
- // Find clicked cell index
16
- let children = maze_el. children ( ) ;
17
- let cell_index = ( 0 ..children. length ( ) )
18
- . find ( |& i| {
19
- children
20
- . item ( i)
21
- . map ( |cell| cell. is_same_node ( Some ( element) ) )
22
- . unwrap_or ( false )
23
- } )
24
- . unwrap_or ( 0 )
25
- as usize ;
26
-
27
- let size = game. size ;
28
- let x = cell_index % size;
29
- let y = cell_index / size;
30
-
31
- let result = game. try_move ( x, y) ;
32
- if result != 0 {
33
- game. render ( ) . unwrap ( ) ;
34
- }
35
- }
36
- }
37
- }
38
- }
39
- } ) as Box < dyn FnMut ( _) > )
40
- } ;
41
-
42
- // Attach single click handler to maze container
43
- if let Some ( maze_el) = game_state. borrow ( ) . document . get_element_by_id ( "maze" ) {
44
- maze_el. add_event_listener_with_callback (
45
- "click" ,
46
- click_handler. as_ref ( ) . unchecked_ref ( ) ,
47
- ) ?;
48
- click_handler. forget ( ) ;
49
- }
50
-
51
- Ok ( ( ) )
52
- }
53
- }
1
+ use super :: Perception ;
2
+ use std:: { cell:: RefCell , rc:: Rc } ;
3
+ use wasm_bindgen:: prelude:: * ;
4
+ use web_sys:: Element ;
5
+
6
+ impl Perception {
7
+ pub ( super ) fn setup_click_handler ( game_state : Rc < RefCell < Self > > ) -> Result < ( ) , JsValue > {
8
+ let click_handler = {
9
+ let game_state = game_state. clone ( ) ;
10
+ Closure :: wrap ( Box :: new ( move |event : web_sys:: MouseEvent | {
11
+ if let Ok ( mut game) = game_state. try_borrow_mut ( ) {
12
+ if let Some ( target) = event. target ( ) {
13
+ if let Some ( element) = target. dyn_ref :: < Element > ( ) {
14
+ if let Ok ( Some ( maze_el) ) = element. closest ( "#maze" ) {
15
+ // Find clicked cell index
16
+ let children = maze_el. children ( ) ;
17
+ let cell_index = ( 0 ..children. length ( ) )
18
+ . find ( |& i| {
19
+ children
20
+ . item ( i)
21
+ . map ( |cell| cell. is_same_node ( Some ( element) ) )
22
+ . unwrap_or ( false )
23
+ } )
24
+ . unwrap_or ( 0 )
25
+ as usize ;
26
+
27
+ let size = game. size ;
28
+ let x = cell_index % size;
29
+ let y = cell_index / size;
30
+
31
+ let result = game. try_move ( x, y) ;
32
+ if result != 0 {
33
+ game. render ( ) . unwrap ( ) ;
34
+ }
35
+ }
36
+ }
37
+ }
38
+ }
39
+ } ) as Box < dyn FnMut ( _) > )
40
+ } ;
41
+
42
+ // Attach single click handler to maze container
43
+ if let Some ( maze_el) = game_state. borrow ( ) . document . get_element_by_id ( "maze" ) {
44
+ maze_el. add_event_listener_with_callback (
45
+ "click" ,
46
+ click_handler. as_ref ( ) . unchecked_ref ( ) ,
47
+ ) ?;
48
+ click_handler. forget ( ) ;
49
+ }
50
+
51
+ Ok ( ( ) )
52
+ }
53
+ }
0 commit comments