diff options
| -rw-r--r-- | animator.rb | 28 | ||||
| -rw-r--r-- | camera.rb | 22 | ||||
| -rw-r--r-- | run.rb | 43 |
3 files changed, 81 insertions, 12 deletions
diff --git a/animator.rb b/animator.rb index c2640f6..9fae771 100644 --- a/animator.rb +++ b/animator.rb @@ -16,6 +16,7 @@ class AnimatedSquare def x= x @square.x = x end + def y @square.y end @@ -23,18 +24,31 @@ class AnimatedSquare @square.y = y end + def size + @square.size + end + def size= size + @square.size = size + end + - def update offset + def update(offset, zoom) + width_zoom_offset = Window.width/2 * (zoom-1) + height_zoom_offset = Window.height/2 * (zoom-1) if @axis == 0 - @square.x += @speed - if @square.x > (@range[1] - offset[0]) or @square.x < (@range[0] - offset[0]) - @speed = -@speed + @square.x += @speed * zoom + if @square.x >= ((@range[1] - offset[0])) + @speed = -(@speed.abs) + elsif @square.x <= ((@range[0] - offset[0])) + @speed = @speed.abs end else - @square.y += @speed - if @square.y > (@range[1] - offset[1]) or @square.y < (@range[0] - offset[1]) - @speed = -@speed + @square.y += @speed * zoom + if @square.y >= ((@range[1] - offset[1])) + @speed = -(@speed.abs) + elsif @square.y <= ((@range[0] - offset[1])) + @speed = @speed.abs end end end @@ -1,5 +1,23 @@ class Camera + + def self.zoom_level + @zoom_level ||= 1 + end + + 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)) + self.zoom_level *= zoom + end + + def self.zoom_to zoom + self.zoom_by(zoom/self.zoom_level) + end def self.elasticity @elasticity ||= 1 @@ -61,5 +79,9 @@ class Camera @camera_position = array end + def self.zoom_level= value + @zoom_level = value + end + end @@ -6,6 +6,19 @@ require_relative 'animator' @player = Image.new('assets/player.png') @squares = [] +module SizableImage + def size + self.width + end + def size= value + self.height *= (value / self.width) + self.width *= (value / self.width) + end +end + [email protected] SizableImage [email protected] SizableImage + # There is 2 ways you can add objects to be known and controlled by the camera, both do the same thing Camera << @background Camera.add @player @@ -32,19 +45,20 @@ end @cam_x_move = 0 @cam_y_move = 0 @is_follow = true +@zoom_by = 1 on :key do |event| if event.key == 'a' - @x_move -= @speed + @x_move -= @speed * Camera.zoom_level end if event.key == 'd' - @x_move += @speed + @x_move += @speed * Camera.zoom_level end if event.key == 'w' - @y_move -= @speed + @y_move -= @speed * Camera.zoom_level end if event.key == 's' - @y_move += @speed + @y_move += @speed * Camera.zoom_level end @@ -68,6 +82,19 @@ on :key do |event| if event.key == 'f' @is_follow = true end + +end + +on :key do |event| + if event.key == 'q' + @zoom_by = 1.1 + end + if event.key == 'e' + @zoom_by = 0.9 + end + if event.key == 'r' + Camera.zoom_to 1 + end end update do @@ -76,9 +103,15 @@ update do @x_move = 0 @y_move = 0 + if @zoom_by != 1 + Camera.zoom_by @zoom_by + end + @zoom_by = 1 + # Need to use the cameras position as an offset to keep the shapes range of movement working + # Need to make the zoom also give an offset @squares.each do |square| - square.update Camera.camera_position + square.update(Camera.camera_position,Camera.zoom_level) end |
