summaryrefslogtreecommitdiffhomepage
path: root/samples/07_advanced_rendering/07_simple_camera
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/07_simple_camera
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/07_simple_camera')
-rw-r--r--samples/07_advanced_rendering/07_simple_camera/app/main.rb93
-rw-r--r--samples/07_advanced_rendering/07_simple_camera/replay.txt232
2 files changed, 325 insertions, 0 deletions
diff --git a/samples/07_advanced_rendering/07_simple_camera/app/main.rb b/samples/07_advanced_rendering/07_simple_camera/app/main.rb
new file mode 100644
index 0000000..e8d96ea
--- /dev/null
+++ b/samples/07_advanced_rendering/07_simple_camera/app/main.rb
@@ -0,0 +1,93 @@
+def tick args
+ # variables you can play around with
+ args.state.world.w ||= 1280
+ args.state.world.h ||= 720
+
+ args.state.player.x ||= 0
+ args.state.player.y ||= 0
+ args.state.player.size ||= 32
+
+ args.state.enemy.x ||= 700
+ args.state.enemy.y ||= 700
+ args.state.enemy.size ||= 16
+
+ args.state.camera.x ||= 640
+ args.state.camera.y ||= 300
+ args.state.camera.scale ||= 1.0
+ args.state.camera.show_empty_space ||= :yes
+
+ # instructions
+ args.outputs.primitives << { x: 0, y: 80.from_top, w: 360, h: 80, r: 0, g: 0, b: 0, a: 128 }.solid!
+ args.outputs.primitives << { x: 10, y: 10.from_top, text: "arrow keys to move around", r: 255, g: 255, b: 255}.label!
+ args.outputs.primitives << { x: 10, y: 30.from_top, text: "+/- to change zoom of camera", r: 255, g: 255, b: 255}.label!
+ args.outputs.primitives << { x: 10, y: 50.from_top, text: "tab to change camera edge behavior", r: 255, g: 255, b: 255}.label!
+
+ # render scene
+ args.outputs[:scene].w = args.state.world.w
+ args.outputs[:scene].h = args.state.world.h
+
+ args.outputs[:scene].solids << { x: 0, y: 0, w: args.state.world.w, h: args.state.world.h, r: 20, g: 60, b: 80 }
+ args.outputs[:scene].solids << { x: args.state.player.x, y: args.state.player.y,
+ w: args.state.player.size, h: args.state.player.size, r: 80, g: 155, b: 80 }
+ args.outputs[:scene].solids << { x: args.state.enemy.x, y: args.state.enemy.y,
+ w: args.state.enemy.size, h: args.state.enemy.size, r: 155, g: 80, b: 80 }
+
+ # render camera
+ scene_position = calc_scene_position args
+ args.outputs.sprites << { x: scene_position.x,
+ y: scene_position.y,
+ w: scene_position.w,
+ h: scene_position.h,
+ path: :scene }
+
+ # move player
+ if args.inputs.directional_angle
+ args.state.player.x += args.inputs.directional_angle.vector_x * 5
+ args.state.player.y += args.inputs.directional_angle.vector_y * 5
+ args.state.player.x = args.state.player.x.clamp(0, args.state.world.w - args.state.player.size)
+ args.state.player.y = args.state.player.y.clamp(0, args.state.world.h - args.state.player.size)
+ end
+
+ # +/- to zoom in and out
+ if args.inputs.keyboard.plus && args.state.tick_count.zmod?(3)
+ args.state.camera.scale += 0.05
+ elsif args.inputs.keyboard.hyphen && args.state.tick_count.zmod?(3)
+ args.state.camera.scale -= 0.05
+ elsif args.inputs.keyboard.key_down.tab
+ if args.state.camera.show_empty_space == :yes
+ args.state.camera.show_empty_space = :no
+ else
+ args.state.camera.show_empty_space = :yes
+ end
+ end
+
+ args.state.camera.scale = args.state.camera.scale.greater(0.1)
+end
+
+def calc_scene_position args
+ result = { x: args.state.camera.x - (args.state.player.x * args.state.camera.scale),
+ y: args.state.camera.y - (args.state.player.y * args.state.camera.scale),
+ w: args.state.world.w * args.state.camera.scale,
+ h: args.state.world.h * args.state.camera.scale,
+ scale: args.state.camera.scale }
+
+ return result if args.state.camera.show_empty_space == :yes
+
+ if result.w < args.grid.w
+ result.merge!(x: (args.grid.w - result.w).half)
+ elsif (args.state.player.x * result.scale) < args.grid.w.half
+ result.merge!(x: 10)
+ elsif (result.x + result.w) < args.grid.w
+ result.merge!(x: - result.w + (args.grid.w - 10))
+ end
+
+ if result.h < args.grid.h
+ result.merge!(y: (args.grid.h - result.h).half)
+ elsif (result.y) > 10
+ result.merge!(y: 10)
+ elsif (result.y + result.h) < args.grid.h
+ result.merge!(y: - result.h + (args.grid.h - 10))
+ end
+
+ result
+end
diff --git a/samples/07_advanced_rendering/07_simple_camera/replay.txt b/samples/07_advanced_rendering/07_simple_camera/replay.txt
new file mode 100644
index 0000000..532f46c
--- /dev/null
+++ b/samples/07_advanced_rendering/07_simple_camera/replay.txt
@@ -0,0 +1,232 @@
+replay_version 2.0
+stopped_at 1551
+seed 100
+recorded_at Sat Jul 17 09:21:44 2021
+[:mouse_button_up, 1, 0, 1, 1, 6]
+[:mouse_button_pressed, 1, 0, 1, 2, 140]
+[:mouse_button_up, 1, 0, 1, 3, 146]
+[:key_down_raw, 1073741903, 0, 2, 4, 245]
+[:key_down_raw, 1073741903, 0, 2, 5, 259]
+[:key_down_raw, 1073741903, 0, 2, 6, 261]
+[:key_down_raw, 1073741903, 0, 2, 7, 263]
+[:key_down_raw, 1073741903, 0, 2, 8, 265]
+[:key_down_raw, 1073741903, 0, 2, 9, 267]
+[:key_down_raw, 1073741903, 0, 2, 10, 269]
+[:key_down_raw, 1073741906, 0, 2, 11, 269]
+[:key_up_raw, 1073741903, 0, 2, 12, 280]
+[:key_down_raw, 1073741903, 0, 2, 13, 284]
+[:key_down_raw, 1073741903, 0, 2, 14, 299]
+[:key_down_raw, 1073741903, 0, 2, 15, 301]
+[:key_down_raw, 1073741903, 0, 2, 16, 303]
+[:key_down_raw, 1073741903, 0, 2, 17, 305]
+[:key_down_raw, 1073741903, 0, 2, 18, 307]
+[:key_down_raw, 1073741903, 0, 2, 19, 309]
+[:key_down_raw, 1073741903, 0, 2, 20, 311]
+[:key_down_raw, 1073741903, 0, 2, 21, 313]
+[:key_down_raw, 1073741903, 0, 2, 22, 315]
+[:key_down_raw, 1073741903, 0, 2, 23, 317]
+[:key_down_raw, 1073741903, 0, 2, 24, 319]
+[:key_down_raw, 1073741903, 0, 2, 25, 321]
+[:key_down_raw, 1073741903, 0, 2, 26, 323]
+[:key_down_raw, 1073741903, 0, 2, 27, 325]
+[:key_down_raw, 1073741903, 0, 2, 28, 327]
+[:key_down_raw, 1073741903, 0, 2, 29, 329]
+[:key_down_raw, 1073741903, 0, 2, 30, 331]
+[:key_down_raw, 1073741903, 0, 2, 31, 333]
+[:key_down_raw, 1073741903, 0, 2, 32, 335]
+[:key_down_raw, 1073741903, 0, 2, 33, 337]
+[:key_down_raw, 1073741903, 0, 2, 34, 339]
+[:key_up_raw, 1073741906, 0, 2, 35, 341]
+[:key_down_raw, 1073741903, 0, 2, 36, 341]
+[:key_down_raw, 1073741903, 0, 2, 37, 343]
+[:key_down_raw, 1073741903, 0, 2, 38, 345]
+[:key_down_raw, 1073741903, 0, 2, 39, 347]
+[:key_down_raw, 1073741903, 0, 2, 40, 349]
+[:key_down_raw, 1073741903, 0, 2, 41, 351]
+[:key_down_raw, 1073741903, 0, 2, 42, 353]
+[:key_down_raw, 1073741903, 0, 2, 43, 355]
+[:key_down_raw, 1073741906, 0, 2, 44, 357]
+[:key_down_raw, 1073741906, 0, 2, 45, 372]
+[:key_down_raw, 1073741906, 0, 2, 46, 374]
+[:key_down_raw, 1073741906, 0, 2, 47, 376]
+[:key_down_raw, 1073741906, 0, 2, 48, 378]
+[:key_down_raw, 1073741906, 0, 2, 49, 380]
+[:key_down_raw, 1073741906, 0, 2, 50, 382]
+[:key_down_raw, 1073741906, 0, 2, 51, 384]
+[:key_down_raw, 1073741906, 0, 2, 52, 386]
+[:key_down_raw, 1073741906, 0, 2, 53, 388]
+[:key_down_raw, 1073741906, 0, 2, 54, 390]
+[:key_down_raw, 1073741906, 0, 2, 55, 392]
+[:key_down_raw, 1073741906, 0, 2, 56, 395]
+[:key_up_raw, 1073741906, 0, 2, 57, 396]
+[:key_up_raw, 1073741903, 0, 2, 58, 397]
+[:key_down_raw, 8, 0, 2, 59, 466]
+[:key_up_raw, 8, 0, 2, 60, 466]
+[:key_down_raw, 8, 0, 2, 61, 470]
+[:key_up_raw, 8, 0, 2, 62, 475]
+[:key_down_raw, 45, 0, 2, 63, 540]
+[:key_up_raw, 45, 0, 2, 64, 545]
+[:key_down_raw, 45, 0, 2, 65, 551]
+[:key_up_raw, 45, 0, 2, 66, 556]
+[:key_down_raw, 45, 0, 2, 67, 566]
+[:key_up_raw, 45, 0, 2, 68, 571]
+[:key_down_raw, 45, 0, 2, 69, 577]
+[:key_up_raw, 45, 0, 2, 70, 581]
+[:key_down_raw, 45, 0, 2, 71, 595]
+[:key_up_raw, 45, 0, 2, 72, 600]
+[:key_down_raw, 1073741905, 0, 2, 73, 715]
+[:key_down_raw, 1073741905, 0, 2, 74, 730]
+[:key_down_raw, 1073741905, 0, 2, 75, 732]
+[:key_down_raw, 1073741905, 0, 2, 76, 734]
+[:key_down_raw, 1073741905, 0, 2, 77, 736]
+[:key_down_raw, 1073741905, 0, 2, 78, 738]
+[:key_down_raw, 1073741904, 0, 2, 79, 739]
+[:key_up_raw, 1073741905, 0, 2, 80, 743]
+[:key_down_raw, 1073741904, 0, 2, 81, 754]
+[:key_down_raw, 1073741904, 0, 2, 82, 756]
+[:key_down_raw, 1073741904, 0, 2, 83, 758]
+[:key_down_raw, 1073741904, 0, 2, 84, 760]
+[:key_down_raw, 1073741904, 0, 2, 85, 762]
+[:key_down_raw, 1073741904, 0, 2, 86, 764]
+[:key_down_raw, 1073741904, 0, 2, 87, 766]
+[:key_down_raw, 1073741904, 0, 2, 88, 768]
+[:key_down_raw, 1073741904, 0, 2, 89, 770]
+[:key_down_raw, 1073741904, 0, 2, 90, 772]
+[:key_down_raw, 1073741905, 0, 2, 91, 774]
+[:key_down_raw, 1073741906, 0, 2, 92, 781]
+[:key_up_raw, 1073741904, 0, 2, 93, 785]
+[:key_up_raw, 1073741905, 0, 2, 94, 791]
+[:key_down_raw, 1073741906, 0, 2, 95, 796]
+[:key_down_raw, 1073741903, 0, 2, 96, 797]
+[:key_up_raw, 1073741906, 0, 2, 97, 804]
+[:key_up_raw, 1073741903, 0, 2, 98, 810]
+[:key_down_raw, 1073742049, 1, 2, 99, 884]
+[:key_down_raw, 61, 1, 2, 100, 885]
+[:key_up_raw, 61, 1, 2, 101, 888]
+[:key_up_raw, 1073742049, 0, 2, 102, 888]
+[:key_down_raw, 1073742049, 1, 2, 103, 898]
+[:key_down_raw, 61, 1, 2, 104, 899]
+[:key_up_raw, 61, 1, 2, 105, 903]
+[:key_up_raw, 1073742049, 0, 2, 106, 903]
+[:key_down_raw, 1073742049, 1, 2, 107, 909]
+[:key_down_raw, 61, 1, 2, 108, 909]
+[:key_up_raw, 61, 1, 2, 109, 912]
+[:key_up_raw, 1073742049, 0, 2, 110, 913]
+[:key_down_raw, 1073742049, 1, 2, 111, 918]
+[:key_down_raw, 61, 1, 2, 112, 918]
+[:key_up_raw, 61, 1, 2, 113, 921]
+[:key_up_raw, 1073742049, 0, 2, 114, 922]
+[:key_down_raw, 1073742049, 1, 2, 115, 926]
+[:key_down_raw, 61, 1, 2, 116, 926]
+[:key_up_raw, 61, 1, 2, 117, 930]
+[:key_up_raw, 1073742049, 0, 2, 118, 931]
+[:key_down_raw, 1073742049, 1, 2, 119, 935]
+[:key_down_raw, 61, 1, 2, 120, 935]
+[:key_up_raw, 61, 1, 2, 121, 940]
+[:key_up_raw, 1073742049, 0, 2, 122, 941]
+[:key_down_raw, 1073742049, 1, 2, 123, 947]
+[:key_down_raw, 61, 1, 2, 124, 947]
+[:key_up_raw, 61, 1, 2, 125, 950]
+[:key_up_raw, 1073742049, 0, 2, 126, 951]
+[:key_down_raw, 1073742049, 1, 2, 127, 955]
+[:key_down_raw, 61, 1, 2, 128, 956]
+[:key_up_raw, 61, 1, 2, 129, 960]
+[:key_up_raw, 1073742049, 0, 2, 130, 960]
+[:key_down_raw, 9, 0, 2, 131, 986]
+[:key_up_raw, 9, 0, 2, 132, 991]
+[:key_down_raw, 1073741904, 0, 2, 133, 1015]
+[:key_down_raw, 1073741904, 0, 2, 134, 1030]
+[:key_down_raw, 1073741904, 0, 2, 135, 1032]
+[:key_down_raw, 1073741904, 0, 2, 136, 1034]
+[:key_down_raw, 1073741904, 0, 2, 137, 1036]
+[:key_down_raw, 1073741904, 0, 2, 138, 1038]
+[:key_down_raw, 1073741904, 0, 2, 139, 1040]
+[:key_down_raw, 1073741904, 0, 2, 140, 1042]
+[:key_up_raw, 1073741904, 0, 2, 141, 1044]
+[:key_down_raw, 1073741903, 0, 2, 142, 1048]
+[:key_down_raw, 1073741903, 0, 2, 143, 1063]
+[:key_down_raw, 1073741903, 0, 2, 144, 1065]
+[:key_down_raw, 1073741903, 0, 2, 145, 1067]
+[:key_down_raw, 1073741903, 0, 2, 146, 1069]
+[:key_down_raw, 1073741903, 0, 2, 147, 1071]
+[:key_down_raw, 1073741903, 0, 2, 148, 1073]
+[:key_down_raw, 1073741903, 0, 2, 149, 1075]
+[:key_down_raw, 1073741903, 0, 2, 150, 1077]
+[:key_down_raw, 1073741903, 0, 2, 151, 1079]
+[:key_down_raw, 1073741903, 0, 2, 152, 1081]
+[:key_down_raw, 1073741903, 0, 2, 153, 1083]
+[:key_down_raw, 1073741903, 0, 2, 154, 1085]
+[:key_down_raw, 1073741903, 0, 2, 155, 1087]
+[:key_down_raw, 1073741903, 0, 2, 156, 1089]
+[:key_down_raw, 1073741903, 0, 2, 157, 1091]
+[:key_down_raw, 1073741903, 0, 2, 158, 1093]
+[:key_down_raw, 1073741903, 0, 2, 159, 1095]
+[:key_down_raw, 1073741903, 0, 2, 160, 1097]
+[:key_down_raw, 1073741903, 0, 2, 161, 1099]
+[:key_down_raw, 1073741903, 0, 2, 162, 1101]
+[:key_down_raw, 1073741903, 0, 2, 163, 1103]
+[:key_down_raw, 1073741903, 0, 2, 164, 1105]
+[:key_down_raw, 1073741903, 0, 2, 165, 1107]
+[:key_down_raw, 1073741903, 0, 2, 166, 1109]
+[:key_down_raw, 1073741903, 0, 2, 167, 1111]
+[:key_down_raw, 1073741903, 0, 2, 168, 1113]
+[:key_down_raw, 1073741903, 0, 2, 169, 1115]
+[:key_down_raw, 1073741903, 0, 2, 170, 1117]
+[:key_down_raw, 1073741903, 0, 2, 171, 1119]
+[:key_down_raw, 1073741903, 0, 2, 172, 1121]
+[:key_down_raw, 1073741903, 0, 2, 173, 1123]
+[:key_down_raw, 1073741903, 0, 2, 174, 1125]
+[:key_down_raw, 1073741903, 0, 2, 175, 1127]
+[:key_down_raw, 1073741903, 0, 2, 176, 1129]
+[:key_down_raw, 1073741903, 0, 2, 177, 1131]
+[:key_down_raw, 1073741903, 0, 2, 178, 1133]
+[:key_down_raw, 1073741903, 0, 2, 179, 1135]
+[:key_down_raw, 1073741903, 0, 2, 180, 1137]
+[:key_down_raw, 1073741903, 0, 2, 181, 1139]
+[:key_down_raw, 1073741903, 0, 2, 182, 1141]
+[:key_down_raw, 1073741903, 0, 2, 183, 1143]
+[:key_down_raw, 1073741903, 0, 2, 184, 1145]
+[:key_down_raw, 1073741903, 0, 2, 185, 1147]
+[:key_down_raw, 1073741903, 0, 2, 186, 1149]
+[:key_down_raw, 1073741903, 0, 2, 187, 1151]
+[:key_down_raw, 1073741903, 0, 2, 188, 1153]
+[:key_down_raw, 1073741903, 0, 2, 189, 1155]
+[:key_down_raw, 1073741903, 0, 2, 190, 1157]
+[:key_down_raw, 1073741903, 0, 2, 191, 1159]
+[:key_down_raw, 1073741903, 0, 2, 192, 1161]
+[:key_down_raw, 1073741903, 0, 2, 193, 1163]
+[:key_down_raw, 1073741905, 0, 2, 194, 1164]
+[:key_down_raw, 1073741905, 0, 2, 195, 1180]
+[:key_down_raw, 1073741905, 0, 2, 196, 1182]
+[:key_down_raw, 1073741905, 0, 2, 197, 1184]
+[:key_down_raw, 1073741905, 0, 2, 198, 1186]
+[:key_down_raw, 1073741905, 0, 2, 199, 1188]
+[:key_down_raw, 1073741905, 0, 2, 200, 1190]
+[:key_down_raw, 1073741905, 0, 2, 201, 1192]
+[:key_down_raw, 1073741905, 0, 2, 202, 1194]
+[:key_down_raw, 1073741905, 0, 2, 203, 1196]
+[:key_down_raw, 1073741905, 0, 2, 204, 1198]
+[:key_down_raw, 1073741905, 0, 2, 205, 1200]
+[:key_down_raw, 1073741905, 0, 2, 206, 1202]
+[:key_down_raw, 1073741905, 0, 2, 207, 1204]
+[:key_down_raw, 1073741905, 0, 2, 208, 1206]
+[:key_down_raw, 1073741905, 0, 2, 209, 1208]
+[:key_down_raw, 1073741905, 0, 2, 210, 1210]
+[:key_down_raw, 1073741905, 0, 2, 211, 1212]
+[:key_down_raw, 1073741905, 0, 2, 212, 1214]
+[:key_down_raw, 1073741905, 0, 2, 213, 1216]
+[:key_up_raw, 1073741903, 0, 2, 214, 1216]
+[:key_up_raw, 1073741905, 0, 2, 215, 1217]
+[:key_down_raw, 45, 0, 2, 216, 1263]
+[:key_up_raw, 45, 0, 2, 217, 1265]
+[:key_down_raw, 45, 0, 2, 218, 1271]
+[:key_up_raw, 45, 0, 2, 219, 1275]
+[:key_down_raw, 45, 0, 2, 220, 1282]
+[:key_up_raw, 45, 0, 2, 221, 1287]
+[:key_down_raw, 45, 0, 2, 222, 1296]
+[:key_up_raw, 45, 0, 2, 223, 1301]
+[:key_down_raw, 45, 0, 2, 224, 1308]
+[:key_up_raw, 45, 0, 2, 225, 1312]
+[:key_down_raw, 96, 0, 2, 226, 1386]
+[:key_up_raw, 96, 0, 2, 227, 1391]
+[:key_down_raw, 13, 0, 2, 228, 1551]