diff options
| author | tradam <git.tradam.fyi> | 2021-09-24 18:34:08 -0400 |
|---|---|---|
| committer | tradam <git.tradam.fyi> | 2021-09-24 18:34:08 -0400 |
| commit | 205282994bba06b3ec6507ac0f42f66b13878db2 (patch) | |
| tree | cd3a7bf117ac88a4ca546bb06da7ae6de94274ad | |
| parent | f660af1767ec6243e92f1a41c2d9636e2b88790d (diff) | |
| download | ruby2d-camera-205282994bba06b3ec6507ac0f42f66b13878db2.tar.gz ruby2d-camera-205282994bba06b3ec6507ac0f42f66b13878db2.zip | |
Fixed changing z-index after the shape has been added not applying at all
| -rw-r--r-- | CHANGELOG.mdown | 4 | ||||
| -rw-r--r-- | Gemfile.lock | 42 | ||||
| -rw-r--r-- | example/README.mdown | 3 | ||||
| -rw-r--r-- | lib/ruby2d/camera.rb | 17 | ||||
| -rw-r--r-- | lib/ruby2d/camera/circle.rb | 5 | ||||
| -rw-r--r-- | lib/ruby2d/camera/image.rb | 5 | ||||
| -rw-r--r-- | lib/ruby2d/camera/line.rb | 9 | ||||
| -rw-r--r-- | lib/ruby2d/camera/quad.rb | 9 | ||||
| -rw-r--r-- | lib/ruby2d/camera/rectangle.rb | 9 | ||||
| -rw-r--r-- | lib/ruby2d/camera/sprite.rb | 5 | ||||
| -rw-r--r-- | lib/ruby2d/camera/square.rb | 9 | ||||
| -rw-r--r-- | lib/ruby2d/camera/text.rb | 5 | ||||
| -rw-r--r-- | lib/ruby2d/camera/triangle.rb | 9 | ||||
| -rw-r--r-- | lib/ruby2d/camera/version.rb | 2 | ||||
| -rw-r--r-- | run.rb | 248 |
15 files changed, 119 insertions, 262 deletions
diff --git a/CHANGELOG.mdown b/CHANGELOG.mdown index a45db6b..2d993ab 100644 --- a/CHANGELOG.mdown +++ b/CHANGELOG.mdown @@ -6,6 +6,10 @@   +## [1.1.1](https://github.com/realtradam/ruby2d-camera/releases/tag/1.1.1) - 2021-09-24 + +- Fixed changing z-index after the shape has been added not applying at all + ## [1.1.0](https://github.com/realtradam/ruby2d-camera/releases/tag/1.1.0) - 2021-08-09  - Added Camera functions `Camera.coordinate_to_screenspace` and `Camera.coordinate_to_worldspace` diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..31fab7d --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,42 @@ +PATH + remote: . + specs: + ruby2d-camera (1.1.1.beta) + ruby2d (~> 0.10) + +GEM + remote: https://rubygems.org/ + specs: + ast (2.4.2) + parallel (1.21.0) + parser (3.0.2.0) + ast (~> 2.4.1) + rainbow (3.0.0) + rake (13.0.6) + regexp_parser (2.1.1) + rexml (3.2.5) + rubocop (1.21.0) + parallel (~> 1.10) + parser (>= 3.0.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml + rubocop-ast (>= 1.9.1, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.11.0) + parser (>= 3.0.1.1) + ruby-progressbar (1.11.0) + ruby2d (0.11.0) + unicode-display_width (2.1.0) + +PLATFORMS + x86_64-linux + +DEPENDENCIES + rake (~> 13.0) + rubocop (~> 1.7) + ruby2d-camera! + +BUNDLED WITH + 2.2.27 diff --git a/example/README.mdown b/example/README.mdown new file mode 100644 index 0000000..186f6e3 --- /dev/null +++ b/example/README.mdown @@ -0,0 +1,3 @@ +### Example Is Currently Broken + +Most likely an issue with the example code, but is too spaghetti for me to want to revisit it diff --git a/lib/ruby2d/camera.rb b/lib/ruby2d/camera.rb index 8037b4d..3213e16 100644 --- a/lib/ruby2d/camera.rb +++ b/lib/ruby2d/camera.rb @@ -16,6 +16,16 @@ module Ruby2D def objects @objects ||= [] end + + end + + def self._sort_by_z + @sort_by_z = true + end + + def self._resolve_z_sorting + objects.sort_by!(&:z) if @sort_by_z + @sort_by_z = false end def self.debug_x @@ -37,9 +47,9 @@ module Ruby2D # Adding objects so they are # tracked by the Camera def self.<<(item) - objects.push(item) unless objects.include?(item) - objects.sort_by! do |n| - n.z + unless objects.include?(item) + objects.push(item) + self._sort_by_z end end @@ -50,6 +60,7 @@ module Ruby2D # Redraw all objects that # are tracked by the Camera def self._redraw(auto_purge: false) + self._resolve_z_sorting objects.each(&:_draw) end diff --git a/lib/ruby2d/camera/circle.rb b/lib/ruby2d/camera/circle.rb index 60629df..2896055 100644 --- a/lib/ruby2d/camera/circle.rb +++ b/lib/ruby2d/camera/circle.rb @@ -28,6 +28,11 @@ module Ruby2D Window.remove(self) end + def z=(z) + super(z) + Ruby2D::Camera._sort_by_z + end + def remove @hide = true end diff --git a/lib/ruby2d/camera/image.rb b/lib/ruby2d/camera/image.rb index dccbec9..aa72685 100644 --- a/lib/ruby2d/camera/image.rb +++ b/lib/ruby2d/camera/image.rb @@ -34,6 +34,11 @@ module Camera Window.remove(self) end + def z=(z) + super(z) + Ruby2D::Camera._sort_by_z + end + def remove @hide = true end diff --git a/lib/ruby2d/camera/line.rb b/lib/ruby2d/camera/line.rb index f6d8f03..6019f3c 100644 --- a/lib/ruby2d/camera/line.rb +++ b/lib/ruby2d/camera/line.rb @@ -45,15 +45,20 @@ module Ruby2D end # Methods for moving the shape + attr_writer :x, :y + def x @x ||= 0 end - attr_writer :x, :y - def y @y ||= 0 end + + def z=(z) + super(z) + Ruby2D::Camera._sort_by_z + end end end end diff --git a/lib/ruby2d/camera/quad.rb b/lib/ruby2d/camera/quad.rb index 5b778b9..24ba516 100644 --- a/lib/ruby2d/camera/quad.rb +++ b/lib/ruby2d/camera/quad.rb @@ -49,15 +49,20 @@ module Ruby2D end # Methods for moving the shape + attr_writer :x, :y + def x @x ||= 0 end - attr_writer :x, :y - def y @y ||= 0 end + + def z=(z) + super(z) + Ruby2D::Camera._sort_by_z + end end end end diff --git a/lib/ruby2d/camera/rectangle.rb b/lib/ruby2d/camera/rectangle.rb index 4d06eec..b3758b6 100644 --- a/lib/ruby2d/camera/rectangle.rb +++ b/lib/ruby2d/camera/rectangle.rb @@ -57,15 +57,20 @@ module Ruby2D end # Methods for moving the shape + attr_writer :x, :y + def x @x ||= 0 end - attr_writer :x, :y - def y @y ||= 0 end + + def z=(z) + super(z) + Ruby2D::Camera._sort_by_z + end end end end diff --git a/lib/ruby2d/camera/sprite.rb b/lib/ruby2d/camera/sprite.rb index a1fb7b8..d01a86f 100644 --- a/lib/ruby2d/camera/sprite.rb +++ b/lib/ruby2d/camera/sprite.rb @@ -49,6 +49,11 @@ module Ruby2D Window.remove(self) end + def z=(z) + super(z) + Ruby2D::Camera._sort_by_z + end + def remove @hide = true end diff --git a/lib/ruby2d/camera/square.rb b/lib/ruby2d/camera/square.rb index 75e1e83..b6f0321 100644 --- a/lib/ruby2d/camera/square.rb +++ b/lib/ruby2d/camera/square.rb @@ -57,15 +57,20 @@ module Ruby2D end # Methods for moving the shape + attr_writer :x, :y + def x @x ||= 0 end - attr_writer :x, :y - def y @y ||= 0 end + + def z=(z) + super(z) + Ruby2D::Camera._sort_by_z + end end end end diff --git a/lib/ruby2d/camera/text.rb b/lib/ruby2d/camera/text.rb index 00f15b3..da23edb 100644 --- a/lib/ruby2d/camera/text.rb +++ b/lib/ruby2d/camera/text.rb @@ -46,6 +46,11 @@ module Ruby2D Window.remove(self) end + def z=(z) + super(z) + Ruby2D::Camera._sort_by_z + end + def remove @hide = true end diff --git a/lib/ruby2d/camera/triangle.rb b/lib/ruby2d/camera/triangle.rb index b506fb4..56e2aef 100644 --- a/lib/ruby2d/camera/triangle.rb +++ b/lib/ruby2d/camera/triangle.rb @@ -44,15 +44,20 @@ module Ruby2D end # Methods for moving the shape + attr_writer :x, :y + def x @x ||= 0 end - attr_writer :x, :y - def y @y ||= 0 end + + def z=(z) + super(z) + Ruby2D::Camera._sort_by_z + end end end end diff --git a/lib/ruby2d/camera/version.rb b/lib/ruby2d/camera/version.rb index 2372efc..1b12ce9 100644 --- a/lib/ruby2d/camera/version.rb +++ b/lib/ruby2d/camera/version.rb @@ -2,6 +2,6 @@ module Ruby2d module Camera - VERSION = '1.1.0' + VERSION = '1.1.1.beta' end end @@ -1,248 +0,0 @@ -# frozen_string_literal: true - -require 'ruby2d' -require 'ruby2d/camera' -require_relative 'house' -require_relative 'room' - -Window.set(icon: './assets/blobcoolthink.png', - width: 1280, - height: 720, - background: 'blue') - - -@player = Camera::Sprite.new('./assets/sprites/mainblob-128.png', - x: 1920 / 1.1, - y: 1080 / 1.1, - width: 50, - height: 50, - clip_width: 128, - loop: true, - time: 1, - z: 99, - animations: { - walk: 0...60, - stand: 60...61 - }) -@shadow = Camera::Image.new( - 'assets/blobshadow.png', - width: 52, - height: 10, - z: 4 -) -#Camera << @shadow [email protected] animation: :walk, loop: true -#Camera << @player - -# UI -Rectangle.new( - width: 350, - height: 135, - color: 'navy', - z: 100 -) -@ui_pos_cam = Text.new( - 'pos: 0,0', - x: 10, - y: 10, - color: 'teal', - z: 101 -) -@ui_pos_ply = Text.new( - 'pos: 0,0', - x: 10, - y: 40, - color: 'teal', - z: 101 -) -@ui_zoom = Text.new( - 'zoom: 0', - x: 10, - y: 70, - color: 'lime', - z: 101 -) -@ui_rotation = Text.new( - 'rotation: 0', - x: 10, - y: 100, - color: 'lime', - z: 101 -) -Rectangle.new( - x: (Window.width - 120), - width: 120, - height: 45, - color: 'navy', - z: 100 -) -@ui_fps = Text.new( - 'fps: 60.00', - x: (Window.width - 110), - y: 10, - color: 'teal', - z: 101 -) - - - -# How fast the player can move -@speed = 5 - -# Initializing -@player_movement_x = 0 -@player_movement_y = 0 -@pressed_space = false -@scene_transition_into = false -@scene_transition_out = false -@indoors = false -@house = nil -@room = nil - -on :key do |event| - if event.key == 'w' - @player_movement_y -= @speed unless @scene_transition_into || @scene_transition_out - end - if event.key == 's' - @player_movement_y += @speed unless @scene_transition_into || @scene_transition_out - end - if event.key == 'd' - @player_movement_x += @speed unless @scene_transition_into || @scene_transition_out - end - if event.key == 'a' - @player_movement_x -= @speed unless @scene_transition_into || @scene_transition_out - end - if event.key == 'space' - @pressed_space = true unless @scene_transition_into || @scene_transition_out - end - if event.key == 'q' - Camera.angle += 1 unless @scene_transition_into || @scene_transition_out - end - if event.key == 'e' - Camera.angle -= 1 unless @scene_transition_into || @scene_transition_out - end - if event.key == 'r' - unless @scene_transition_into || @scene_transition_out || Camera.angle.zero? - if Camera.angle <= 180 - if Camera.angle > 10 - Camera.angle -= 10 - else - Camera.angle -=1 - end - elsif - if Camera.angle < 350 - Camera.angle += 10 - else - Camera.angle += 1 - end - end - end - end -end - -update do - if (@player.x > 2371 && @player_movement_x.positive?) || (@player.x.negative? && @player_movement_x.negative?) - @player_movement_x = 0 - end - if (@player.y > 1608 && @player_movement_y.positive?) || (@player.y.negative? && @player_movement_y.negative?) - @player_movement_y = 0 - end - if !@player_movement_y.zero? == !@player_movement_x.zero? - @player_movement_x /= 1.4141 - @player_movement_y /= 1.4141 - end - @player.x += @player_movement_x - @player.y += @player_movement_y - if @player_movement_x.negative? - @player.play animation: :walk, loop: true - elsif @player_movement_x.positive? || !@player_movement_y.zero? - @player.play animation: :walk, loop: true, flip: :vertical - else - @player.play animation: :stand - end - - if !@scene_transition_into && !@scene_transition_out - Camera.zoom += ((-[Math.sqrt(((@player.x + (@player.width / 2) - Camera.x)**2) + ((@player.y + (@player.width / 2) - Camera.y)**2)), 350].min * 0.004) + 2 - Camera.zoom) * 0.25 - Camera.x += (@player.x + (@player.width / 2) - Camera.x) * 0.025 - Camera.y += (@player.y + (@player.height / 2) - Camera.y) * 0.025 - elsif @scene_transition_into - if Camera.zoom < 250 - Camera.zoom *= 1.05 - Camera.angle += 5 - else - @scene_transition_into = false - @scene_transition_out = true - if @room.nil? - @house.remove - @house = nil - @indoors = true - else - @room.remove - @room = nil - @indoors = false - end - #Camera.remove @background - @background.remove - @background = nil - end - Camera.x += (@player.x + (@player.width / 2) - Camera.x) * 0.25 - Camera.y += (@player.y + (@player.height / 2) - Camera.y) * 0.25 - elsif @scene_transition_out - if !((Camera.zoom <= (@zoom_transition * 1.001)) && (Camera.angle == @angle_transition)) - Camera.zoom /= 1.05 - Camera.angle -= 5 - else - @scene_transition_out = false - end - end - - if @house.nil? && !@indoors - @house = House.new(750, 300) - @background = Camera::Image.new( - 'assets/background.png', - x: 100, y: 100, - z: -1 - ) - #Camera << @background - elsif @room.nil? && @indoors - @room = Room.new(750,300) - @background = Camera::Rectangle.new( - color: 'black', - x: 0, - y: 0, - width: 1920, - height: 1080, - z: -1 - ) - end - @shadow.x = @player.x - 2 - @shadow.y = @player.y + 42 - - #Camera.remove @house_text - @house_text&.remove - if @indoors - @house_text = @room.visted_by?(@player) - else - @house_text = @house.visted_by?(@player) - end - unless @house_text.nil? - #Camera << @house_text - @house_text.center = true - end - if !@house_text.nil? && @pressed_space && !@scene_transition_into && !@scene_transition_out - @scene_transition_into = true - @angle_transition = Camera.angle - @zoom_transition = Camera.zoom - end - @ui_pos_cam.text = "Camera Position: #{Camera.x.round(1)}, #{Camera.y.round(1)}" - @ui_pos_ply.text = "Player Position: #{@player.x.round(1)}, #{@player.y.round(1)}" - @ui_zoom.text = "Zoom: #{Camera.zoom.round(3)}" - @ui_fps.text = "FPS: #{Window.fps.round(2)}" - @ui_rotation.text = "Angle: #{Camera.angle}" - @player_movement_x = 0 - @player_movement_y = 0 - @pressed_space = false - - #Camera.redraw -end -show |
