diff options
| author | realtradam <[email protected]> | 2021-01-19 18:55:59 -0500 |
|---|---|---|
| committer | realtradam <[email protected]> | 2021-01-19 18:55:59 -0500 |
| commit | 344daa131d2343283e9e33e454b328f3e233f6b4 (patch) | |
| tree | 1a10595dc9dc00e828a2990e73f40f2ddb7324e1 /camera.rb | |
| download | ruby2d-camera-old-344daa131d2343283e9e33e454b328f3e233f6b4.tar.gz ruby2d-camera-old-344daa131d2343283e9e33e454b328f3e233f6b4.zip | |
initial
Diffstat (limited to 'camera.rb')
| -rw-r--r-- | camera.rb | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/camera.rb b/camera.rb new file mode 100644 index 0000000..7e93f7e --- /dev/null +++ b/camera.rb @@ -0,0 +1,65 @@ + +class Camera + + def self.elasticity + @elasticity ||= 1 + end + + def self.elasticity= speed + @elasticity = speed + end + + def self.follow item + self.move_to((item.x - (Window.width / 2))/self.elasticity, + (item.y - (Window.height / 2))/self.elasticity) + end + + def self.objects + @objects ||= [] + end + + def self.<< item + unless self.objects.include?(item) + self.objects.push(item) + end + end + + def self.add item + self << item + end + + def self.remove item + if self.objects.include?(item) + self.objects.delete(item) + end + end + + + def self.move_by(x,y) + self.camera_position[0] += x + self.camera_position[1] += y + objects.each do |object| + object.x -= x + object.y -= y + end + end + def self.move_to(x,y) + self.camera_position = [x+camera_position[0],y+camera_position[1]] + objects.each do |object| + object.x -= x + object.y -= y + end + end + + def self.camera_position + @camera_position ||= [0,0] + end + + private + + def self.camera_position= array + @camera_position = array + end + + +end |
