@@ -32,6 +32,7 @@ package
3232 // decision-making
3333 public var updateDelay: int ; // in seconds
3434 public var timeWaited: int ;
35+ private var emotionChangeCooldown: int = 0 ;
3536 private var personalZone: Rectangle ;
3637 private var personalZoneSize: int ;
3738 private var comfortLevel: int ;
@@ -150,18 +151,22 @@ package
150151 {
151152 fear -= 2 ;
152153 }
154+
155+ fear = stayInBounds(fear, 100 , 0 );
156+ rage = stayInBounds(rage, 100 , 0 );
153157 }
154158
155159 private function makeDecisions ():void
156160 {
157161 comfortLevel -= 20 ;
158- if (rage <= 0 )
162+
163+ if (emotionChangeCooldown > 0 )
159164 {
160- rage = 0 ;
165+ emotionChangeCooldown -- ;
161166 }
162167
163168 // do a fear check to see if they should run away
164- if (fear > 80 )
169+ if (fear > 80 && emotionChangeCooldown <= 0 )
165170 {
166171 var roll1 = randomNumber(0 , rage);
167172 var roll2 = randomNumber(0 , rage);
@@ -170,12 +175,13 @@ package
170175 var rageResist = (roll1 + roll2 + roll3) / 3 ;
171176
172177 // fear succeeded, they're running away now
173- if (rageResist <= 40 )
178+ if (rageResist <= 0 )
174179 {
175180 maxSpeed = runSpeed;
176181 velocity = runVelocity;
177182 goalX = runAwayZone + 500 ;
178183 runningAway = true ;
184+ emotionChangeCooldown = 10 ;
179185 }
180186 else // fear failed
181187 {
@@ -184,6 +190,7 @@ package
184190 goalX = randomNumber(movementSpace. x , movementSpace. x + movementSpace. width );
185191 goalY = randomNumber(movementSpace. y , movementSpace. y + movementSpace. height );
186192 runningAway = false ;
193+ emotionChangeCooldown = 10 ;
187194 }
188195 }
189196 /*
@@ -199,22 +206,24 @@ package
199206 //goalY = randomNumber(movementSpace.y, movementSpace.y + movementSpace.height);
200207
201208 // generate new, feasible position
202- var offsetNorm = 100 ;
203- var offsetAmtMin = offsetNorm - fear;
204- var offsetAmtMax = offsetNorm - rage;
209+ var offsetNorm = 50 ;
210+ var offsetAmtMin = Math . abs ( offsetNorm - fear) ;
211+ var offsetAmtMax = Math . abs ( offsetNorm - rage) ;
205212 var randomOffsetX = randomNumber( - offsetAmtMin, offsetAmtMax);
206213 var randomOffsetY = randomNumber( - offsetNorm, offsetNorm);
214+
207215 while (goalX + randomOffsetX > movementSpace. x + movementSpace. width ||
208216 goalX + randomOffsetX < movementSpace. x )
209217 {
210218 randomOffsetX = randomNumber( - offsetAmtMin, offsetAmtMax);
211219 }
220+
212221 while (goalY + randomOffsetY > movementSpace. y + movementSpace. height ||
213222 goalY + randomOffsetY < movementSpace. y )
214- {
215- randomOffsetY = randomNumber(- offsetNorm, offsetNorm);
216- }
217-
223+ {
224+ randomOffsetY = randomNumber(- offsetNorm, offsetNorm);
225+ }
226+
218227 goalX += randomOffsetX;
219228 goalY += randomOffsetY;
220229 comfortLevel = 100 ;
@@ -226,6 +235,20 @@ package
226235 {
227236 return (Math . floor (Math . random () * (maxNum - minNum + 1 )) + minNum);
228237 }
238+
239+ private function stayInBounds (value :Number , max :Number , min :Number ):Number
240+ {
241+ if (value > max )
242+ {
243+ value = max ;
244+ }
245+ else if (value < min )
246+ {
247+ value = min ;
248+ }
249+
250+ return value ;
251+ }
229252 }
230253
231254}
0 commit comments