Game Development Reference
In-Depth Information
41
end
42
end
43
end
44
45
def
distance_to_target
46
Utils
.
distance_between(
@object
.
x,
@object
.
y,
@target
.
x,
@target
.
y)
47
48
end
49
50
51
def
should_shoot?
52
rand
*
@aggressiveness
> 0.5
53
end
54
55
def
can_make_new_decision?
56
now
=
Gosu
.
milliseconds
57
if
now
-
(
@last_decision
||= 0
)
>
DECISION_DELAY
58
@last_decision
=
now
59
true
60
end
61
end
62
63
def
adjust_desired_angle
64
@desired_gun_angle
=
if
@target
Utils
.
angle_between(
65
@object
.
x,
@object
.
y,
@target
.
x,
@target
.
y)
66
67
else
68
@object
.
direction
69
end
70
end
71
72
def
change_target
(new_target)
73
@target
=
new_target
74
adjust_desired_angle
75
end
76
77
def
adjust_gun_angle
78
actual
=
@object
.
gun_angle
79
desired
=
@desired_gun_angle
80
if
actual
>
desired
81
if
actual
-
desired
> 180
# 0 -> 360 fix
82
@object
.
gun_angle
=
(actual
+
@retarget_speed
)
% 360
83
if
@object
.
gun_angle
<
desired
84
@object
.
gun_angle
=
desired
# damp
85
end
86
else