diff options
| author | realtradam <[email protected]> | 2021-12-18 20:38:08 -0500 |
|---|---|---|
| committer | realtradam <[email protected]> | 2021-12-18 20:38:08 -0500 |
| commit | 77e739ff9ebd4ab9fc7a2ed50472eaaa296a0509 (patch) | |
| tree | 7d6f7fb3fb1f842688953a111752ed84d293e949 /app/systems/camera.rb | |
| parent | 509f53c9bca30de88af6f12c371ca637a9a4f9a3 (diff) | |
| download | SteelWings-77e739ff9ebd4ab9fc7a2ed50472eaaa296a0509.tar.gz SteelWings-77e739ff9ebd4ab9fc7a2ed50472eaaa296a0509.zip | |
Implemented camera and updated debug to work with camera
Diffstat (limited to 'app/systems/camera.rb')
| -rw-r--r-- | app/systems/camera.rb | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/app/systems/camera.rb b/app/systems/camera.rb new file mode 100644 index 0000000..db6e3fc --- /dev/null +++ b/app/systems/camera.rb @@ -0,0 +1,29 @@ +FF::Scn::Render.add( + # Update the position of the sprite according + # to camera values before the sprite is rendered + FF::Sys.new('Camera', priority: 97) do + camera = FF::Cmp::SingletonCamera[0] + camera.entities.each do |ent| + sprite = ent.components[FF::Cmp::Sprite][0].props + + angle = camera.angle * (Math::PI / 180) + half_width = $gtk.args.grid.w * 0.5 + half_height = $gtk.args.grid.h * 0.5 + offset_x = sprite[:x] + (sprite[:w] / 2) + offset_y = sprite[:y] + (sprite[:h] / 2) + temp_x = (((offset_x - camera.x) * Math.cos(angle)) - ((offset_y - camera.y) * Math.sin(angle))) \ + * camera.zoom + half_width - (sprite[:w] * camera.zoom / 2) + temp_y = (((offset_x - camera.x) * Math.sin(angle)) + ((offset_y - camera.y) * Math.cos(angle))) \ + * camera.zoom + half_height - (sprite[:h] * camera.zoom / 2) + temp_rotate = sprite[:angle] + camera.angle + temp_width = sprite[:w] * camera.zoom + temp_height = sprite[:h] * camera.zoom + + sprite[:x] = temp_x + sprite[:y] = temp_y + sprite[:w] = temp_width + sprite[:h] = temp_height + sprite[:angle] = temp_rotate + end + end +) |
