diff options
| -rw-r--r-- | animator.rb | 18 | ||||
| -rw-r--r-- | camera.rb | 14 | ||||
| -rw-r--r-- | run.rb | 23 |
3 files changed, 34 insertions, 21 deletions
diff --git a/animator.rb b/animator.rb index bf23fed..94f7770 100644 --- a/animator.rb +++ b/animator.rb @@ -61,28 +61,18 @@ class AnimatedSquare end def update(offset, zoom) - #width_zoom_offset = Window.width/2 * (zoom-1) - #height_zoom_offset = Window.height/2 * (zoom-1) - puts - p @square - puts - p @speed - puts - p zoom - puts - puts if axis.zero? @square.x += speed * zoom - if @square.x >= ((range[1] - offset[0])) + if @square.x >= ((range[1] - offset[0])) * zoom self.speed = -speed.abs - elsif @square.x <= ((range[0] - offset[0])) + elsif @square.x <= ((range[0] - offset[0])) * zoom self.speed = speed.abs end else @square.y += speed * zoom - if @square.y >= ((range[1] - offset[1])) + if @square.y >= ((range[1] - offset[1])) * zoom self.speed = -speed.abs - elsif @square.y <= ((range[0] - offset[1])) + elsif @square.y <= ((range[0] - offset[1])) * zoom self.speed = speed.abs end end @@ -28,9 +28,9 @@ class Camera object.x *= zoom object.y *= zoom end + self.zoom_level *= zoom move_by(Window.width / 2 * (zoom - 1), Window.height / 2 * (zoom - 1)) - self.zoom_level *= zoom end def self.zoom_to(zoom) @@ -38,8 +38,8 @@ class Camera end def self.follow(item) - move_to((item.x - (Window.width / 2)) / elasticity, - (item.y - (Window.height / 2)) / elasticity) + move_to(((item.x + item.size / 2) - (Window.width / 2)) / elasticity, + ((item.y + item.size / 2) - (Window.height / 2)) / elasticity) end def self.objects @@ -59,8 +59,8 @@ class Camera end def self.move_by(x, y) - camera_position[0] += x - camera_position[1] += y + camera_position[0] += x / zoom_level + camera_position[1] += y / zoom_level objects.each do |object| object.x -= x object.y -= y @@ -68,8 +68,8 @@ class Camera end def self.move_to(x, y) - self.camera_position = [x + camera_position[0], - y + camera_position[1]] + self.camera_position = [x / zoom_level + camera_position[0], + y / zoom_level + camera_position[1]] objects.each do |object| object.x -= x object.y -= y @@ -42,6 +42,26 @@ Camera.elasticity = 10 Camera << @squares.last end +# An example of static elements on the screen that +# do not follow the camera movement +Rectangle.new( + width: 350, + height: 70, + color: 'navy' +) +@ui_pos = Text.new( + 'pos: 0,0', + x: 10, + y: 10, + color: 'teal' +) +@ui_zoom = Text.new( + 'zoom: 0', + x: 10, + y: 40, + color: 'lime' +) + # How fast the player can move @speed = 10 @@ -128,6 +148,9 @@ update do #Camera.move_to(50,50) @cam_x_move = 0 @cam_y_move = 0 + p @ui_pos.inspect + @ui_pos.text = "Camera Position: #{Camera.camera_position[0].round(1)}, #{Camera.camera_position[1].round(1)}" + @ui_zoom.text = "Zoom: #{Camera.zoom_level.round(3)}" end show |
