Game Development Reference
In-Depth Information
8 @roaming_state = TankRoamingState . new(object, vision)
9 @fighting_state = TankFightingState . new(object, vision)
10 @fleeing_state = TankFleeingState . new(object, vision, gun)
11 @chasing_state = TankChasingState . new(object, vision, gun)
12 set_state( @roaming_state )
13 end
14
15 def on_collision (with)
16 @current_state . on_collision(with)
17 end
18
19 def on_damage (amount)
20 if @current_state == @roaming_state
21 set_state( @fighting_state )
22 end
23 end
24
25 def update
26 choose_state
27 @current_state . update
28 end
29
30 def set_state (state)
31 returnunless state
32 returnif state == @current_state
33 @last_state_change = Gosu . milliseconds
34 @current_state = state
35 state . enter
36 end
37
38 def choose_state
39 returnunless Gosu . milliseconds -
40 ( @last_state_change ) > STATE_CHANGE_DELAY
41 if @gun . target
42 if @object . health . health > 40
43 if @gun . distance_to_target > BulletPhysics :: MAX_DIST
44 new_state = @chasing_state
45 else
46 new_state = @fighting_state
47 end
48 else
49 if @fleeing_state . can_flee?
50 new_state = @fleeing_state
51 else
52 new_state = @fighting_state
53 end
Search WWH ::




Custom Search