summaryrefslogtreecommitdiffhomepage
path: root/samples/09_performance/05_sprites_as_classes/app/main.rb
diff options
context:
space:
mode:
Diffstat (limited to 'samples/09_performance/05_sprites_as_classes/app/main.rb')
-rw-r--r--samples/09_performance/05_sprites_as_classes/app/main.rb55
1 files changed, 55 insertions, 0 deletions
diff --git a/samples/09_performance/05_sprites_as_classes/app/main.rb b/samples/09_performance/05_sprites_as_classes/app/main.rb
new file mode 100644
index 0000000..67cde79
--- /dev/null
+++ b/samples/09_performance/05_sprites_as_classes/app/main.rb
@@ -0,0 +1,55 @@
+# Sprites represented as Classes using the queue ~args.outputs.sprites~.
+# gives you full control of property declaration and method invocation.
+# They are more performant than OpenEntities and StrictEntities, but more code upfront.
+class Star
+ attr_sprite
+
+ def initialize grid
+ @grid = grid
+ @x = (rand @grid.w) * -1
+ @y = (rand @grid.h) * -1
+ @w = 4
+ @h = 4
+ @s = 1 + (4.randomize :ratio)
+ @path = 'sprites/tiny-star.png'
+ end
+
+ def move
+ @x += @s
+ @y += @s
+ @x = (rand @grid.w) * -1 if @x > @grid.right
+ @y = (rand @grid.h) * -1 if @y > @grid.top
+ end
+end
+
+# calls methods needed for game to run properly
+def tick args
+ # sets console command when sample app initially opens
+ if Kernel.global_tick_count == 0
+ puts ""
+ puts ""
+ puts "========================================================="
+ puts "* INFO: Sprites, Classes"
+ puts "* INFO: Please specify the number of sprites to render."
+ args.gtk.console.set_command "reset_with count: 100"
+ end
+
+ # init
+ if args.state.tick_count == 0
+ args.state.stars = args.state.star_count.map { |i| Star.new args.grid }
+ end
+
+ # update
+ args.state.stars.each(&:move)
+
+ # render
+ args.outputs.sprites << args.state.stars
+ args.outputs.background_color = [0, 0, 0]
+ args.outputs.primitives << args.gtk.current_framerate_primitives
+end
+
+# resets game, and assigns star count given by user
+def reset_with count: count
+ $gtk.reset
+ $gtk.args.state.star_count = count
+end