diff options
Diffstat (limited to 'camera.rb')
| -rw-r--r-- | camera.rb | 83 |
1 files changed, 37 insertions, 46 deletions
@@ -1,87 +1,78 @@ +# frozen_string_literal: true +# Simulates a moving camera by manipulating objects it knows class Camera + class <<self + attr_writer :elasticity + + private + + attr_writer :camera_position, :zoom_level + end + + def self.elasticity + @elasticity ||= 1 + end + + def self.camera_position + @camera_position ||= [0, 0] + end def self.zoom_level @zoom_level ||= 1 end - def self.zoom_by zoom + def self.zoom_by(zoom) objects.each do |object| object.size *= zoom object.x *= zoom object.y *= zoom end - self.move_by(Window.width/2 * (zoom-1),Window.height/2 * (zoom-1)) + move_by(Window.width / 2 * (zoom - 1), + Window.height / 2 * (zoom - 1)) self.zoom_level *= zoom end - def self.zoom_to zoom - self.zoom_by(zoom/self.zoom_level) - end - - def self.elasticity - @elasticity ||= 1 - end - - def self.elasticity= speed - @elasticity = speed + def self.zoom_to(zoom) + zoom_by(zoom / self.zoom_level) end - def self.follow item - self.move_to((item.x - (Window.width / 2))/self.elasticity, - (item.y - (Window.height / 2))/self.elasticity) + def self.follow(item) + move_to((item.x - (Window.width / 2)) / elasticity, + (item.y - (Window.height / 2)) / elasticity) end def self.objects @objects ||= [] end - def self.<< item - unless self.objects.include?(item) - self.objects.push(item) - end + def self.<<(item) + objects.push(item) unless objects.include?(item) end - def self.add item + def self.add(item) self << item end - def self.remove item - if self.objects.include?(item) - self.objects.delete(item) - end + def self.remove(item) + objects.delete(item) if objects.include?(item) end - - def self.move_by(x,y) - self.camera_position[0] += x - self.camera_position[1] += y + def self.move_by(x, y) + camera_position[0] += x + camera_position[1] += y objects.each do |object| object.x -= x object.y -= y end end - def self.move_to(x,y) - self.camera_position = [x+camera_position[0],y+camera_position[1]] + + def self.move_to(x, y) + self.camera_position = [x + camera_position[0], + y + camera_position[1]] objects.each do |object| object.x -= x object.y -= y end end - - def self.camera_position - @camera_position ||= [0,0] - end - - private - - def self.camera_position= array - @camera_position = array - end - - def self.zoom_level= value - @zoom_level = value - end - - end |
