@@ -5,7 +5,6 @@ function getFish(board) {
55function Fish ( board ) {
66 this . _board = board ;
77 this . _pins = [ ] ;
8- this . _timer = null ;
98 var self = this ;
109 [ 0 , 2 , 4 , 5 , 12 , 13 , 14 , 15 ] . forEach ( function ( val ) {
1110 var pin = new webduino . module . Led ( board , board . getDigitalPin ( val ) ) ;
@@ -47,66 +46,19 @@ Fish.prototype.sink = function (secs) {
4746 } ) ;
4847} ;
4948
50- Fish . prototype . left = function ( secs , speed ) {
51- var self = this ;
52- return new Promise ( function ( resolve , reject ) {
53- if ( self . _timer ) {
54- self . stop ( ) ;
55- }
56-
57- self . flap ( 'left' , speed ) ;
58- setTimeout ( function ( ) {
59- self . stop ( ) ;
60- resolve ( ) ;
61- } , secs * 1000 ) ;
62- } ) ;
63- } ;
64-
65- Fish . prototype . right = function ( secs , speed ) {
66- var self = this ;
67- return new Promise ( function ( resolve , reject ) {
68- if ( self . _timer ) {
69- self . stop ( ) ;
70- }
71-
72- self . flap ( 'right' , speed ) ;
73- setTimeout ( function ( ) {
74- self . stop ( ) ;
75- resolve ( ) ;
76- } , secs * 1000 ) ;
77- } ) ;
78- } ;
79-
80- Fish . prototype . move = function ( secs , speed ) {
81- var self = this ;
82- return new Promise ( function ( resolve , reject ) {
83- if ( self . _timer ) {
84- self . stop ( ) ;
85- }
86-
87- self . flap ( speed ) ;
88- setTimeout ( function ( ) {
89- self . stop ( ) ;
90- resolve ( ) ;
91- } , secs * 1000 ) ;
92- } ) ;
93- } ;
94-
95- Fish . prototype . flap = function ( direction , speed ) {
49+ Fish . prototype . flap = function ( secs , speed , direction ) {
9650 var lSpeed , rSpeed , self = this ;
9751
9852 if ( isNaN ( speed = parseInt ( speed ) ) ) {
99- if ( isNaN ( speed = parseInt ( direction ) ) ) {
100- speed = 1 ;
101- }
53+ speed = 1 ;
10254 }
10355
10456 switch ( direction ) {
105- case 'left' :
57+ case 1 :
10658 lSpeed = 2 * speed ;
10759 rSpeed = speed ;
10860 break ;
109- case 'right' :
61+ case 2 :
11062 lSpeed = speed ;
11163 rSpeed = 2 * speed ;
11264 break ;
@@ -115,30 +67,47 @@ Fish.prototype.flap = function (direction, speed) {
11567 break ;
11668 }
11769
118- self . _pins [ 4 ] . on ( ) ;
119- self . _pins [ 5 ] . on ( ) ;
120- self . _pins [ 6 ] . off ( ) ;
121- self . _pins [ 7 ] . off ( ) ;
122- self . _timer = setTimeout ( function ( ) {
123- self . _pins [ 4 ] . off ( ) ;
124- self . _pins [ 5 ] . off ( ) ;
125- self . _pins [ 6 ] . on ( ) ;
126- self . _pins [ 7 ] . on ( ) ;
127- self . _timer = setTimeout ( function ( ) {
128- if ( self . _timer ) {
129- self . flap ( direction , speed ) ;
130- }
131- } , 1000 / lSpeed ) ;
132- } , 1000 / rSpeed ) ;
133- } ;
70+ return new Promise ( function ( resolve , reject ) {
71+ var flapping = true ;
13472
135- Fish . prototype . stop = function ( ) {
136- if ( this . _timer ) {
137- clearTimeout ( this . _timer ) ;
138- delete this . _timer ;
139- this . _pins [ 4 ] . off ( ) ;
140- this . _pins [ 5 ] . off ( ) ;
141- this . _pins [ 6 ] . off ( ) ;
142- this . _pins [ 7 ] . off ( ) ;
143- }
73+ _flap ( function ( ) {
74+ resolve ( ) ;
75+ } ) ;
76+
77+ setTimeout ( function ( ) {
78+ flapping = false ;
79+ } , 1000 * secs ) ;
80+
81+ function _flap ( callback ) {
82+ if ( flapping ) {
83+ self . _pins [ 4 ] . on ( ) ;
84+ self . _pins [ 5 ] . on ( ) ;
85+ self . _pins [ 6 ] . off ( ) ;
86+ self . _pins [ 7 ] . off ( ) ;
87+ setTimeout ( function ( ) {
88+ if ( flapping ) {
89+ self . _pins [ 4 ] . off ( ) ;
90+ self . _pins [ 5 ] . off ( ) ;
91+ self . _pins [ 6 ] . on ( ) ;
92+ self . _pins [ 7 ] . on ( ) ;
93+ setTimeout ( function ( ) {
94+ _flap ( callback ) ;
95+ } , 1000 / rSpeed ) ;
96+ } else {
97+ self . _pins [ 4 ] . off ( ) ;
98+ self . _pins [ 5 ] . off ( ) ;
99+ self . _pins [ 6 ] . off ( ) ;
100+ self . _pins [ 7 ] . off ( ) ;
101+ callback ( ) ;
102+ }
103+ } , 1000 / lSpeed ) ;
104+ } else {
105+ self . _pins [ 4 ] . off ( ) ;
106+ self . _pins [ 5 ] . off ( ) ;
107+ self . _pins [ 6 ] . off ( ) ;
108+ self . _pins [ 7 ] . off ( ) ;
109+ callback ( ) ;
110+ }
111+ }
112+ } ) ;
144113} ;
0 commit comments