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