@@ -9,11 +9,18 @@ for (var i = 0; i <= 50; i++) {
9
9
GRID_ARRAY . push ( i ) ;
10
10
}
11
11
12
+ const KEY_CODES_MAPPER = {
13
+ 38 : 'UP' ,
14
+ 39 : 'RIGHT' ,
15
+ 37 : 'LEFT' ,
16
+ 40 : 'BOTTOM' ,
17
+ } ;
18
+
12
19
const CONTROLS = {
13
20
UP : 'UP' ,
14
- BOTTOM : 'BOTTOM' ,
15
21
RIGHT : 'RIGHT' ,
16
22
LEFT : 'LEFT' ,
23
+ BOTTOM : 'BOTTOM' ,
17
24
} ;
18
25
19
26
const DIRECTION_TICKS = {
@@ -24,14 +31,20 @@ const DIRECTION_TICKS = {
24
31
} ;
25
32
26
33
// TODO compose instead
27
- const setSnakePosition = ( prevState ) => ( {
34
+ const applySnakePosition = ( prevState ) => ( {
28
35
snake : {
29
36
position : {
30
37
...DIRECTION_TICKS [ prevState . controls . direction ] ( prevState . snake . position . x , prevState . snake . position . y ) ,
31
38
} ,
32
39
} ,
33
40
} ) ;
34
41
42
+ const doChangeDirection = ( direction ) => ( ) => ( {
43
+ controls : {
44
+ direction,
45
+ } ,
46
+ } ) ;
47
+
35
48
class App extends Component {
36
49
constructor ( props ) {
37
50
super ( props ) ;
@@ -57,19 +70,30 @@ class App extends Component {
57
70
}
58
71
59
72
componentDidMount ( ) {
60
- this . interval = setInterval ( this . tick , 150 ) ;
73
+ this . interval = setInterval ( this . onTick , 150 ) ;
74
+
75
+ window . addEventListener ( 'keyup' , this . onChangeDirection , false ) ;
61
76
}
62
77
63
78
componentWillUnmount ( ) {
64
79
clearInterval ( this . interval ) ;
80
+
81
+ window . removeEventListener ( 'keyup' , this . onChangeDirection , false ) ;
65
82
}
66
83
67
- tick = ( ) => {
68
- this . setState ( setSnakePosition )
84
+ onTick = ( ) => {
85
+ this . setState ( applySnakePosition ) ;
86
+ }
87
+
88
+ onChangeDirection = ( e ) => {
89
+ if ( KEY_CODES_MAPPER [ e . keyCode ] ) {
90
+ this . setState ( doChangeDirection ( KEY_CODES_MAPPER [ e . keyCode ] ) ) ;
91
+ }
69
92
}
70
93
71
94
render ( ) {
72
- const { snake, snack } = this . state ;
95
+ const { snake, snack } = this . state
96
+ console . log ( this . state . controls . direction ) ; ;
73
97
return (
74
98
< div >
75
99
< Grid
0 commit comments