Skip to content

Instantly share code, notes, and snippets.

@amirrajan
Created February 11, 2022 16:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amirrajan/4661d2decaa7153d259b253aceb64bfe to your computer and use it in GitHub Desktop.
Save amirrajan/4661d2decaa7153d259b253aceb64bfe to your computer and use it in GitHub Desktop.
DragonRuby Game Toolkit Nokia Emulation
# 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.
NOKIA_WIDTH = 84
NOKIA_HEIGHT = 48
NOKIA_ZOOM = 12
NOKIA_ZOOMED_WIDTH = NOKIA_WIDTH * NOKIA_ZOOM
NOKIA_ZOOMED_HEIGHT = NOKIA_HEIGHT * NOKIA_ZOOM
NOKIA_X_OFFSET = (1280 - NOKIA_ZOOMED_WIDTH).half
NOKIA_Y_OFFSET = ( 720 - NOKIA_ZOOMED_HEIGHT).half
NOKIA_FONT_XL = -1
NOKIA_FONT_XL_HEIGHT = 20
NOKIA_FONT_LG = -3.5
NOKIA_FONT_LG_HEIGHT = 15
NOKIA_FONT_MD = -6
NOKIA_FONT_MD_HEIGHT = 10
NOKIA_FONT_SM = -8.5
NOKIA_FONT_SM_HEIGHT = 5
NOKIA_FONT_PATH = 'fonts/lowrez.ttf'
class NokiaOutputs
attr_accessor :width, :height
def initialize args
@args = args
end
def outputs_nokia
return @args.outputs if @args.state.tick_count <= 0
@args.outputs[:nokia].w = NOKIA_WIDTH
@args.outputs[:nokia].h = NOKIA_HEIGHT
return @args.outputs[:nokia]
end
def solids
outputs_nokia.solids
end
def borders
outputs_nokia.borders
end
def sprites
outputs_nokia.sprites
end
def labels
outputs_nokia.labels
end
def default_label
{
x: 0,
y: 63,
text: "",
size_enum: NOKIA_FONT_SM,
alignment_enum: 0,
r: 0,
g: 0,
b: 0,
a: 255,
font: NOKIA_FONT_PATH
}
end
def lines
outputs_nokia.lines
end
def primitives
outputs_nokia.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 - NOKIA_X_OFFSET).idiv(NOKIA_ZOOM)),
((@args.inputs.mouse.y - NOKIA_Y_OFFSET).idiv(NOKIA_ZOOM))
]
end
def mouse_position
mouse
end
def keyboard
@args.inputs.keyboard
end
end
class GTK::Args
def init_nokia
return if @nokia
@nokia = NokiaOutputs.new self
end
def nokia
@nokia
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_nokia
__original_tick_core__
return if @args.state.tick_count <= 0
@args.render_target(:nokia)
.labels
.each do |l|
l.y += 1
if (l.a || 255) > 128
l.r = 67
l.g = 82
l.b = 61
l.a = 255
else
l.a = 0
end
end
@args.render_target(:nokia)
.sprites
.each do |s|
if (s.a || 255) > 128
s.a = 255
else
s.a = 0
end
end
@args.render_target(:nokia)
.solids
.each do |s|
if (s.a || 255) > 128
s.r = 67
s.g = 82
s.b = 61
s.a = 255
else
s.a = 0
end
end
@args.render_target(:nokia)
.borders
.each do |s|
if (s.a || 255) > 128
s.r = 67
s.g = 82
s.b = 61
s.a = 255
else
s.a = 0
end
end
@args.render_target(:nokia)
.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
if (l.a || 255) > 128
l.r = 67
l.g = 82
l.b = 61
l.a = 255
else
l.a = 0
end
end
@args.outputs.borders << {
x: NOKIA_X_OFFSET - 1,
y: NOKIA_Y_OFFSET - 1,
w: NOKIA_ZOOMED_WIDTH + 2,
h: NOKIA_ZOOMED_HEIGHT + 2,
r: 128, g: 128, b: 128
}
@args.outputs.background_color = [199, 240, 216]
@args.outputs.solids << [0, 0, NOKIA_X_OFFSET, 720]
@args.outputs.solids << [0, 0, 1280, NOKIA_Y_OFFSET]
@args.outputs.solids << [NOKIA_X_OFFSET + NOKIA_ZOOMED_WIDTH, 0, NOKIA_X_OFFSET, 720]
@args.outputs.solids << [0, NOKIA_Y_OFFSET.from_top, 1280, NOKIA_Y_OFFSET]
@args.outputs
.sprites << { x: NOKIA_X_OFFSET,
y: NOKIA_Y_OFFSET,
w: NOKIA_ZOOMED_WIDTH,
h: NOKIA_ZOOMED_HEIGHT,
path: :nokia }
if !@args.state.overlay_rendered
(NOKIA_HEIGHT + 1).map_with_index do |i|
@args.outputs.static_lines << {
x: NOKIA_X_OFFSET,
y: NOKIA_Y_OFFSET + (i * NOKIA_ZOOM),
x2: NOKIA_X_OFFSET + NOKIA_ZOOMED_WIDTH,
y2: NOKIA_Y_OFFSET + (i * NOKIA_ZOOM),
r: 199,
g: 240,
b: 216,
a: 100
}.line!
end
(NOKIA_WIDTH + 1).map_with_index do |i|
@args.outputs.static_lines << {
x: NOKIA_X_OFFSET + (i * NOKIA_ZOOM),
y: NOKIA_Y_OFFSET,
x2: NOKIA_X_OFFSET + (i * NOKIA_ZOOM),
y2: NOKIA_Y_OFFSET + NOKIA_ZOOMED_HEIGHT,
r: 199,
g: 240,
b: 216,
a: 100
}.line!
end
@args.state.overlay_rendered = true
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment