summaryrefslogtreecommitdiffhomepage
path: root/camera.rb
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2021-04-20 05:59:38 -0400
committerrealtradam <[email protected]>2021-04-20 05:59:38 -0400
commit72084e270bd849c74b18bfcbb6a0d454035c4897 (patch)
tree39fa5d85e081253f4759fda7d11173300d1a17ff /camera.rb
parent69d5a3c712028b0448489c89243618b864dd02ea (diff)
downloadruby2d-camera-old-72084e270bd849c74b18bfcbb6a0d454035c4897.tar.gz
ruby2d-camera-old-72084e270bd849c74b18bfcbb6a0d454035c4897.zip
.
Diffstat (limited to 'camera.rb')
-rw-r--r--camera.rb49
1 files changed, 43 insertions, 6 deletions
diff --git a/camera.rb b/camera.rb
index 8748ce5..67a537f 100644
--- a/camera.rb
+++ b/camera.rb
@@ -16,14 +16,46 @@ module Camera
objects.push(item) unless objects.include?(item)
end
+ def self.center_x
+ x + ((Window.width / 2) * (1/zoom))
+ end
+
+ def self.center_x=(center_x)
+ @x = center_x - ((Window.width / 2) * (1/zoom))
+ objects.each(&:_update)
+ end
+
+ def self.center_y
+ y + ((Window.height / 2) * (1/zoom))
+ end
+
+ def self.center_y=(center_y)
+ @y = center_y - ((Window.height / 2) * (1/zoom))
+ objects.each(&:_update)
+ end
+ def self.center(center_x, center_y)
+ self.center_y = center_y
+ self.center_x = center_y
+ #@y = center_y
+ #@x = center_x
+ angle = Math::PI / 180 * (Camera.angle + (1 * 45))
+ offset_angle = Math::PI / 180 * 45
+ x = (Math.cos(angle) - Math.cos(offset_angle)) * (Window.width/2) * Math.sqrt(2) * (1 / zoom)
+ y = (Math.sin(angle) - Math.sin(offset_angle)) * (Window.height/2) * Math.sqrt(2) * (1 / zoom)
+ @x += x
+ @y += y
+ #@x = x + ((pivot_x - x) * Math.cos(angle)) - ((pivot_y - y) * Math.sin(angle))
+ #@y = y + ((pivot_x - x) * Math.sin(angle)) + ((pivot_y - y) * Math.cos(angle))
+ objects.each(&:_update)
+ end
def self.x
@x ||= 0
end
def self.x=(x)
angle = Camera.angle * (Math::PI / 180)
- @y -= (-self.x + x) * Math.sin(-angle)
- @x -= (-self.x + x) * Math.cos(-angle)
+ @y += (x - self.x) * Math.sin(-angle)
+ @x += (x - self.x) * Math.cos(-angle)
objects.each(&:_update)
end
@@ -33,8 +65,8 @@ module Camera
def self.y=(y)
angle = Camera.angle * (Math::PI / 180)
- @x -= -(-self.y + y) * Math.sin(-angle)
- @y -= (-self.y + y) * Math.cos(-angle)
+ @x += -(y - self.y) * Math.sin(-angle)
+ @y += (y - self.y) * Math.cos(-angle)
objects.each(&:_update)
end
@@ -43,8 +75,13 @@ module Camera
end
def self.zoom=(zoom)
- #TODO
- @zoom = zoom
+ if zoom != self.zoom
+ temp = [center_x, center_y]
+ @zoom = zoom
+ self.center_x = temp[0]
+ self.center_y = temp[1]
+ objects.each(&:_update)
+ end
end
def self.angle