@@ -4,23 +4,24 @@ function Lemming(gameObject, x, y)
4
4
{
5
5
6
6
this . STATE = {
7
- UNKNOWN : { id :0 , canSetState :false , isFalling :false , name : "unknown" } ,
8
- WALKING : { id :1 , canSetState :true , isFalling :false , name : "walking" } ,
9
- FALLING : { id :3 , canSetState :false , isFalling :true , name : "fall" } ,
10
- FLYING : { id :4 , canSetState :false , isFalling :true , name : "falling" } ,
11
- DIGGING : { id :5 , canSetState :true , isFalling :false , name : "digging" } ,
12
- BLOCKING : { id :6 , canSetState :false , isFalling :false , name : "blocking" } ,
13
- BUILDING : { id :7 , canSetState :true , isFalling :false , name : "build" } ,
14
- BASHING : { id :8 , canSetState :true , isFalling :false , name : "bush" } ,
15
- MINING : { id :9 , canSetState :true , isFalling :false , name : "mining" } ,
16
- CLIMBING : { id :10 , canSetState :false , isFalling :false , name : "climbing" } ,
17
- OHNO : { id :11 , canSetState :false , isFalling :false , name : "Oh No" } ,
18
- EXPLODING : { id :12 , canSetState :false , isFalling :false , name : "exploding" } ,
19
- UMBRELLA : { id :13 , canSetState :false , isFalling :true , name : "flying 1" } ,
20
- PREUMBRELLA : { id :14 , canSetState :false , isFalling :true , name : "flying 2" } ,
21
- BOMBING : { id :15 , canSetState :true , isFalling :false , name : "exploding" } ,
22
- SPLATTING : { id :16 , canSetState :false , isFalling :false , name : "splatting" } ,
23
- EXITING : { id :17 , canSetState :true , isFalling :false , name : "leaving" } ,
7
+ UNKNOWN : { id :0 , canSetState :false , isFalling :false , canFall :true , name : "unknown" } ,
8
+ WALKING : { id :1 , canSetState :true , isFalling :false , canFall :true , name : "walking" } ,
9
+ FALLING : { id :3 , canSetState :false , isFalling :true , canFall :true , name : "fall" } ,
10
+ FLYING : { id :4 , canSetState :false , isFalling :true , canFall :true , name : "falling" } ,
11
+ DIGGING : { id :5 , canSetState :true , isFalling :false , canFall :true , name : "digging" } ,
12
+ BLOCKING : { id :6 , canSetState :false , isFalling :false , canFall :true , name : "blocking" } ,
13
+ BUILDING : { id :7 , canSetState :true , isFalling :false , canFall :true , name : "build" } ,
14
+ BASHING : { id :8 , canSetState :true , isFalling :false , canFall :true , name : "bush" } ,
15
+ MINING : { id :9 , canSetState :true , isFalling :false , canFall :true , name : "mining" } ,
16
+ CLIMBING : { id :10 , canSetState :false , isFalling :false , canFall :true , name : "climbing" } ,
17
+ OHNO : { id :11 , canSetState :false , isFalling :false , canFall :true , name : "Oh No" } ,
18
+ EXPLODING : { id :12 , canSetState :false , isFalling :false , canFall :true , name : "exploding" } ,
19
+ UMBRELLA : { id :13 , canSetState :false , isFalling :true , canFall :true , name : "flying 1" } ,
20
+ PREUMBRELLA : { id :14 , canSetState :false , isFalling :true , canFall :true , name : "flying 2" } ,
21
+ BOMBING : { id :15 , canSetState :true , isFalling :false , canFall :true , name : "exploding" } ,
22
+ SPLATTING : { id :16 , canSetState :false , isFalling :false , canFall :true , name : "splatting" } ,
23
+ EXITING : { id :17 , canSetState :false , isFalling :false , canFall :false , name : "leaving" } ,
24
+ DROWNING : { id :18 , canSetState :false , isFalling :false , canFall :false , name : "drowning" }
24
25
} ;
25
26
26
27
@@ -44,6 +45,7 @@ function Lemming(gameObject, x, y)
44
45
45
46
this . stateTicks ++ ;
46
47
48
+
47
49
//- process Triggers
48
50
var triggerState = self . game . triggerHandler . trigger ( self . x , self . y , gametick ) ;
49
51
if ( triggerState != null )
@@ -53,20 +55,30 @@ function Lemming(gameObject, x, y)
53
55
switch ( triggerState )
54
56
{
55
57
case TRIGGERS . EXIT :
56
- self . changeState ( self . STATE . EXITING ) ;
58
+ self . changeState ( self . STATE . EXITING , false ) ;
57
59
break ;
58
60
case TRIGGERS . BLOCKER_LEFT :
59
61
if ( ( self . state != self . STATE . BLOCKER ) && ( self . dir > 0 ) ) self . dir = - 1 ;
60
62
break ;
61
63
case TRIGGERS . BLOCKER_RIGHT :
62
64
if ( ( self . state != self . STATE . BLOCKER ) && ( self . dir < 0 ) ) self . dir = 1 ;
63
65
break ;
66
+ case TRIGGERS . DROWN :
67
+ self . changeState ( self . STATE . DROWNING , false ) ;
68
+ break ;
64
69
}
65
70
}
66
71
67
72
if ( ( self . state == self . STATE . EXITING ) && ( this . stateTicks >= 8 ) )
68
73
{
69
74
self . removeLem ( true ) ;
75
+ return ;
76
+ }
77
+
78
+ if ( ( self . state == self . STATE . DROWNING ) && ( this . stateTicks >= 16 ) )
79
+ {
80
+ self . removeLem ( true ) ;
81
+ return ;
70
82
}
71
83
72
84
//- process explosion timeout
@@ -75,7 +87,11 @@ function Lemming(gameObject, x, y)
75
87
self . ticksToDie -- ;
76
88
if ( self . ticksToDie == 0 ) self . state = self . STATE . OHNO ;
77
89
if ( self . ticksToDie == - 16 ) self . state = self . STATE . EXPLODING ;
78
- if ( self . ticksToDie < - 16 ) self . removeLem ( ) ;
90
+ if ( self . ticksToDie < - 16 )
91
+ {
92
+ self . removeLem ( ) ;
93
+ return ;
94
+ }
79
95
}
80
96
81
97
var lineLen1 = self . game . gameTerrain . width * 4 ;
@@ -104,7 +120,7 @@ function Lemming(gameObject, x, y)
104
120
}
105
121
106
122
107
- if ( data [ dataPos + lineLen1 ] == 0 )
123
+ if ( ( data [ dataPos + lineLen1 ] == 0 ) && ( self . state . canFall ) )
108
124
{
109
125
//- there is no ground below
110
126
@@ -254,11 +270,11 @@ function Lemming(gameObject, x, y)
254
270
255
271
case self . STATE . MINING :
256
272
self . y += 1 ;
257
- self . x += 1 ;
273
+ self . x += self . dir ;
258
274
break ;
259
275
260
276
case self . STATE . BASHING :
261
- self . x += 1 ;
277
+ self . x += self . dir ;
262
278
break ;
263
279
264
280
@@ -275,6 +291,7 @@ function Lemming(gameObject, x, y)
275
291
case self . STATE . FALLING :
276
292
case self . STATE . PREUMBRELLA :
277
293
case self . STATE . UMBRELLA :
294
+ case self . STATE . DROWNING :
278
295
if ( self . state != newState )
279
296
{
280
297
self . state = newState ;
0 commit comments