summaryrefslogtreecommitdiffhomepage
path: root/samples/07_advanced_rendering/09_z_targeting_camera/app/main.rb
diff options
context:
space:
mode:
author_Tradam <[email protected]>2021-12-16 19:22:26 -0500
committerGitHub <[email protected]>2021-12-16 19:22:26 -0500
commit5954b9beb4d4a3b4f248d72d1851195f030558a8 (patch)
treefecd8aa840a25afdb502915b0fdb4d03b7ed339a /samples/07_advanced_rendering/09_z_targeting_camera/app/main.rb
parent2f845281f133849256b57bb08fd3e9ae57600784 (diff)
parenteaa29e72939f5edf61735ccbb73c36ee89369f65 (diff)
downloaddragonruby-game-toolkit-contrib-master.tar.gz
dragonruby-game-toolkit-contrib-master.zip
Merge branch 'DragonRuby:master' into masterHEADmaster
Diffstat (limited to 'samples/07_advanced_rendering/09_z_targeting_camera/app/main.rb')
-rw-r--r--samples/07_advanced_rendering/09_z_targeting_camera/app/main.rb106
1 files changed, 106 insertions, 0 deletions
diff --git a/samples/07_advanced_rendering/09_z_targeting_camera/app/main.rb b/samples/07_advanced_rendering/09_z_targeting_camera/app/main.rb
new file mode 100644
index 0000000..ecdbfd3
--- /dev/null
+++ b/samples/07_advanced_rendering/09_z_targeting_camera/app/main.rb
@@ -0,0 +1,106 @@
+class Game
+ attr_gtk
+
+ def tick
+ defaults
+ render
+ input
+ calc
+ end
+
+ def defaults
+ outputs.background_color = [219, 208, 191]
+ player.x ||= 634
+ player.y ||= 153
+ player.angle ||= 90
+ player.distance ||= arena_radius
+ target.x ||= 634
+ target.y ||= 359
+ end
+
+ def render
+ outputs[:scene].sprites << ([0, 0, 933, 700, 'sprites/arena.png'].center_inside_rect grid.rect)
+ outputs[:scene].sprites << target_sprite
+ outputs[:scene].sprites << player_sprite
+ outputs.sprites << scene
+ end
+
+ def target_sprite
+ {
+ x: target.x, y: target.y,
+ w: 10, h: 10,
+ path: 'sprites/square/black.png'
+ }.anchor_rect 0.5, 0.5
+ end
+
+ def input
+ if inputs.up && player.distance > 30
+ player.distance -= 2
+ elsif inputs.down && player.distance < 200
+ player.distance += 2
+ end
+
+ player.angle += inputs.left_right * -1
+ end
+
+ def calc
+ player.x = target.x + ((player.angle * 1).vector_x player.distance)
+ player.y = target.y + ((player.angle * -1).vector_y player.distance)
+ end
+
+ def player_sprite
+ {
+ x: player.x,
+ y: player.y,
+ w: 50,
+ h: 100,
+ path: 'sprites/player.png',
+ angle: (player.angle * -1) + 90
+ }.anchor_rect 0.5, 0
+ end
+
+ def center_map
+ { x: 634, y: 359 }
+ end
+
+ def zoom_factor_single
+ 2 - ((args.geometry.distance player, center_map).fdiv arena_radius)
+ end
+
+ def zoom_factor
+ zoom_factor_single ** 2
+ end
+
+ def arena_radius
+ 206
+ end
+
+ def scene
+ {
+ x: (640 - player.x) + (640 - (640 * zoom_factor)),
+ y: (360 - player.y - (75 * zoom_factor)) + (320 - (320 * zoom_factor)),
+ w: 1280 * zoom_factor,
+ h: 720 * zoom_factor,
+ path: :scene,
+ angle: player.angle - 90,
+ angle_anchor_x: (player.x.fdiv 1280),
+ angle_anchor_y: (player.y.fdiv 720)
+ }
+ end
+
+ def player
+ state.player
+ end
+
+ def target
+ state.target
+ end
+end
+
+def tick args
+ $game ||= Game.new
+ $game.args = args
+ $game.tick
+end
+
+$gtk.reset