class TankFleeingState

Constants

MAX_FLEE_TIME

Public Class Methods

new(object, vision, gun) click to toggle source
Calls superclass method TankMotionState::new
# File lib/entities/components/ai/tank_fleeing_state.rb, line 4
def initialize(object, vision, gun)
  super(object, vision)
  @object = object
  @vision = vision
  @gun = gun
end

Public Instance Methods

can_flee?() click to toggle source
# File lib/entities/components/ai/tank_fleeing_state.rb, line 11
def can_flee?
  return true unless @started_fleeing
  Gosu.milliseconds - @started_fleeing < MAX_FLEE_TIME
end
change_direction() click to toggle source
# File lib/entities/components/ai/tank_fleeing_state.rb, line 25
def change_direction
  closest_powerup = @vision.closest_powerup(
    RepairPowerup, HealthPowerup)
  if closest_powerup
    angle = Utils.angle_between(
      @object.x, @object.y,
      closest_powerup.x, closest_powerup.y)
    @object.physics.change_direction(
      angle - angle % 45)
  else
    @object.physics.change_direction(
      180 + @gun.desired_gun_angle -
      @gun.desired_gun_angle % 45)
  end
  @changed_direction_at = Gosu.milliseconds
  @will_keep_direction_for = turn_time
end
drive_time() click to toggle source
# File lib/entities/components/ai/tank_fleeing_state.rb, line 43
def drive_time
  10000
end
enter() click to toggle source
# File lib/entities/components/ai/tank_fleeing_state.rb, line 16
def enter
  @started_fleeing ||= Gosu.milliseconds
end
turn_time() click to toggle source
# File lib/entities/components/ai/tank_fleeing_state.rb, line 47
def turn_time
  rand(300..600)
end
update() click to toggle source
# File lib/entities/components/ai/tank_fleeing_state.rb, line 20
def update
  change_direction if should_change_direction?
  drive
end