Created
February 11, 2022 16:25
-
-
Save amirrajan/4661d2decaa7153d259b253aceb64bfe to your computer and use it in GitHub Desktop.
DragonRuby Game Toolkit Nokia Emulation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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