module DXOpal::Window
Public Class Methods
_img()
click to toggle source
Return internal DXOpal::Image
object (for experimental/hacking use)
# File lib/dxopal/window.rb, line 127 def self._img; @@img; end
_init()
click to toggle source
# File lib/dxopal/window.rb, line 116 def self._init canvas = `document.getElementById("dxopal-canvas")` # If user did not change Window.width/Window.height, set the canvas size here self.width = @@width self.height = @@height img = Image.new(self.width, self.height, canvas: canvas) Input._init(canvas) return img end
_loop(timestamp)
click to toggle source
(internal) call @@block periodically
# File lib/dxopal/window.rb, line 52 def self._loop(timestamp) @@img ||= _init # Calculate fps frame_msec = 1000.0 / @@fps @@fps_ts ||= timestamp passed_msec = timestamp - @@fps_ts @@fps_ts = timestamp @@fps_ct += passed_msec if @@fps_ct >= frame_msec @@fps_ct -= frame_msec else `window`.JS.requestAnimationFrame{|time| _loop(time) } return end # Calculate real_fps t = Time.now if t - @@real_fps_t >= 1.0 @@real_fps = @@real_fps_ct @@real_fps_ct = 1 @@real_fps_t = t else @@real_fps_ct += 1 end # Update physics Sprite.matter_tick(timestamp) if Sprite.matter_enabled? # Detect inputs Input._on_tick # Call user code @@draw_queue = [] if @@paused Window.draw_pause_screen else DXOpal.dump_error(&@@block) end # Draw @@img.box_fill(0, 0, @@width, @@height, @@bgcolor) sorted = @@draw_queue.sort{|a, b| a[0] == b[0] ? a[1] <=> b[1] : a[0] <=> b[0] } sorted.each do |item| case item[2] when :image then @@img.draw(*item.drop(3)) when :image_rot then @@img.draw_rot(*item.drop(3)) when :image_scale then @@img.draw_scale(*item.drop(3)) when :draw_ex then @@img.draw_ex(*item.drop(3)) when :font then @@img.draw_font(*item.drop(3)) when :pixel then @@img.[]=(*item.drop(3)) when :line then @@img.line(*item.drop(3)) when :box then @@img.box(*item.drop(3)) when :box_fill then @@img.box_fill(*item.drop(3)) when :circle then @@img.circle(*item.drop(3)) when :circle_fill then @@img.circle_fill(*item.drop(3)) when :triangle then @@img.triangle(*item.drop(3)) when :triangle_fill then @@img.triangle_fill(*item.drop(3)) end end `window`.JS.requestAnimationFrame{|time| _loop(time) } end
bgcolor()
click to toggle source
# File lib/dxopal/window.rb, line 151 def self.bgcolor; @@bgcolor; end
bgcolor=(col)
click to toggle source
# File lib/dxopal/window.rb, line 152 def self.bgcolor=(col); @@bgcolor = col; end
draw(x, y, image, z=0)
click to toggle source
# File lib/dxopal/window.rb, line 154 def self.draw(x, y, image, z=0) enqueue_draw(z, :image, x, y, image) end
draw_box(x1, y1, x2, y2, color, z=0)
click to toggle source
# File lib/dxopal/window.rb, line 184 def self.draw_box(x1, y1, x2, y2, color, z=0) enqueue_draw(z, :box, x1, y1, x2, y2, color) end
draw_box_fill(x1, y1, x2, y2, color, z=0)
click to toggle source
# File lib/dxopal/window.rb, line 188 def self.draw_box_fill(x1, y1, x2, y2, color, z=0) enqueue_draw(z, :box_fill, x1, y1, x2, y2, color) end
draw_circle(x, y, r, color, z=0)
click to toggle source
# File lib/dxopal/window.rb, line 192 def self.draw_circle(x, y, r, color, z=0) enqueue_draw(z, :circle, x, y, r, color) end
draw_circle_fill(x, y, r, color, z=0)
click to toggle source
# File lib/dxopal/window.rb, line 196 def self.draw_circle_fill(x, y, r, color, z=0) enqueue_draw(z, :circle_fill, x, y, r, color) end
draw_ex(x, y, image, options={})
click to toggle source
# File lib/dxopal/window.rb, line 166 def self.draw_ex(x, y, image, options={}) enqueue_draw(options[:z] || 0, :draw_ex, x, y, image, options) end
draw_font(x, y, string, font, option={})
click to toggle source
# File lib/dxopal/window.rb, line 170 def self.draw_font(x, y, string, font, option={}) z = option[:z] || 0 color = option[:color] || [255, 255, 255] enqueue_draw(z, :font, x, y, string, font, color) end
draw_line(x1, y1, x2, y2, color, z=0)
click to toggle source
# File lib/dxopal/window.rb, line 180 def self.draw_line(x1, y1, x2, y2, color, z=0) enqueue_draw(z, :line, x1, y1, x2, y2, color) end
draw_pause_screen()
click to toggle source
# File lib/dxopal/window.rb, line 46 def self.draw_pause_screen Window.draw_box_fill(0, 0, Window.width, Window.height, C_BLACK) Window.draw_font(0, 0, "...PAUSE...", Font.default, color: C_WHITE) end
draw_pixel(x, y, color, z=0)
click to toggle source
# File lib/dxopal/window.rb, line 176 def self.draw_pixel(x, y, color, z=0) enqueue_draw(z, :pixel, x, y, color) end
draw_rot(x, y, image, angle, center_x=nil, center_y=nil, z=0)
click to toggle source
# File lib/dxopal/window.rb, line 162 def self.draw_rot(x, y, image, angle, center_x=nil, center_y=nil, z=0) enqueue_draw(z, :image_rot, x, y, image, angle, center_x, center_y) end
draw_scale(x, y, image, scale_x, scale_y, center_x=nil, center_y=nil, z=0)
click to toggle source
# File lib/dxopal/window.rb, line 158 def self.draw_scale(x, y, image, scale_x, scale_y, center_x=nil, center_y=nil, z=0) enqueue_draw(z, :image_scale, x, y, image, scale_x, scale_y, center_x, center_y) end
draw_triangle(x1, y1, x2, y2, x3, y3, color, z=0)
click to toggle source
# File lib/dxopal/window.rb, line 200 def self.draw_triangle(x1, y1, x2, y2, x3, y3, color, z=0) enqueue_draw(z, :triangle, x1, y1, x2, y2, x3, y3, color) end
draw_triangle_fill(x1, y1, x2, y2, x3, y3, color, z=0)
click to toggle source
# File lib/dxopal/window.rb, line 204 def self.draw_triangle_fill(x1, y1, x2, y2, x3, y3, color, z=0) enqueue_draw(z, :triangle_fill, x1, y1, x2, y2, x3, y3, color) end
enqueue_draw(z, *args)
click to toggle source
(internal)
# File lib/dxopal/window.rb, line 209 def self.enqueue_draw(z, *args) @@draw_queue.push([z, @@draw_queue.length, *args]) end
fps()
click to toggle source
# File lib/dxopal/window.rb, line 129 def self.fps; @@fps; end
fps=(w)
click to toggle source
# File lib/dxopal/window.rb, line 130 def self.fps=(w); @@fps = w; end
height()
click to toggle source
# File lib/dxopal/window.rb, line 141 def self.height; @@height; end
height=(h)
click to toggle source
Set window height and resize the canvas Set `nil` to maximize canvas
# File lib/dxopal/window.rb, line 144 def self.height=(h) canvas = `document.getElementById("dxopal-canvas")` @@height = h || `window.innerHeight` `canvas.height = #{@@height}` `canvas.style.height = #{@@height}` end
load_resources(&block)
click to toggle source
Load resources specified with Image.register or Sound.register
Call block when loaded
# File lib/dxopal/window.rb, line 18 def self.load_resources(&block) RemoteResource._load_resources do DXOpal.dump_error(&block) end end
loop(&block)
click to toggle source
Start main loop
When called twice, previous loop is stopped (this is useful when implementing interactive game editor, etc.)
# File lib/dxopal/window.rb, line 28 def self.loop(&block) already_running = !!@@block @@block = block return if already_running `window`.JS.requestAnimationFrame{|time| _loop(time) } end
pause()
click to toggle source
(DXOpal
original) Pause & resume
# File lib/dxopal/window.rb, line 36 def self.pause @@paused = true @@draw_queue.clear draw_pause_screen end
paused?()
click to toggle source
# File lib/dxopal/window.rb, line 41 def self.paused?; @@paused; end
real_fps()
click to toggle source
# File lib/dxopal/window.rb, line 131 def self.real_fps; @@real_fps; end
resume()
click to toggle source
# File lib/dxopal/window.rb, line 42 def self.resume raise "Window.resume is called before Window.loop" if @@block.nil? @@paused = false; Window.loop(&@@block) end
width()
click to toggle source
# File lib/dxopal/window.rb, line 132 def self.width; @@width; end
width=(w)
click to toggle source
Set window width and resize the canvas Set `nil` to maximize canvas
# File lib/dxopal/window.rb, line 135 def self.width=(w) canvas = `document.getElementById("dxopal-canvas")` @@width = w || `window.innerWidth` `canvas.width = #{@@width}` `canvas.style.width = #{@@width}` end