lib/ruby2d/camera/circle.rb in ruby2d-camera-1.1.1 vs lib/ruby2d/camera/circle.rb in ruby2d-camera-1.2.0.pre.beta.1
- old
+ new
@@ -9,29 +9,53 @@
# Use after changing variables
def _draw
return if @hide
angle = Camera.angle * (Math::PI / 180)
+ self_angle = self.angle * (Math::PI / 180)
half_width = Window.width * 0.5
half_height = Window.height * 0.5
temp_radius = @radius * Camera.zoom
- temp_x = (((@x - Ruby2D::Camera.x + radius) * Math.cos(angle)) - ((@y - Ruby2D::Camera.y + radius) * Math.sin(angle))) * Ruby2D::Camera.zoom + half_width
- temp_y = (((@x - Ruby2D::Camera.x + radius) * Math.sin(angle)) + ((@y - Ruby2D::Camera.y + radius) * Math.cos(angle))) * Ruby2D::Camera.zoom + half_height
- Ruby2D::Circle.draw(x: temp_x, y: temp_y,
+ # rotate the shape
+ temp1_x = (x_offset * Math.cos(self_angle)) - (y_offset * Math.sin(self_angle)) + x
+ temp1_y = (y_offset * Math.cos(self_angle)) + (x_offset * Math.sin(self_angle)) + y
+ # apply the camera modifications
+ temp2_x = (((temp1_x - Ruby2D::Camera.x - radius) * Math.cos(angle)) - ((temp1_y - Ruby2D::Camera.y - radius) * Math.sin(angle))) * Ruby2D::Camera.zoom + half_width
+ temp2_y = (((temp1_x - Ruby2D::Camera.x - radius) * Math.sin(angle)) + ((temp1_y - Ruby2D::Camera.y - radius) * Math.cos(angle))) * Ruby2D::Camera.zoom + half_height
+ Ruby2D::Circle.draw(x: temp2_x, y: temp2_y,
radius: temp_radius,
sectors: sectors,
color: [color.r, color.g, color.b, color.a])
end
def initialize(opts = {})
super(opts)
+ unless opts[:x_offset].nil?
+ self.x_offset = opts[:x_offset]
+ end
+ unless opts[:y_offset].nil?
+ self.y_offset = opts[:y_offset]
+ end
Ruby2D::Camera << self
Window.remove(self)
end
- def z=(z)
- super(z)
- Ruby2D::Camera._sort_by_z
+ def angle
+ @angle ||= 0
+ end
+
+ def angle=(angle)
+ @angle = (angle % 360)
+ end
+
+ attr_writer :x_offset, :y_offset
+
+ def x_offset
+ @x_offset ||= 0
+ end
+
+ def y_offset
+ @y_offset ||= 0
end
def remove
@hide = true
end