module Rubygoal::Moveable

Constants

MIN_DISTANCE

Attributes

destination[RW]
position[RW]
rotation[RW]
speed[R]
velocity[RW]

Public Class Methods

new() click to toggle source
# File lib/rubygoal/moveable.rb, line 10
def initialize
  @position = Position.new(0, 0)
  @velocity = Velocity.new(0, 0)
  @speed = 0
  @destination = nil
  @rotation = 0
end

Public Instance Methods

distance(position) click to toggle source
# File lib/rubygoal/moveable.rb, line 22
def distance(position)
  Util.distance(self.position.x, self.position.y, position.x, position.y)
end
move_to(destination) click to toggle source
# File lib/rubygoal/moveable.rb, line 26
def move_to(destination)
  self.destination = destination

  self.rotation = Util.angle(position.x, position.y, destination.x, destination.y)
  velocity.x = Util.offset_x(rotation, speed)
  velocity.y = Util.offset_y(rotation, speed)
end
moving?() click to toggle source
# File lib/rubygoal/moveable.rb, line 18
def moving?
  velocity.nonzero?
end
position_after_update(elapsed_time) click to toggle source
# File lib/rubygoal/moveable.rb, line 50
def position_after_update(elapsed_time)
  custom_frame_rate = 1 / 60.0
  coef = elapsed_time / custom_frame_rate
  movement = velocity.mult(coef)

  position.add(movement)
end
stop() click to toggle source
# File lib/rubygoal/moveable.rb, line 45
def stop
  self.destination = nil
  self.velocity = Velocity.new(0, 0)
end
update(elapsed_time) click to toggle source
# File lib/rubygoal/moveable.rb, line 34
def update(elapsed_time)
  return unless moving?

  if destination && distance(destination) < MIN_DISTANCE
    stop
    reset_rotation
  else
    self.position = position_after_update(elapsed_time)
  end
end

Private Instance Methods

reset_rotation() click to toggle source
# File lib/rubygoal/moveable.rb, line 64
def reset_rotation
  self.rotation = 0
end