diff options
| author | realtradam <[email protected]> | 2021-04-23 00:29:45 -0400 |
|---|---|---|
| committer | realtradam <[email protected]> | 2021-04-23 00:29:45 -0400 |
| commit | 5d5cbf2f1b39fb50f3abb7d8d9eb8fbd76115a83 (patch) | |
| tree | 96985c8527ef6905e4f3332da1eaaec212decbdf | |
| parent | ce9047d61e9514cbb38bfc0f8dcdb7dac4afa840 (diff) | |
| download | ruby2d-camera-5d5cbf2f1b39fb50f3abb7d8d9eb8fbd76115a83.tar.gz ruby2d-camera-5d5cbf2f1b39fb50f3abb7d8d9eb8fbd76115a83.zip | |
.
| -rw-r--r-- | adapt_triangle.rb | 28 | ||||
| -rw-r--r-- | camera.rb | 22 | ||||
| -rw-r--r-- | run.rb | 29 |
3 files changed, 26 insertions, 53 deletions
diff --git a/adapt_triangle.rb b/adapt_triangle.rb index de1ae0d..dd73991 100644 --- a/adapt_triangle.rb +++ b/adapt_triangle.rb @@ -2,6 +2,7 @@ module AdaptTriangle +=begin def _translate_x(x) @x1 += x @x2 += x @@ -22,7 +23,7 @@ module AdaptTriangle @x3 = ((@x3) * Math.cos(angle)) - ((@y3) * Math.sin(angle)) @y3 = ((@x3) * Math.sin(angle)) + ((@y3) * Math.cos(angle)) end - +=end def _update angle = Camera.angle * (Math::PI / 180) @x1 = (((x + x1 - Camera.x) * Math.cos(angle)) - ((y + y1 - Camera.y) * Math.sin(angle))) * Camera.zoom @@ -31,6 +32,15 @@ module AdaptTriangle @y2 = (((x + x2 - Camera.x) * Math.sin(angle)) + ((y + y2 - Camera.y) * Math.cos(angle))) * Camera.zoom @x3 = (((x + x3 - Camera.x) * Math.cos(angle)) - ((y + y3 - Camera.y) * Math.sin(angle))) * Camera.zoom @y3 = (((x + x3 - Camera.x) * Math.sin(angle)) + ((y + y3 - Camera.y) * Math.cos(angle))) * Camera.zoom + width = Window.width * 0.5 + height = Window.height * 0.5 + @x1 += width + @x2 += width + @x3 += width + @y1 += height + @y2 += height + @y3 += height + end def _x1 @@ -46,10 +56,6 @@ module AdaptTriangle end def x=(x) - #diff = x - self.x - #self.x1 += diff - #self.x2 += diff - #self.x3 += diff @x = x _update end @@ -59,39 +65,27 @@ module AdaptTriangle end def y=(y) - #diff = y - self.y - #self.y1 += diff - #self.y2 += diff - #self.y3 += diff @y = y end #undo rotation def x1 @virtual_x1 ||= @x1 - #(@x1 * Math.cos(-Camera.angle)) - (@y1 * Math.sin(-Camera.angle)) - Camera.x end #difference between 'x1' and undone rotation > then rotated def x1=(x1) @virtual_x1 = x1 _update - #temp = self.x1 - #@x1 += ((x1 - temp) * Math.cos(Camera.angle)) - #@y1 += ((x1 - temp) * Math.sin(Camera.angle)) end def y1 @virtual_y1 ||= @y1 - #(@x1 * Math.sin(-Camera.angle)) + (@y1 * Math.cos(-Camera.angle)) - Camera.y end def y1=(y1) @virtual_y1 = y1 _update - #temp = self.y1 - #@x1 += -((y1 - temp) * Math.sin(Camera.angle)) - #@y1 += ((y1 - temp) * Math.cos(Camera.angle)) end def x2 @@ -15,7 +15,7 @@ module Camera item.extend AdaptTriangle if item.is_a? Triangle objects.push(item) unless objects.include?(item) end - +=begin def self.center_x x + ((Window.width / 2) * (1/zoom)) end @@ -50,11 +50,12 @@ module Camera objects.each(&:_update) end =end + def self._x(x) @x += x objects.each(&:_update) end - + def self._y(y) @y += y objects.each(&:_update) @@ -65,9 +66,9 @@ module Camera end def self.x=(x) - angle = Camera.angle * (Math::PI / 180) - @y += (x - self.x) * Math.sin(-angle) - @x += (x - self.x) * Math.cos(-angle) + #angle = Camera.angle * (Math::PI / 180) + #@y += (x - self.x) * Math.sin(-angle) + @x = x#+= (x - self.x) * Math.cos(-angle) objects.each(&:_update) end @@ -76,9 +77,9 @@ module Camera end def self.y=(y) - angle = Camera.angle * (Math::PI / 180) - @x += -(y - self.y) * Math.sin(-angle) - @y += (y - self.y) * Math.cos(-angle) + #angle = Camera.angle * (Math::PI / 180) + #@x += -(y - self.y) * Math.sin(-angle) + @y = y#+= (y - self.y) * Math.cos(-angle) objects.each(&:_update) end @@ -88,12 +89,7 @@ module Camera def self.zoom=(zoom) if zoom != self.zoom - shift = (Window.width - Window.height) / 2 - #temp = [center_x, center_y] - temp = [0, center_y] @zoom = zoom - self.center_x = temp[0] - self.center_y = temp[1] objects.each(&:_update) end end @@ -180,38 +180,21 @@ update do Camera.zoom *= @zoom_by if @is_follow - #Camera.center(@player.x, @player.y) - Camera.center_x = @player.x - Camera.center_y = @player.y + Camera.x = @player.x + Camera.y = @player.y else - Camera.x += @cam_x_move - Camera.y += @cam_y_move + angle = Camera.angle * (Math::PI / 180) + Camera.x += (@cam_x_move * Math.cos(-angle)) - (@cam_y_move * Math.sin(-angle)) + Camera.y += (@cam_x_move * Math.sin(-angle)) + (@cam_y_move * Math.cos(-angle)) end @cam_x_move = 0 @cam_y_move = 0 @zoom_by = 1 - @ui_pos_cam.text = "Camera Position: #{Camera.center_x.round(1)}, #{Camera.center_y.round(1)}" + @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}" - angle = Math::PI / 180 * Camera.angle - Camera._x((Math.cos(angle + (3 * Math::PI / 4)) * 0.7 + 0.5) * Window.height )#* (1/Camera.zoom)) - Camera._y((Math.cos(angle - (3 * Math::PI / 4)) * 0.7 + 0.5) * Window.height )#* (1/Camera.zoom)) - shift = (Window.width - Window.height) / 2 - Camera._x(shift )#* (Camera.zoom / 1)) - - - Camera._x(-shift * Math.cos(-angle) )#* (1/Camera.zoom)) - Camera._y(-shift * Math.sin(-angle) )#* (1/Camera.zoom)) - Camera._x(-Window.width.to_f * 0.5 * ((1/Camera.zoom) - 1)) - Camera._y(-Window.height.to_f * 0.5 * ((1/Camera.zoom) - 1)) - puts 'debug x' - puts Camera.x - puts @debug1 - puts 'debug y' - puts Camera.y - puts @debug3 end show |
