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