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