summaryrefslogtreecommitdiffhomepage
path: root/samples/99_genre_3d
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/99_genre_3d
parent2f845281f133849256b57bb08fd3e9ae57600784 (diff)
parenteaa29e72939f5edf61735ccbb73c36ee89369f65 (diff)
downloaddragonruby-game-toolkit-contrib-5954b9beb4d4a3b4f248d72d1851195f030558a8.tar.gz
dragonruby-game-toolkit-contrib-5954b9beb4d4a3b4f248d72d1851195f030558a8.zip
Merge branch 'DragonRuby:master' into masterHEADmaster
Diffstat (limited to 'samples/99_genre_3d')
-rw-r--r--samples/99_genre_3d/02_wireframe/replay.txt242
-rw-r--r--samples/99_genre_3d/03_yaw_pitch_roll/app/main.rb351
-rw-r--r--samples/99_genre_3d/03_yaw_pitch_roll/replay.txt361
-rw-r--r--samples/99_genre_3d/3d_cube/app/main.rb50
-rw-r--r--samples/99_genre_3d/3d_cube/sprites/square-blue.pngbin283 -> 0 bytes
5 files changed, 954 insertions, 50 deletions
diff --git a/samples/99_genre_3d/02_wireframe/replay.txt b/samples/99_genre_3d/02_wireframe/replay.txt
new file mode 100644
index 0000000..2786904
--- /dev/null
+++ b/samples/99_genre_3d/02_wireframe/replay.txt
@@ -0,0 +1,242 @@
+replay_version 2.0
+stopped_at 706
+seed 100
+recorded_at 2021-11-20 11:26:04 -0600
+[:mouse_button_up, 1, 0, 1, 1, 4]
+[:key_down_raw, 1073741906, 0, 2, 2, 63]
+[:key_down_raw, 1073741906, 0, 2, 3, 77]
+[:key_down_raw, 1073741906, 0, 2, 4, 79]
+[:key_down_raw, 1073741906, 0, 2, 5, 81]
+[:key_down_raw, 1073741906, 0, 2, 6, 84]
+[:key_down_raw, 1073741906, 0, 2, 7, 85]
+[:key_down_raw, 1073741906, 0, 2, 8, 87]
+[:key_down_raw, 1073741906, 0, 2, 9, 90]
+[:key_down_raw, 1073741906, 0, 2, 10, 92]
+[:key_down_raw, 1073741906, 0, 2, 11, 94]
+[:key_down_raw, 1073741906, 0, 2, 12, 96]
+[:key_down_raw, 1073741906, 0, 2, 13, 98]
+[:key_down_raw, 1073741906, 0, 2, 14, 100]
+[:key_down_raw, 1073741906, 0, 2, 15, 102]
+[:key_up_raw, 1073741906, 0, 2, 16, 103]
+[:key_down_raw, 1073741905, 0, 2, 17, 110]
+[:key_down_raw, 1073741905, 0, 2, 18, 125]
+[:key_down_raw, 1073741905, 0, 2, 19, 127]
+[:key_down_raw, 1073741905, 0, 2, 20, 129]
+[:key_down_raw, 1073741905, 0, 2, 21, 131]
+[:key_down_raw, 1073741905, 0, 2, 22, 133]
+[:key_down_raw, 1073741905, 0, 2, 23, 135]
+[:key_down_raw, 1073741905, 0, 2, 24, 137]
+[:key_down_raw, 1073741905, 0, 2, 25, 139]
+[:key_down_raw, 1073741905, 0, 2, 26, 141]
+[:key_down_raw, 1073741905, 0, 2, 27, 143]
+[:key_down_raw, 1073741905, 0, 2, 28, 145]
+[:key_down_raw, 1073741905, 0, 2, 29, 147]
+[:key_down_raw, 1073741905, 0, 2, 30, 149]
+[:key_down_raw, 1073741905, 0, 2, 31, 151]
+[:key_down_raw, 1073741905, 0, 2, 32, 153]
+[:key_down_raw, 1073741905, 0, 2, 33, 155]
+[:key_down_raw, 1073741905, 0, 2, 34, 157]
+[:key_down_raw, 1073741905, 0, 2, 35, 159]
+[:key_down_raw, 1073741905, 0, 2, 36, 161]
+[:key_down_raw, 1073741905, 0, 2, 37, 163]
+[:key_down_raw, 1073741905, 0, 2, 38, 165]
+[:key_down_raw, 1073741905, 0, 2, 39, 167]
+[:key_down_raw, 1073741905, 0, 2, 40, 169]
+[:key_down_raw, 1073741905, 0, 2, 41, 171]
+[:key_up_raw, 1073741905, 0, 2, 42, 171]
+[:key_down_raw, 1073741904, 0, 2, 43, 175]
+[:key_down_raw, 1073741904, 0, 2, 44, 190]
+[:key_down_raw, 1073741904, 0, 2, 45, 192]
+[:key_down_raw, 1073741904, 0, 2, 46, 194]
+[:key_down_raw, 1073741904, 0, 2, 47, 196]
+[:key_down_raw, 1073741904, 0, 2, 48, 198]
+[:key_down_raw, 1073741904, 0, 2, 49, 200]
+[:key_down_raw, 1073741904, 0, 2, 50, 202]
+[:key_down_raw, 1073741904, 0, 2, 51, 204]
+[:key_down_raw, 1073741904, 0, 2, 52, 206]
+[:key_down_raw, 1073741904, 0, 2, 53, 208]
+[:key_down_raw, 1073741904, 0, 2, 54, 210]
+[:key_down_raw, 1073741904, 0, 2, 55, 212]
+[:key_down_raw, 1073741903, 0, 2, 56, 214]
+[:key_down_raw, 1073741903, 0, 2, 57, 229]
+[:key_down_raw, 1073741903, 0, 2, 58, 231]
+[:key_down_raw, 1073741903, 0, 2, 59, 233]
+[:key_down_raw, 1073741906, 0, 2, 60, 234]
+[:key_up_raw, 1073741904, 0, 2, 61, 238]
+[:key_down_raw, 1073741906, 0, 2, 62, 249]
+[:key_down_raw, 1073741906, 0, 2, 63, 251]
+[:key_down_raw, 1073741906, 0, 2, 64, 253]
+[:key_down_raw, 1073741906, 0, 2, 65, 255]
+[:key_down_raw, 1073741906, 0, 2, 66, 257]
+[:key_down_raw, 1073741906, 0, 2, 67, 259]
+[:key_down_raw, 1073741906, 0, 2, 68, 261]
+[:key_down_raw, 1073741906, 0, 2, 69, 263]
+[:key_down_raw, 1073741906, 0, 2, 70, 265]
+[:key_down_raw, 1073741906, 0, 2, 71, 267]
+[:key_down_raw, 1073741906, 0, 2, 72, 269]
+[:key_down_raw, 1073741906, 0, 2, 73, 271]
+[:key_down_raw, 1073741906, 0, 2, 74, 273]
+[:key_down_raw, 1073741906, 0, 2, 75, 275]
+[:key_down_raw, 1073741906, 0, 2, 76, 277]
+[:key_down_raw, 1073741906, 0, 2, 77, 279]
+[:key_down_raw, 1073741906, 0, 2, 78, 281]
+[:key_down_raw, 1073741906, 0, 2, 79, 283]
+[:key_down_raw, 1073741906, 0, 2, 80, 285]
+[:key_down_raw, 1073741906, 0, 2, 81, 287]
+[:key_down_raw, 1073741906, 0, 2, 82, 289]
+[:key_down_raw, 1073741906, 0, 2, 83, 291]
+[:key_down_raw, 1073741906, 0, 2, 84, 293]
+[:key_down_raw, 1073741906, 0, 2, 85, 295]
+[:key_down_raw, 1073741906, 0, 2, 86, 297]
+[:key_down_raw, 1073741906, 0, 2, 87, 299]
+[:key_down_raw, 1073741906, 0, 2, 88, 301]
+[:key_down_raw, 1073741905, 0, 2, 89, 301]
+[:key_up_raw, 1073741906, 0, 2, 90, 310]
+[:key_up_raw, 1073741903, 0, 2, 91, 310]
+[:key_down_raw, 1073741904, 0, 2, 92, 316]
+[:key_down_raw, 1073741904, 0, 2, 93, 331]
+[:key_down_raw, 1073741904, 0, 2, 94, 333]
+[:key_down_raw, 1073741904, 0, 2, 95, 335]
+[:key_down_raw, 1073741904, 0, 2, 96, 337]
+[:key_down_raw, 1073741904, 0, 2, 97, 339]
+[:key_down_raw, 1073741904, 0, 2, 98, 341]
+[:key_down_raw, 1073741904, 0, 2, 99, 343]
+[:key_down_raw, 1073741904, 0, 2, 100, 345]
+[:key_down_raw, 1073741904, 0, 2, 101, 347]
+[:key_down_raw, 1073741904, 0, 2, 102, 349]
+[:key_down_raw, 1073741904, 0, 2, 103, 351]
+[:key_down_raw, 1073741904, 0, 2, 104, 353]
+[:key_down_raw, 1073741904, 0, 2, 105, 355]
+[:key_down_raw, 1073741904, 0, 2, 106, 357]
+[:key_down_raw, 1073741904, 0, 2, 107, 359]
+[:key_down_raw, 1073741904, 0, 2, 108, 361]
+[:key_up_raw, 1073741905, 0, 2, 109, 363]
+[:key_down_raw, 1073741904, 0, 2, 110, 363]
+[:key_down_raw, 1073741904, 0, 2, 111, 365]
+[:key_down_raw, 1073741904, 0, 2, 112, 367]
+[:key_down_raw, 1073741904, 0, 2, 113, 369]
+[:key_down_raw, 1073741904, 0, 2, 114, 371]
+[:key_down_raw, 1073741904, 0, 2, 115, 373]
+[:key_down_raw, 1073741904, 0, 2, 116, 375]
+[:key_down_raw, 1073741904, 0, 2, 117, 377]
+[:key_down_raw, 1073741904, 0, 2, 118, 379]
+[:key_down_raw, 1073741904, 0, 2, 119, 381]
+[:key_down_raw, 1073741904, 0, 2, 120, 383]
+[:key_down_raw, 1073741904, 0, 2, 121, 385]
+[:key_down_raw, 1073741904, 0, 2, 122, 387]
+[:key_down_raw, 1073741904, 0, 2, 123, 389]
+[:key_down_raw, 1073741904, 0, 2, 124, 391]
+[:key_down_raw, 1073741904, 0, 2, 125, 393]
+[:key_down_raw, 1073741904, 0, 2, 126, 395]
+[:key_down_raw, 1073741904, 0, 2, 127, 397]
+[:key_up_raw, 1073741904, 0, 2, 128, 399]
+[:key_down_raw, 1073741903, 0, 2, 129, 400]
+[:key_down_raw, 1073741903, 0, 2, 130, 415]
+[:key_down_raw, 1073741903, 0, 2, 131, 417]
+[:key_down_raw, 1073741903, 0, 2, 132, 419]
+[:key_down_raw, 1073741903, 0, 2, 133, 421]
+[:key_down_raw, 1073741903, 0, 2, 134, 423]
+[:key_down_raw, 1073741903, 0, 2, 135, 425]
+[:key_down_raw, 1073741903, 0, 2, 136, 427]
+[:key_down_raw, 1073741903, 0, 2, 137, 429]
+[:key_down_raw, 1073741903, 0, 2, 138, 431]
+[:key_down_raw, 1073741903, 0, 2, 139, 433]
+[:key_down_raw, 1073741903, 0, 2, 140, 435]
+[:key_down_raw, 1073741903, 0, 2, 141, 437]
+[:key_down_raw, 1073741903, 0, 2, 142, 439]
+[:key_down_raw, 1073741903, 0, 2, 143, 441]
+[:key_down_raw, 1073741903, 0, 2, 144, 443]
+[:key_down_raw, 1073741903, 0, 2, 145, 445]
+[:key_down_raw, 1073741903, 0, 2, 146, 447]
+[:key_down_raw, 1073741903, 0, 2, 147, 449]
+[:key_down_raw, 1073741903, 0, 2, 148, 451]
+[:key_down_raw, 1073741903, 0, 2, 149, 453]
+[:key_down_raw, 1073741903, 0, 2, 150, 455]
+[:key_down_raw, 1073741903, 0, 2, 151, 457]
+[:key_down_raw, 1073741903, 0, 2, 152, 459]
+[:key_down_raw, 1073741903, 0, 2, 153, 461]
+[:key_down_raw, 1073741903, 0, 2, 154, 463]
+[:key_down_raw, 1073741903, 0, 2, 155, 465]
+[:key_down_raw, 1073741903, 0, 2, 156, 467]
+[:key_down_raw, 1073741903, 0, 2, 157, 469]
+[:key_down_raw, 1073741903, 0, 2, 158, 471]
+[:key_down_raw, 1073741903, 0, 2, 159, 473]
+[:key_down_raw, 1073741903, 0, 2, 160, 475]
+[:key_down_raw, 1073741903, 0, 2, 161, 477]
+[:key_down_raw, 1073741903, 0, 2, 162, 479]
+[:key_down_raw, 1073741903, 0, 2, 163, 481]
+[:key_down_raw, 1073741903, 0, 2, 164, 483]
+[:key_down_raw, 1073741903, 0, 2, 165, 485]
+[:key_down_raw, 1073741903, 0, 2, 166, 487]
+[:key_down_raw, 1073741903, 0, 2, 167, 489]
+[:key_down_raw, 1073741903, 0, 2, 168, 491]
+[:key_down_raw, 1073741903, 0, 2, 169, 493]
+[:key_down_raw, 1073741903, 0, 2, 170, 495]
+[:key_down_raw, 1073741903, 0, 2, 171, 497]
+[:key_down_raw, 1073741905, 0, 2, 172, 498]
+[:key_down_raw, 1073741905, 0, 2, 173, 513]
+[:key_down_raw, 1073741905, 0, 2, 174, 515]
+[:key_down_raw, 1073741905, 0, 2, 175, 517]
+[:key_down_raw, 1073741905, 0, 2, 176, 519]
+[:key_down_raw, 1073741905, 0, 2, 177, 521]
+[:key_down_raw, 1073741905, 0, 2, 178, 523]
+[:key_down_raw, 1073741905, 0, 2, 179, 525]
+[:key_down_raw, 1073741905, 0, 2, 180, 527]
+[:key_down_raw, 1073741905, 0, 2, 181, 529]
+[:key_down_raw, 1073741905, 0, 2, 182, 531]
+[:key_down_raw, 1073741905, 0, 2, 183, 533]
+[:key_down_raw, 1073741905, 0, 2, 184, 535]
+[:key_down_raw, 1073741905, 0, 2, 185, 537]
+[:key_down_raw, 1073741905, 0, 2, 186, 539]
+[:key_down_raw, 1073741905, 0, 2, 187, 541]
+[:key_down_raw, 1073741905, 0, 2, 188, 543]
+[:key_up_raw, 1073741905, 0, 2, 189, 543]
+[:key_up_raw, 1073741903, 0, 2, 190, 544]
+[:key_down_raw, 1073741906, 0, 2, 191, 547]
+[:key_down_raw, 1073741906, 0, 2, 192, 562]
+[:key_down_raw, 1073741906, 0, 2, 193, 564]
+[:key_down_raw, 1073741906, 0, 2, 194, 566]
+[:key_down_raw, 1073741906, 0, 2, 195, 568]
+[:key_down_raw, 1073741906, 0, 2, 196, 570]
+[:key_down_raw, 1073741906, 0, 2, 197, 572]
+[:key_down_raw, 1073741906, 0, 2, 198, 574]
+[:key_down_raw, 1073741906, 0, 2, 199, 576]
+[:key_down_raw, 1073741906, 0, 2, 200, 578]
+[:key_down_raw, 1073741906, 0, 2, 201, 580]
+[:key_down_raw, 1073741906, 0, 2, 202, 582]
+[:key_down_raw, 1073741906, 0, 2, 203, 584]
+[:key_down_raw, 1073741906, 0, 2, 204, 586]
+[:key_down_raw, 1073741906, 0, 2, 205, 588]
+[:key_down_raw, 1073741906, 0, 2, 206, 590]
+[:key_down_raw, 1073741906, 0, 2, 207, 592]
+[:key_down_raw, 1073741906, 0, 2, 208, 594]
+[:key_down_raw, 1073741906, 0, 2, 209, 596]
+[:key_down_raw, 1073741906, 0, 2, 210, 598]
+[:key_down_raw, 1073741906, 0, 2, 211, 600]
+[:key_down_raw, 1073741906, 0, 2, 212, 602]
+[:key_down_raw, 1073741906, 0, 2, 213, 604]
+[:key_down_raw, 1073741906, 0, 2, 214, 606]
+[:key_down_raw, 1073741906, 0, 2, 215, 608]
+[:key_down_raw, 1073741906, 0, 2, 216, 610]
+[:key_down_raw, 1073741906, 0, 2, 217, 612]
+[:key_down_raw, 1073741906, 0, 2, 218, 614]
+[:key_down_raw, 1073741906, 0, 2, 219, 616]
+[:key_down_raw, 1073741906, 0, 2, 220, 618]
+[:key_down_raw, 1073741906, 0, 2, 221, 620]
+[:key_down_raw, 1073741906, 0, 2, 222, 622]
+[:key_down_raw, 1073741906, 0, 2, 223, 624]
+[:key_down_raw, 1073741906, 0, 2, 224, 626]
+[:key_down_raw, 1073741906, 0, 2, 225, 628]
+[:key_down_raw, 1073741906, 0, 2, 226, 630]
+[:key_down_raw, 1073741906, 0, 2, 227, 632]
+[:key_down_raw, 1073741906, 0, 2, 228, 634]
+[:key_up_raw, 1073741906, 0, 2, 229, 634]
+[:key_down_raw, 96, 0, 2, 230, 648]
+[:key_up_raw, 96, 0, 2, 231, 652]
+[:mouse_move, 800, 84, 2, 232, 674]
+[:mouse_move, 782, 88, 2, 233, 675]
+[:mouse_move, 764, 94, 2, 234, 676]
+[:mouse_move, 760, 94, 2, 235, 677]
+[:mouse_move, 761, 94, 2, 236, 679]
+[:mouse_move, 762, 93, 2, 237, 680]
+[:key_down_raw, 13, 0, 2, 238, 706]
diff --git a/samples/99_genre_3d/03_yaw_pitch_roll/app/main.rb b/samples/99_genre_3d/03_yaw_pitch_roll/app/main.rb
new file mode 100644
index 0000000..52b5962
--- /dev/null
+++ b/samples/99_genre_3d/03_yaw_pitch_roll/app/main.rb
@@ -0,0 +1,351 @@
+class Game
+ attr_gtk
+
+ def tick
+ defaults
+ render
+ input
+ end
+
+ def matrix_mul m, v
+ (hmap x: ((m.x.x * v.x) + (m.x.y * v.y) + (m.x.z * v.z) + (m.x.w * v.w)),
+ y: ((m.y.x * v.x) + (m.y.y * v.y) + (m.y.z * v.z) + (m.y.w * v.w)),
+ z: ((m.z.x * v.x) + (m.z.y * v.y) + (m.z.z * v.z) + (m.z.w * v.w)),
+ w: ((m.w.x * v.x) + (m.w.y * v.y) + (m.w.z * v.z) + (m.w.w * v.w)))
+ end
+
+ def player_ship
+ [
+ # engine back
+ { x: -1, y: -1, z: 1, w: 0 },
+ { x: -1, y: 1, z: 1, w: 0 },
+
+ { x: -1, y: 1, z: 1, w: 0 },
+ { x: 1, y: 1, z: 1, w: 0 },
+
+ { x: 1, y: 1, z: 1, w: 0 },
+ { x: 1, y: -1, z: 1, w: 0 },
+
+ { x: 1, y: -1, z: 1, w: 0 },
+ { x: -1, y: -1, z: 1, w: 0 },
+
+ # engine front
+ { x: -1, y: -1, z: -1, w: 0 },
+ { x: -1, y: 1, z: -1, w: 0 },
+
+ { x: -1, y: 1, z: -1, w: 0 },
+ { x: 1, y: 1, z: -1, w: 0 },
+
+ { x: 1, y: 1, z: -1, w: 0 },
+ { x: 1, y: -1, z: -1, w: 0 },
+
+ { x: 1, y: -1, z: -1, w: 0 },
+ { x: -1, y: -1, z: -1, w: 0 },
+
+ # engine left
+ { x: -1, z: -1, y: -1, w: 0 },
+ { x: -1, z: -1, y: 1, w: 0 },
+
+ { x: -1, z: -1, y: 1, w: 0 },
+ { x: -1, z: 1, y: 1, w: 0 },
+
+ { x: -1, z: 1, y: 1, w: 0 },
+ { x: -1, z: 1, y: -1, w: 0 },
+
+ { x: -1, z: 1, y: -1, w: 0 },
+ { x: -1, z: -1, y: -1, w: 0 },
+
+ # engine right
+ { x: 1, z: -1, y: -1, w: 0 },
+ { x: 1, z: -1, y: 1, w: 0 },
+
+ { x: 1, z: -1, y: 1, w: 0 },
+ { x: 1, z: 1, y: 1, w: 0 },
+
+ { x: 1, z: 1, y: 1, w: 0 },
+ { x: 1, z: 1, y: -1, w: 0 },
+
+ { x: 1, z: 1, y: -1, w: 0 },
+ { x: 1, z: -1, y: -1, w: 0 },
+
+ # top front of engine to front of ship
+ { x: 1, y: 1, z: 1, w: 0 },
+ { x: 0, y: -1, z: 9, w: 0 },
+
+ { x: 0, y: -1, z: 9, w: 0 },
+ { x: -1, y: 1, z: 1, w: 0 },
+
+ # bottom front of engine
+ { x: 1, y: -1, z: 1, w: 0 },
+ { x: 0, y: -1, z: 9, w: 0 },
+
+ { x: -1, y: -1, z: 1, w: 0 },
+ { x: 0, y: -1, z: 9, w: 0 },
+
+ # right wing
+ # front of wing
+ { x: 1, y: 0.10, z: 1, w: 0 },
+ { x: 9, y: 0.10, z: -1, w: 0 },
+
+ { x: 9, y: 0.10, z: -1, w: 0 },
+ { x: 10, y: 0.10, z: -2, w: 0 },
+
+ # back of wing
+ { x: 1, y: 0.10, z: -1, w: 0 },
+ { x: 9, y: 0.10, z: -1, w: 0 },
+
+ { x: 10, y: 0.10, z: -2, w: 0 },
+ { x: 8, y: 0.10, z: -1, w: 0 },
+
+ # front of wing
+ { x: 1, y: -0.10, z: 1, w: 0 },
+ { x: 9, y: -0.10, z: -1, w: 0 },
+
+ { x: 9, y: -0.10, z: -1, w: 0 },
+ { x: 10, y: -0.10, z: -2, w: 0 },
+
+ # back of wing
+ { x: 1, y: -0.10, z: -1, w: 0 },
+ { x: 9, y: -0.10, z: -1, w: 0 },
+
+ { x: 10, y: -0.10, z: -2, w: 0 },
+ { x: 8, y: -0.10, z: -1, w: 0 },
+
+ # left wing
+ # front of wing
+ { x: -1, y: 0.10, z: 1, w: 0 },
+ { x: -9, y: 0.10, z: -1, w: 0 },
+
+ { x: -9, y: 0.10, z: -1, w: 0 },
+ { x: -10, y: 0.10, z: -2, w: 0 },
+
+ # back of wing
+ { x: -1, y: 0.10, z: -1, w: 0 },
+ { x: -9, y: 0.10, z: -1, w: 0 },
+
+ { x: -10, y: 0.10, z: -2, w: 0 },
+ { x: -8, y: 0.10, z: -1, w: 0 },
+
+ # front of wing
+ { x: -1, y: -0.10, z: 1, w: 0 },
+ { x: -9, y: -0.10, z: -1, w: 0 },
+
+ { x: -9, y: -0.10, z: -1, w: 0 },
+ { x: -10, y: -0.10, z: -2, w: 0 },
+
+ # back of wing
+ { x: -1, y: -0.10, z: -1, w: 0 },
+ { x: -9, y: -0.10, z: -1, w: 0 },
+
+ { x: -10, y: -0.10, z: -2, w: 0 },
+ { x: -8, y: -0.10, z: -1, w: 0 },
+
+ # left fin
+ # top
+ { x: -1, y: 0.10, z: 1, w: 0 },
+ { x: -1, y: 3, z: -3, w: 0 },
+
+ { x: -1, y: 0.10, z: -1, w: 0 },
+ { x: -1, y: 3, z: -3, w: 0 },
+
+ { x: -1.1, y: 0.10, z: 1, w: 0 },
+ { x: -1.1, y: 3, z: -3, w: 0 },
+
+ { x: -1.1, y: 0.10, z: -1, w: 0 },
+ { x: -1.1, y: 3, z: -3, w: 0 },
+
+ # bottom
+ { x: -1, y: -0.10, z: 1, w: 0 },
+ { x: -1, y: -2, z: -2, w: 0 },
+
+ { x: -1, y: -0.10, z: -1, w: 0 },
+ { x: -1, y: -2, z: -2, w: 0 },
+
+ { x: -1.1, y: -0.10, z: 1, w: 0 },
+ { x: -1.1, y: -2, z: -2, w: 0 },
+
+ { x: -1.1, y: -0.10, z: -1, w: 0 },
+ { x: -1.1, y: -2, z: -2, w: 0 },
+
+ # right fin
+ { x: 1, y: 0.10, z: 1, w: 0 },
+ { x: 1, y: 3, z: -3, w: 0 },
+
+ { x: 1, y: 0.10, z: -1, w: 0 },
+ { x: 1, y: 3, z: -3, w: 0 },
+
+ { x: 1.1, y: 0.10, z: 1, w: 0 },
+ { x: 1.1, y: 3, z: -3, w: 0 },
+
+ { x: 1.1, y: 0.10, z: -1, w: 0 },
+ { x: 1.1, y: 3, z: -3, w: 0 },
+
+ # bottom
+ { x: 1, y: -0.10, z: 1, w: 0 },
+ { x: 1, y: -2, z: -2, w: 0 },
+
+ { x: 1, y: -0.10, z: -1, w: 0 },
+ { x: 1, y: -2, z: -2, w: 0 },
+
+ { x: 1.1, y: -0.10, z: 1, w: 0 },
+ { x: 1.1, y: -2, z: -2, w: 0 },
+
+ { x: 1.1, y: -0.10, z: -1, w: 0 },
+ { x: 1.1, y: -2, z: -2, w: 0 },
+ ]
+ end
+
+ def defaults
+ state.points ||= player_ship
+ state.shifted_points ||= state.points.map { |point| point }
+
+ state.scale ||= 1
+ state.angle_x ||= 0
+ state.angle_y ||= 0
+ state.angle_z ||= 0
+ end
+
+ def matrix_new x0, y0, z0, w0, x1, y1, z1, w1, x2, y2, z2, w2, x3, y3, z3, w3
+ (hmap x: (hmap x: x0, y: y0, z: z0, w: w0),
+ y: (hmap x: x1, y: y1, z: z1, w: w1),
+ z: (hmap x: x2, y: y2, z: z2, w: w2),
+ w: (hmap x: x3, y: y3, z: z3, w: w3))
+ end
+
+ def angle_z_matrix degrees
+ cos_t = Math.cos degrees.to_radians
+ sin_t = Math.sin degrees.to_radians
+ (matrix_new cos_t, -sin_t, 0, 0,
+ sin_t, cos_t, 0, 0,
+ 0, 0, 1, 0,
+ 0, 0, 0, 1)
+ end
+
+ def angle_y_matrix degrees
+ cos_t = Math.cos degrees.to_radians
+ sin_t = Math.sin degrees.to_radians
+ (matrix_new cos_t, 0, sin_t, 0,
+ 0, 1, 0, 0,
+ -sin_t, 0, cos_t, 0,
+ 0, 0, 0, 1)
+ end
+
+ def angle_x_matrix degrees
+ cos_t = Math.cos degrees.to_radians
+ sin_t = Math.sin degrees.to_radians
+ (matrix_new 1, 0, 0, 0,
+ 0, cos_t, -sin_t, 0,
+ 0, sin_t, cos_t, 0,
+ 0, 0, 0, 1)
+ end
+
+ def scale_matrix factor
+ (matrix_new factor, 0, 0, 0,
+ 0, factor, 0, 0,
+ 0, 0, factor, 0,
+ 0, 0, 0, 1)
+ end
+
+ def input
+ if (inputs.keyboard.shift && inputs.keyboard.p)
+ state.scale -= 0.1
+ elsif inputs.keyboard.p
+ state.scale += 0.1
+ end
+
+ if inputs.mouse.wheel
+ state.scale += inputs.mouse.wheel.y
+ end
+
+ state.scale = state.scale.clamp(0.1, 1000)
+
+ if (inputs.keyboard.shift && inputs.keyboard.y) || inputs.keyboard.right
+ state.angle_y += 1
+ elsif (inputs.keyboard.y) || inputs.keyboard.left
+ state.angle_y -= 1
+ end
+
+ if (inputs.keyboard.shift && inputs.keyboard.x) || inputs.keyboard.down
+ state.angle_x -= 1
+ elsif (inputs.keyboard.x || inputs.keyboard.up)
+ state.angle_x += 1
+ end
+
+ if inputs.keyboard.shift && inputs.keyboard.z
+ state.angle_z += 1
+ elsif inputs.keyboard.z
+ state.angle_z -= 1
+ end
+
+ if inputs.keyboard.zero
+ state.angle_x = 0
+ state.angle_y = 0
+ state.angle_z = 0
+ end
+
+ angle_x = state.angle_x
+ angle_y = state.angle_y
+ angle_z = state.angle_z
+ scale = state.scale
+
+ s_matrix = scale_matrix state.scale
+ x_matrix = angle_z_matrix angle_z
+ y_matrix = angle_y_matrix angle_y
+ z_matrix = angle_x_matrix angle_x
+
+ state.shifted_points = state.points.map do |point|
+ (matrix_mul s_matrix,
+ (matrix_mul z_matrix,
+ (matrix_mul x_matrix,
+ (matrix_mul y_matrix, point)))).merge(original: point)
+ end
+ end
+
+ def thick_line line
+ [
+ line.merge(y: line.y - 1, y2: line.y2 - 1, r: 0, g: 0, b: 0),
+ line.merge(x: line.x - 1, x2: line.x2 - 1, r: 0, g: 0, b: 0),
+ line.merge(x: line.x - 0, x2: line.x2 - 0, r: 0, g: 0, b: 0),
+ line.merge(y: line.y + 1, y2: line.y2 + 1, r: 0, g: 0, b: 0),
+ line.merge(x: line.x + 1, x2: line.x2 + 1, r: 0, g: 0, b: 0)
+ ]
+ end
+
+ def render
+ outputs.lines << state.shifted_points.each_slice(2).map do |(p1, p2)|
+ perc = 0
+ thick_line({ x: p1.x.*(10) + 640, y: p1.y.*(10) + 320,
+ x2: p2.x.*(10) + 640, y2: p2.y.*(10) + 320,
+ r: 255 * perc,
+ g: 255 * perc,
+ b: 255 * perc })
+ end
+
+ outputs.labels << [ 10, 700, "angle_x: #{state.angle_x.to_sf}", 0]
+ outputs.labels << [ 10, 670, "x, shift+x", 0]
+
+ outputs.labels << [210, 700, "angle_y: #{state.angle_y.to_sf}", 0]
+ outputs.labels << [210, 670, "y, shift+y", 0]
+
+ outputs.labels << [410, 700, "angle_z: #{state.angle_z.to_sf}", 0]
+ outputs.labels << [410, 670, "z, shift+z", 0]
+
+ outputs.labels << [610, 700, "scale: #{state.scale.to_sf}", 0]
+ outputs.labels << [610, 670, "p, shift+p", 0]
+ end
+end
+
+$game = Game.new
+
+def tick args
+ $game.args = args
+ $game.tick
+end
+
+def set_angles x, y, z
+ $game.state.angle_x = x
+ $game.state.angle_y = y
+ $game.state.angle_z = z
+end
+
+$gtk.reset
diff --git a/samples/99_genre_3d/03_yaw_pitch_roll/replay.txt b/samples/99_genre_3d/03_yaw_pitch_roll/replay.txt
new file mode 100644
index 0000000..918fc9e
--- /dev/null
+++ b/samples/99_genre_3d/03_yaw_pitch_roll/replay.txt
@@ -0,0 +1,361 @@
+replay_version 2.0
+stopped_at 493
+seed 100
+recorded_at 2021-10-18 16:32:03 -0500
+[:mouse_button_up, 1, 0, 1, 1, 1]
+[:mouse_move, 813, 82, 2, 2, 9]
+[:mouse_move, 813, 83, 2, 3, 17]
+[:mouse_move, 812, 84, 2, 4, 17]
+[:mouse_move, 809, 86, 2, 5, 17]
+[:mouse_move, 803, 91, 2, 6, 18]
+[:mouse_move, 795, 96, 2, 7, 18]
+[:mouse_move, 792, 98, 2, 8, 19]
+[:mouse_move, 791, 106, 2, 9, 19]
+[:mouse_move, 791, 120, 2, 10, 19]
+[:mouse_move, 791, 138, 2, 11, 20]
+[:mouse_move, 794, 157, 2, 12, 20]
+[:mouse_move, 795, 175, 2, 13, 21]
+[:mouse_move, 795, 193, 2, 14, 21]
+[:mouse_move, 795, 211, 2, 15, 21]
+[:mouse_move, 795, 225, 2, 16, 22]
+[:mouse_move, 795, 233, 2, 17, 22]
+[:mouse_move, 795, 236, 2, 18, 23]
+[:mouse_move, 795, 237, 2, 19, 23]
+[:mouse_move, 795, 238, 2, 20, 24]
+[:mouse_move, 795, 239, 2, 21, 24]
+[:mouse_move, 795, 240, 2, 22, 25]
+[:mouse_move, 794, 241, 2, 23, 26]
+[:mouse_button_pressed, 1, 0, 1, 24, 29]
+[:mouse_button_up, 1, 0, 1, 25, 31]
+[:key_down_raw, 120, 0, 2, 26, 49]
+[:key_down_raw, 120, 0, 2, 27, 55]
+[:key_down_raw, 120, 0, 2, 28, 56]
+[:key_down_raw, 120, 0, 2, 29, 56]
+[:key_down_raw, 120, 0, 2, 30, 57]
+[:key_down_raw, 120, 0, 2, 31, 58]
+[:key_down_raw, 120, 0, 2, 32, 59]
+[:key_down_raw, 120, 0, 2, 33, 60]
+[:key_down_raw, 120, 0, 2, 34, 60]
+[:key_down_raw, 120, 0, 2, 35, 61]
+[:key_down_raw, 120, 0, 2, 36, 62]
+[:key_down_raw, 120, 0, 2, 37, 63]
+[:key_down_raw, 120, 0, 2, 38, 64]
+[:key_down_raw, 120, 0, 2, 39, 65]
+[:key_down_raw, 120, 0, 2, 40, 66]
+[:key_down_raw, 120, 0, 2, 41, 66]
+[:key_down_raw, 120, 0, 2, 42, 67]
+[:key_down_raw, 120, 0, 2, 43, 68]
+[:key_down_raw, 120, 0, 2, 44, 69]
+[:key_down_raw, 120, 0, 2, 45, 70]
+[:key_down_raw, 120, 0, 2, 46, 70]
+[:key_down_raw, 120, 0, 2, 47, 71]
+[:key_down_raw, 120, 0, 2, 48, 72]
+[:key_down_raw, 120, 0, 2, 49, 73]
+[:key_down_raw, 120, 0, 2, 50, 74]
+[:key_down_raw, 120, 0, 2, 51, 75]
+[:key_up_raw, 120, 0, 2, 52, 75]
+[:key_down_raw, 1073742053, 2, 2, 53, 81]
+[:key_down_raw, 120, 2, 2, 54, 83]
+[:key_down_raw, 120, 2, 2, 55, 89]
+[:key_down_raw, 120, 2, 2, 56, 90]
+[:key_down_raw, 120, 2, 2, 57, 91]
+[:key_down_raw, 120, 2, 2, 58, 92]
+[:key_down_raw, 120, 2, 2, 59, 93]
+[:key_down_raw, 120, 2, 2, 60, 93]
+[:key_down_raw, 120, 2, 2, 61, 94]
+[:key_down_raw, 120, 2, 2, 62, 95]
+[:key_down_raw, 120, 2, 2, 63, 96]
+[:key_down_raw, 120, 2, 2, 64, 97]
+[:key_down_raw, 120, 2, 2, 65, 97]
+[:key_down_raw, 120, 2, 2, 66, 98]
+[:key_down_raw, 120, 2, 2, 67, 99]
+[:key_down_raw, 120, 2, 2, 68, 100]
+[:key_down_raw, 120, 2, 2, 69, 101]
+[:key_down_raw, 120, 2, 2, 70, 102]
+[:key_down_raw, 120, 2, 2, 71, 102]
+[:key_down_raw, 120, 2, 2, 72, 103]
+[:key_down_raw, 120, 2, 2, 73, 104]
+[:key_down_raw, 120, 2, 2, 74, 105]
+[:key_down_raw, 120, 2, 2, 75, 106]
+[:key_down_raw, 120, 2, 2, 76, 107]
+[:key_down_raw, 120, 2, 2, 77, 107]
+[:key_down_raw, 120, 2, 2, 78, 108]
+[:key_down_raw, 120, 2, 2, 79, 109]
+[:key_down_raw, 120, 2, 2, 80, 110]
+[:key_down_raw, 120, 2, 2, 81, 111]
+[:key_down_raw, 120, 2, 2, 82, 111]
+[:key_down_raw, 120, 2, 2, 83, 112]
+[:key_down_raw, 120, 2, 2, 84, 113]
+[:key_down_raw, 120, 2, 2, 85, 114]
+[:key_down_raw, 120, 2, 2, 86, 115]
+[:key_down_raw, 120, 2, 2, 87, 116]
+[:key_down_raw, 120, 2, 2, 88, 117]
+[:key_down_raw, 120, 2, 2, 89, 117]
+[:key_down_raw, 120, 2, 2, 90, 118]
+[:key_down_raw, 120, 2, 2, 91, 119]
+[:key_down_raw, 120, 2, 2, 92, 120]
+[:key_down_raw, 120, 2, 2, 93, 121]
+[:key_down_raw, 120, 2, 2, 94, 122]
+[:key_down_raw, 120, 2, 2, 95, 122]
+[:key_down_raw, 120, 2, 2, 96, 123]
+[:key_down_raw, 120, 2, 2, 97, 124]
+[:key_down_raw, 120, 2, 2, 98, 125]
+[:key_down_raw, 120, 2, 2, 99, 126]
+[:key_down_raw, 120, 2, 2, 100, 127]
+[:key_down_raw, 120, 2, 2, 101, 127]
+[:key_down_raw, 120, 2, 2, 102, 128]
+[:key_down_raw, 120, 2, 2, 103, 129]
+[:key_down_raw, 120, 2, 2, 104, 130]
+[:key_down_raw, 120, 2, 2, 105, 131]
+[:key_down_raw, 120, 2, 2, 106, 131]
+[:key_down_raw, 120, 2, 2, 107, 132]
+[:key_down_raw, 120, 2, 2, 108, 133]
+[:key_down_raw, 120, 2, 2, 109, 134]
+[:key_down_raw, 120, 2, 2, 110, 135]
+[:key_down_raw, 120, 2, 2, 111, 136]
+[:key_down_raw, 120, 2, 2, 112, 136]
+[:key_down_raw, 120, 2, 2, 113, 137]
+[:key_down_raw, 120, 2, 2, 114, 138]
+[:key_down_raw, 120, 2, 2, 115, 139]
+[:key_down_raw, 120, 2, 2, 116, 140]
+[:key_down_raw, 120, 2, 2, 117, 140]
+[:key_down_raw, 120, 2, 2, 118, 141]
+[:key_down_raw, 120, 2, 2, 119, 142]
+[:key_down_raw, 120, 2, 2, 120, 143]
+[:key_down_raw, 120, 2, 2, 121, 144]
+[:key_up_raw, 1073742053, 0, 2, 122, 144]
+[:key_down_raw, 120, 0, 2, 123, 145]
+[:key_up_raw, 120, 0, 2, 124, 145]
+[:key_down_raw, 121, 0, 2, 125, 158]
+[:key_down_raw, 121, 0, 2, 126, 165]
+[:key_down_raw, 121, 0, 2, 127, 166]
+[:key_down_raw, 121, 0, 2, 128, 166]
+[:key_down_raw, 121, 0, 2, 129, 167]
+[:key_down_raw, 121, 0, 2, 130, 168]
+[:key_down_raw, 121, 0, 2, 131, 169]
+[:key_down_raw, 121, 0, 2, 132, 170]
+[:key_down_raw, 121, 0, 2, 133, 171]
+[:key_down_raw, 121, 0, 2, 134, 171]
+[:key_down_raw, 121, 0, 2, 135, 172]
+[:key_down_raw, 121, 0, 2, 136, 173]
+[:key_down_raw, 121, 0, 2, 137, 174]
+[:key_down_raw, 121, 0, 2, 138, 175]
+[:key_down_raw, 121, 0, 2, 139, 175]
+[:key_down_raw, 121, 0, 2, 140, 176]
+[:key_down_raw, 121, 0, 2, 141, 177]
+[:key_down_raw, 121, 0, 2, 142, 178]
+[:key_down_raw, 121, 0, 2, 143, 179]
+[:key_down_raw, 121, 0, 2, 144, 180]
+[:key_down_raw, 121, 0, 2, 145, 180]
+[:key_down_raw, 121, 0, 2, 146, 181]
+[:key_down_raw, 121, 0, 2, 147, 182]
+[:key_down_raw, 121, 0, 2, 148, 183]
+[:key_down_raw, 121, 0, 2, 149, 184]
+[:key_down_raw, 121, 0, 2, 150, 185]
+[:key_down_raw, 121, 0, 2, 151, 185]
+[:key_down_raw, 121, 0, 2, 152, 186]
+[:key_down_raw, 121, 0, 2, 153, 187]
+[:key_down_raw, 121, 0, 2, 154, 188]
+[:key_down_raw, 121, 0, 2, 155, 189]
+[:key_down_raw, 121, 0, 2, 156, 190]
+[:key_down_raw, 121, 0, 2, 157, 190]
+[:key_up_raw, 121, 0, 2, 158, 191]
+[:key_down_raw, 1073742053, 2, 2, 159, 198]
+[:key_down_raw, 121, 2, 2, 160, 203]
+[:key_down_raw, 121, 2, 2, 161, 209]
+[:key_down_raw, 121, 2, 2, 162, 210]
+[:key_down_raw, 121, 2, 2, 163, 211]
+[:key_down_raw, 121, 2, 2, 164, 212]
+[:key_down_raw, 121, 2, 2, 165, 213]
+[:key_down_raw, 121, 2, 2, 166, 213]
+[:key_down_raw, 121, 2, 2, 167, 214]
+[:key_down_raw, 121, 2, 2, 168, 215]
+[:key_down_raw, 121, 2, 2, 169, 216]
+[:key_down_raw, 121, 2, 2, 170, 217]
+[:key_down_raw, 121, 2, 2, 171, 217]
+[:key_down_raw, 121, 2, 2, 172, 219]
+[:key_down_raw, 121, 2, 2, 173, 220]
+[:key_down_raw, 121, 2, 2, 174, 220]
+[:key_down_raw, 121, 2, 2, 175, 221]
+[:key_down_raw, 121, 2, 2, 176, 222]
+[:key_down_raw, 121, 2, 2, 177, 223]
+[:key_down_raw, 121, 2, 2, 178, 224]
+[:key_down_raw, 121, 2, 2, 179, 224]
+[:key_down_raw, 121, 2, 2, 180, 225]
+[:key_down_raw, 121, 2, 2, 181, 226]
+[:key_down_raw, 121, 2, 2, 182, 227]
+[:key_down_raw, 121, 2, 2, 183, 228]
+[:key_down_raw, 121, 2, 2, 184, 229]
+[:key_down_raw, 121, 2, 2, 185, 229]
+[:key_down_raw, 121, 2, 2, 186, 230]
+[:key_down_raw, 121, 2, 2, 187, 231]
+[:key_down_raw, 121, 2, 2, 188, 232]
+[:key_down_raw, 121, 2, 2, 189, 233]
+[:key_down_raw, 121, 2, 2, 190, 233]
+[:key_down_raw, 121, 2, 2, 191, 234]
+[:key_down_raw, 121, 2, 2, 192, 235]
+[:key_down_raw, 121, 2, 2, 193, 236]
+[:key_down_raw, 121, 2, 2, 194, 237]
+[:key_down_raw, 121, 2, 2, 195, 238]
+[:key_down_raw, 121, 2, 2, 196, 238]
+[:key_down_raw, 121, 2, 2, 197, 239]
+[:key_down_raw, 121, 2, 2, 198, 240]
+[:key_down_raw, 121, 2, 2, 199, 241]
+[:key_down_raw, 121, 2, 2, 200, 242]
+[:key_down_raw, 121, 2, 2, 201, 242]
+[:key_down_raw, 121, 2, 2, 202, 243]
+[:key_down_raw, 121, 2, 2, 203, 244]
+[:key_down_raw, 121, 2, 2, 204, 245]
+[:key_down_raw, 121, 2, 2, 205, 246]
+[:key_down_raw, 121, 2, 2, 206, 247]
+[:key_down_raw, 121, 2, 2, 207, 247]
+[:key_down_raw, 121, 2, 2, 208, 248]
+[:key_down_raw, 121, 2, 2, 209, 249]
+[:key_down_raw, 121, 2, 2, 210, 250]
+[:key_down_raw, 121, 2, 2, 211, 251]
+[:key_down_raw, 121, 2, 2, 212, 251]
+[:key_down_raw, 121, 2, 2, 213, 252]
+[:key_down_raw, 121, 2, 2, 214, 253]
+[:key_down_raw, 121, 2, 2, 215, 254]
+[:key_down_raw, 121, 2, 2, 216, 255]
+[:key_down_raw, 121, 2, 2, 217, 255]
+[:key_down_raw, 121, 2, 2, 218, 256]
+[:key_down_raw, 121, 2, 2, 219, 257]
+[:key_down_raw, 121, 2, 2, 220, 258]
+[:key_down_raw, 121, 2, 2, 221, 259]
+[:key_down_raw, 121, 2, 2, 222, 260]
+[:key_down_raw, 121, 2, 2, 223, 260]
+[:key_down_raw, 121, 2, 2, 224, 261]
+[:key_down_raw, 121, 2, 2, 225, 262]
+[:key_down_raw, 121, 2, 2, 226, 263]
+[:key_up_raw, 121, 2, 2, 227, 263]
+[:key_up_raw, 1073742053, 0, 2, 228, 266]
+[:key_down_raw, 122, 0, 2, 229, 270]
+[:key_up_raw, 122, 0, 2, 230, 272]
+[:key_down_raw, 122, 0, 2, 231, 289]
+[:key_down_raw, 122, 0, 2, 232, 295]
+[:key_down_raw, 122, 0, 2, 233, 296]
+[:key_down_raw, 122, 0, 2, 234, 297]
+[:key_down_raw, 122, 0, 2, 235, 297]
+[:key_down_raw, 122, 0, 2, 236, 298]
+[:key_down_raw, 122, 0, 2, 237, 299]
+[:key_down_raw, 122, 0, 2, 238, 300]
+[:key_down_raw, 122, 0, 2, 239, 301]
+[:key_down_raw, 122, 0, 2, 240, 302]
+[:key_down_raw, 122, 0, 2, 241, 302]
+[:key_down_raw, 122, 0, 2, 242, 303]
+[:key_down_raw, 122, 0, 2, 243, 304]
+[:key_down_raw, 122, 0, 2, 244, 305]
+[:key_down_raw, 122, 0, 2, 245, 306]
+[:key_down_raw, 122, 0, 2, 246, 306]
+[:key_down_raw, 122, 0, 2, 247, 307]
+[:key_down_raw, 122, 0, 2, 248, 308]
+[:key_down_raw, 122, 0, 2, 249, 309]
+[:key_down_raw, 122, 0, 2, 250, 310]
+[:key_up_raw, 122, 0, 2, 251, 310]
+[:key_down_raw, 1073742053, 2, 2, 252, 319]
+[:key_down_raw, 122, 2, 2, 253, 322]
+[:key_down_raw, 122, 2, 2, 254, 328]
+[:key_down_raw, 122, 2, 2, 255, 329]
+[:key_down_raw, 122, 2, 2, 256, 330]
+[:key_down_raw, 122, 2, 2, 257, 331]
+[:key_down_raw, 122, 2, 2, 258, 332]
+[:key_down_raw, 122, 2, 2, 259, 333]
+[:key_down_raw, 122, 2, 2, 260, 333]
+[:key_down_raw, 122, 2, 2, 261, 334]
+[:key_down_raw, 122, 2, 2, 262, 335]
+[:key_down_raw, 122, 2, 2, 263, 336]
+[:key_down_raw, 122, 2, 2, 264, 337]
+[:key_down_raw, 122, 2, 2, 265, 338]
+[:key_down_raw, 122, 2, 2, 266, 339]
+[:key_down_raw, 122, 2, 2, 267, 340]
+[:key_down_raw, 122, 2, 2, 268, 341]
+[:key_down_raw, 122, 2, 2, 269, 341]
+[:key_down_raw, 122, 2, 2, 270, 342]
+[:key_down_raw, 122, 2, 2, 271, 343]
+[:key_down_raw, 122, 2, 2, 272, 344]
+[:key_down_raw, 122, 2, 2, 273, 345]
+[:key_down_raw, 122, 2, 2, 274, 346]
+[:key_down_raw, 122, 2, 2, 275, 346]
+[:key_down_raw, 122, 2, 2, 276, 347]
+[:key_down_raw, 122, 2, 2, 277, 348]
+[:key_down_raw, 122, 2, 2, 278, 349]
+[:key_down_raw, 122, 2, 2, 279, 350]
+[:key_down_raw, 122, 2, 2, 280, 350]
+[:key_down_raw, 122, 2, 2, 281, 351]
+[:key_down_raw, 122, 2, 2, 282, 352]
+[:key_down_raw, 122, 2, 2, 283, 353]
+[:key_down_raw, 122, 2, 2, 284, 354]
+[:key_down_raw, 122, 2, 2, 285, 355]
+[:key_down_raw, 122, 2, 2, 286, 355]
+[:key_down_raw, 122, 2, 2, 287, 356]
+[:key_down_raw, 122, 2, 2, 288, 357]
+[:key_down_raw, 122, 2, 2, 289, 358]
+[:key_down_raw, 122, 2, 2, 290, 359]
+[:key_down_raw, 122, 2, 2, 291, 360]
+[:key_down_raw, 122, 2, 2, 292, 360]
+[:key_down_raw, 122, 2, 2, 293, 361]
+[:key_down_raw, 122, 2, 2, 294, 362]
+[:key_down_raw, 122, 2, 2, 295, 363]
+[:key_up_raw, 122, 2, 2, 296, 363]
+[:key_up_raw, 1073742053, 0, 2, 297, 366]
+[:key_down_raw, 112, 0, 2, 298, 370]
+[:key_down_raw, 112, 0, 2, 299, 376]
+[:key_down_raw, 112, 0, 2, 300, 377]
+[:key_down_raw, 112, 0, 2, 301, 378]
+[:key_down_raw, 112, 0, 2, 302, 379]
+[:key_down_raw, 112, 0, 2, 303, 380]
+[:key_down_raw, 112, 0, 2, 304, 381]
+[:key_down_raw, 112, 0, 2, 305, 381]
+[:key_down_raw, 112, 0, 2, 306, 382]
+[:key_down_raw, 112, 0, 2, 307, 383]
+[:key_down_raw, 112, 0, 2, 308, 384]
+[:key_down_raw, 112, 0, 2, 309, 385]
+[:key_down_raw, 112, 0, 2, 310, 386]
+[:key_down_raw, 112, 0, 2, 311, 386]
+[:key_down_raw, 112, 0, 2, 312, 387]
+[:key_down_raw, 112, 0, 2, 313, 388]
+[:key_down_raw, 112, 0, 2, 314, 389]
+[:key_down_raw, 112, 0, 2, 315, 390]
+[:key_down_raw, 112, 0, 2, 316, 391]
+[:key_down_raw, 112, 0, 2, 317, 391]
+[:key_down_raw, 112, 0, 2, 318, 392]
+[:key_down_raw, 112, 0, 2, 319, 393]
+[:key_down_raw, 112, 0, 2, 320, 394]
+[:key_down_raw, 112, 0, 2, 321, 395]
+[:key_up_raw, 112, 0, 2, 322, 395]
+[:key_down_raw, 1073742049, 1, 2, 323, 402]
+[:key_down_raw, 112, 1, 2, 324, 402]
+[:key_down_raw, 112, 1, 2, 325, 409]
+[:key_down_raw, 112, 1, 2, 326, 410]
+[:key_down_raw, 112, 1, 2, 327, 410]
+[:key_down_raw, 112, 1, 2, 328, 411]
+[:key_down_raw, 112, 1, 2, 329, 412]
+[:key_down_raw, 112, 1, 2, 330, 413]
+[:key_down_raw, 112, 1, 2, 331, 414]
+[:key_down_raw, 112, 1, 2, 332, 415]
+[:key_down_raw, 112, 1, 2, 333, 415]
+[:key_down_raw, 112, 1, 2, 334, 416]
+[:key_down_raw, 112, 1, 2, 335, 417]
+[:key_down_raw, 112, 1, 2, 336, 418]
+[:key_down_raw, 112, 1, 2, 337, 419]
+[:key_down_raw, 112, 1, 2, 338, 420]
+[:key_down_raw, 112, 1, 2, 339, 420]
+[:key_down_raw, 112, 1, 2, 340, 421]
+[:key_down_raw, 112, 1, 2, 341, 422]
+[:key_down_raw, 112, 1, 2, 342, 423]
+[:key_down_raw, 112, 1, 2, 343, 424]
+[:key_down_raw, 112, 1, 2, 344, 424]
+[:key_down_raw, 112, 1, 2, 345, 425]
+[:key_down_raw, 112, 1, 2, 346, 426]
+[:key_down_raw, 112, 1, 2, 347, 427]
+[:key_down_raw, 112, 1, 2, 348, 428]
+[:key_down_raw, 112, 1, 2, 349, 429]
+[:key_down_raw, 112, 1, 2, 350, 429]
+[:key_down_raw, 112, 1, 2, 351, 430]
+[:key_down_raw, 112, 1, 2, 352, 431]
+[:key_up_raw, 112, 1, 2, 353, 432]
+[:key_up_raw, 1073742049, 0, 2, 354, 433]
+[:key_down_raw, 96, 0, 2, 355, 439]
+[:key_up_raw, 96, 0, 2, 356, 441]
+[:key_down_raw, 13, 0, 2, 357, 493]
diff --git a/samples/99_genre_3d/3d_cube/app/main.rb b/samples/99_genre_3d/3d_cube/app/main.rb
deleted file mode 100644
index fc95291..0000000
--- a/samples/99_genre_3d/3d_cube/app/main.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-STARTX = 0.0
-STARTY = 0.0
-ENDY = 20.0
-ENDX = 20.0
-SPINPOINT = 10
-SPINDURATION = 400
-POINTSIZE = 8
-BOXDEPTH = 40
-YAW = 1
-DISTANCE = 10
-
-def tick args
- args.outputs.background_color = [0, 0, 0]
- a = Math.sin(args.state.tick_count / SPINDURATION) * Math.tan(args.state.tick_count / SPINDURATION)
- s = Math.sin(a)
- c = Math.cos(a)
- x = STARTX
- y = STARTY
- offset_x = (1280 - (ENDX - STARTX)) / 2
- offset_y = (360 - (ENDY - STARTY)) / 2
-
- srand(1)
- while y < ENDY do
- while x < ENDX do
- if (y == STARTY ||
- y == (ENDY / 0.5) * 2 ||
- y == (ENDY / 0.5) * 2 + 0.5 ||
- y == ENDY - 0.5 ||
- x == STARTX ||
- x == ENDX - 0.5)
- z = rand(BOXDEPTH)
- z *= Math.sin(a / 2)
- x -= SPINPOINT
- u = (x * c) - (z * s)
- v = (x * s) + (z * c)
- k = DISTANCE.fdiv(100) + (v / 500 * YAW)
- u = u / k
- v = y / k
- w = POINTSIZE / 10 / k
- args.outputs.sprites << { x: offset_x + u - w, y: offset_y + v - w, w: w, h: w, path: 'sprites/square-blue.png'}
- x += SPINPOINT
- end
- x += 0.5
- end
- y += 0.5
- x = STARTX
- end
-end
-
-$gtk.reset
diff --git a/samples/99_genre_3d/3d_cube/sprites/square-blue.png b/samples/99_genre_3d/3d_cube/sprites/square-blue.png
deleted file mode 100644
index b840849..0000000
--- a/samples/99_genre_3d/3d_cube/sprites/square-blue.png
+++ /dev/null
Binary files differ