summaryrefslogtreecommitdiffhomepage
path: root/samples/99_genre_lowrez/resolution_64x64/app/lowrez.rb
diff options
context:
space:
mode:
Diffstat (limited to 'samples/99_genre_lowrez/resolution_64x64/app/lowrez.rb')
-rw-r--r--samples/99_genre_lowrez/resolution_64x64/app/lowrez.rb170
1 files changed, 170 insertions, 0 deletions
diff --git a/samples/99_genre_lowrez/resolution_64x64/app/lowrez.rb b/samples/99_genre_lowrez/resolution_64x64/app/lowrez.rb
new file mode 100644
index 0000000..78578e2
--- /dev/null
+++ b/samples/99_genre_lowrez/resolution_64x64/app/lowrez.rb
@@ -0,0 +1,170 @@
+# Emulation of a 64x64 canvas. Don't change this file unless you know what you're doing :-)
+# Head over to main.rb and study the code there.
+
+LOWREZ_SIZE = 64
+LOWREZ_ZOOM = 10
+LOWREZ_ZOOMED_SIZE = LOWREZ_SIZE * LOWREZ_ZOOM
+LOWREZ_X_OFFSET = (1280 - LOWREZ_ZOOMED_SIZE).half
+LOWREZ_Y_OFFSET = ( 720 - LOWREZ_ZOOMED_SIZE).half
+
+LOWREZ_FONT_XL = -1
+LOWREZ_FONT_XL_HEIGHT = 20
+
+LOWREZ_FONT_LG = -3.5
+LOWREZ_FONT_LG_HEIGHT = 15
+
+LOWREZ_FONT_MD = -6
+LOWREZ_FONT_MD_HEIGHT = 10
+
+LOWREZ_FONT_SM = -8.5
+LOWREZ_FONT_SM_HEIGHT = 5
+
+LOWREZ_FONT_PATH = 'fonts/lowrez.ttf'
+
+
+class LowrezOutputs
+ attr_accessor :width, :height
+
+ def initialize args
+ @args = args
+ @background_color ||= [0, 0, 0]
+ @args.outputs.background_color = @background_color
+ end
+
+ def background_color
+ @background_color ||= [0, 0, 0]
+ end
+
+ def background_color= opts
+ @background_color = opts
+ @args.outputs.background_color = @background_color
+
+ outputs_lowrez.solids << [0, 0, LOWREZ_SIZE, LOWREZ_SIZE, @background_color]
+ end
+
+ def outputs_lowrez
+ return @args.outputs if @args.state.tick_count <= 0
+ return @args.outputs[:lowrez]
+ end
+
+ def solids
+ outputs_lowrez.solids
+ end
+
+ def borders
+ outputs_lowrez.borders
+ end
+
+ def sprites
+ outputs_lowrez.sprites
+ end
+
+ def labels
+ outputs_lowrez.labels
+ end
+
+ def default_label
+ {
+ x: 0,
+ y: 63,
+ text: "",
+ size_enum: LOWREZ_FONT_SM,
+ alignment_enum: 0,
+ r: 0,
+ g: 0,
+ b: 0,
+ a: 255,
+ font: LOWREZ_FONT_PATH
+ }
+ end
+
+ def lines
+ outputs_lowrez.lines
+ end
+
+ def primitives
+ outputs_lowrez.primitives
+ end
+
+ def click
+ return nil unless @args.inputs.mouse.click
+ mouse
+ end
+
+ def mouse_click
+ click
+ end
+
+ def mouse_down
+ @args.inputs.mouse.down
+ end
+
+ def mouse_up
+ @args.inputs.mouse.up
+ end
+
+ def mouse
+ [
+ ((@args.inputs.mouse.x - LOWREZ_X_OFFSET).idiv(LOWREZ_ZOOM)),
+ ((@args.inputs.mouse.y - LOWREZ_Y_OFFSET).idiv(LOWREZ_ZOOM))
+ ]
+ end
+
+ def mouse_position
+ mouse
+ end
+
+ def keyboard
+ @args.inputs.keyboard
+ end
+end
+
+class GTK::Args
+ def init_lowrez
+ return if @lowrez
+ @lowrez = LowrezOutputs.new self
+ end
+
+ def lowrez
+ @lowrez
+ end
+end
+
+module GTK
+ class Runtime
+ alias_method :__original_tick_core__, :tick_core unless Runtime.instance_methods.include?(:__original_tick_core__)
+
+ def tick_core
+ @args.init_lowrez
+ __original_tick_core__
+
+ return if @args.state.tick_count <= 0
+
+ @args.render_target(:lowrez)
+ .labels
+ .each do |l|
+ l.y += 1
+ end
+
+ @args.render_target(:lowrez)
+ .lines
+ .each do |l|
+ l.y += 1
+ l.y2 += 1
+ l.y2 += 1 if l.y1 != l.y2
+ l.x2 += 1 if l.x1 != l.x2
+ end
+
+ @args.outputs
+ .sprites << { x: 320,
+ y: 40,
+ w: 640,
+ h: 640,
+ source_x: 0,
+ source_y: 0,
+ source_w: 64,
+ source_h: 64,
+ path: :lowrez }
+ end
+ end
+end