Class: RoadToRubykaigi::Sprite::Enemies

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/road_to_rubykaigi/sprite/enemy.rb

Constant Summary collapse

ENEMIES_DATA =
{
  FixedPatrol: [
    { x: 55, y: 6, left_bound: 0, right_bound: 0, speed: 0, character: :ladybug },
    { x: 125, y: 8, left_bound: 0, right_bound: 0, speed: 0, character: :ladybug },
    { x: 293, y: 23, left_bound: 0, right_bound: 0, speed: 0, character: :spider },
  ],
  HorizontalPatrol: [
    { x: 123, y: 26, left_bound: 114, right_bound: 123, speed: 1.5, character: :bee },
    { x: 171, y: 26, left_bound: 162, right_bound: 171, speed: 1.5, character: :bee },
    { x: 278, y: 15, left_bound: 270, right_bound: 278, speed: 1.5, character: :bug },
    { x: 291, y: 15, left_bound: 283, right_bound: 291, speed: 1.5, character: :bug },
    { x: 302, y: 15, left_bound: 297, right_bound: 302, speed: 1.5, character: :bug },
  ],
  ScreenEntryPatrol: [
    { x: 63, y: 27, left_bound: 0, right_bound: 63, speed: 4.0, character: :bug },
    { x: 76, y: 27, left_bound: 0, right_bound: 76, speed: 4.0, character: :bug },
    { x: 87, y: 27, left_bound: 0, right_bound: 76, speed: 4.0, character: :bug },
    { x: 221, y: 23, left_bound: 0, right_bound: 151, speed: 6.0, character: :bee },
    { x: 240, y: 19, left_bound: 0, right_bound: 170, speed: 6.0, character: :bee },
    { x: 256, y: 16, left_bound: 0, right_bound: 186, speed: 6.0, character: :bee },
  ],
}

Instance Method Summary collapse

Instance Method Details

#activateObject



58
59
60
# File 'lib/road_to_rubykaigi/sprite/enemy.rb', line 58

def activate
  @waiting = false
end

#build_buffer(offset_x:) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/road_to_rubykaigi/sprite/enemy.rb', line 31

def build_buffer(offset_x:)
  buffer = Array.new(Map::VIEWPORT_HEIGHT) { Array.new(Map::VIEWPORT_WIDTH) { "" } }
  @enemies.each do |enemy|
    bounding_box = enemy.bounding_box
    relative_x = bounding_box[:x] - offset_x - 1
    relative_y = bounding_box[:y] - 1
    next if relative_x < 1
    enemy.characters.each_with_index do |character, j|
      next if relative_x + j >= Map::VIEWPORT_WIDTH - 1
      buffer[relative_y][relative_x+j] = character
    end
  end
  buffer
end

#simulate_physicsObject



46
47
48
49
50
# File 'lib/road_to_rubykaigi/sprite/enemy.rb', line 46

def simulate_physics
  if activated?
    @enemies.each(&:move)
  end
end

#updateObject



52
53
54
55
56
# File 'lib/road_to_rubykaigi/sprite/enemy.rb', line 52

def update
  unless activated?
    @enemies.each(&:reset_last_update_time)
  end
end