Module: DXOpal::Window
- Defined in:
- opal/dxopal/window.rb
Constant Summary
- @@fps =
60
- @@real_fps =
0
- @@real_fps_ct =
1
- @@real_fps_t =
Time.now
- @@width =
640
- @@height =
480
- @@block =
nil
- @@paused =
false
- @@bgcolor =
Constants::Colors::C_BLACK
Class Method Summary collapse
-
._img ⇒ Object
Return internal DXOpal::Image object (for experimental/hacking use).
- ._init(w, h) ⇒ Object
- ._loop(time, &block) ⇒ Object
- .bgcolor ⇒ Object
- .bgcolor=(col) ⇒ Object
- .draw(x, y, image, z = 0) ⇒ Object
- .draw_box(x1, y1, x2, y2, color, z = 0) ⇒ Object
- .draw_box_fill(x1, y1, x2, y2, color, z = 0) ⇒ Object
- .draw_circle(x, y, r, color, z = 0) ⇒ Object
- .draw_circle_fill(x, y, r, color, z = 0) ⇒ Object
- .draw_ex(x, y, image, options = {}) ⇒ Object
- .draw_font(x, y, string, font, option = {}) ⇒ Object
- .draw_line(x1, y1, x2, y2, color, z = 0) ⇒ Object
- .draw_pause_screen ⇒ Object
- .draw_pixel(x, y, color, z = 0) ⇒ Object
- .draw_rot(x, y, image, angle, center_x = nil, center_y = nil, z = 0) ⇒ Object
- .draw_triangle(x1, y1, x2, y2, x3, y3, color, z = 0) ⇒ Object
- .draw_triangle_fill(x1, y1, x2, y2, x3, y3, color, z = 0) ⇒ Object
- .enqueue_draw(z, *args) ⇒ Object
- .fps ⇒ Object
- .fps=(w) ⇒ Object
- .height ⇒ Object
- .height=(h) ⇒ Object
-
.load_resources(&block) ⇒ Object
Load resources specified with Image.register or Sound.register Call block when loaded.
- .loop(&block) ⇒ Object
-
.pause ⇒ Object
(DXOpal original) Pause & resume.
- .paused? ⇒ Boolean
- .real_fps ⇒ Object
- .resume ⇒ Object
- .width ⇒ Object
- .width=(w) ⇒ Object
Class Method Details
._img ⇒ Object
Return internal DXOpal::Image object (for experimental/hacking use)
99 |
# File 'opal/dxopal/window.rb', line 99 def self._img; @@img; end |
._init(w, h) ⇒ Object
91 92 93 94 95 96 |
# File 'opal/dxopal/window.rb', line 91 def self._init(w, h) canvas = `document.getElementById("canvas")` img = Image.new(w, h, canvas: canvas) Input._init(canvas) return img end |
._loop(time, &block) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'opal/dxopal/window.rb', line 41 def self._loop(time, &block) @@img ||= _init(@@width, @@height) t0 = Time.now # Calculate fps if t0 - @@real_fps_t >= 1.0 @@real_fps = @@real_fps_ct @@real_fps_ct = 1 @@real_fps_t = t0 else @@real_fps_ct += 1 end # Update physics Sprite.matter_tick(time) if Sprite.matter_enabled? # Detect inputs Input._on_tick # Call user code @@draw_queue = [] if @@paused Window.draw_pause_screen else block.call 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] <=> a[1] } 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 :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, &block) } end |
.bgcolor ⇒ Object
109 |
# File 'opal/dxopal/window.rb', line 109 def self.bgcolor; @@bgcolor; end |
.bgcolor=(col) ⇒ Object
110 |
# File 'opal/dxopal/window.rb', line 110 def self.bgcolor=(col); @@bgcolor = col; end |
.draw(x, y, image, z = 0) ⇒ Object
112 113 114 |
# File 'opal/dxopal/window.rb', line 112 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) ⇒ Object
138 139 140 |
# File 'opal/dxopal/window.rb', line 138 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) ⇒ Object
142 143 144 |
# File 'opal/dxopal/window.rb', line 142 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) ⇒ Object
146 147 148 |
# File 'opal/dxopal/window.rb', line 146 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) ⇒ Object
150 151 152 |
# File 'opal/dxopal/window.rb', line 150 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 = {}) ⇒ Object
120 121 122 |
# File 'opal/dxopal/window.rb', line 120 def self.draw_ex(x, y, image, ={}) enqueue_draw([:z] || 0, :draw_ex, x, y, image, ) end |
.draw_font(x, y, string, font, option = {}) ⇒ Object
124 125 126 127 128 |
# File 'opal/dxopal/window.rb', line 124 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) ⇒ Object
134 135 136 |
# File 'opal/dxopal/window.rb', line 134 def self.draw_line(x1, y1, x2, y2, color, z=0) enqueue_draw(z, :line, x1, y1, x2, y2, color) end |
.draw_pause_screen ⇒ Object
36 37 38 39 |
# File 'opal/dxopal/window.rb', line 36 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) ⇒ Object
130 131 132 |
# File 'opal/dxopal/window.rb', line 130 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) ⇒ Object
116 117 118 |
# File 'opal/dxopal/window.rb', line 116 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_triangle(x1, y1, x2, y2, x3, y3, color, z = 0) ⇒ Object
154 155 156 |
# File 'opal/dxopal/window.rb', line 154 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) ⇒ Object
158 159 160 |
# File 'opal/dxopal/window.rb', line 158 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) ⇒ Object
162 163 164 |
# File 'opal/dxopal/window.rb', line 162 def self.enqueue_draw(z, *args) @@draw_queue.push([z, @@draw_queue.length, *args]) end |
.fps ⇒ Object
101 |
# File 'opal/dxopal/window.rb', line 101 def self.fps; @@fps; end |
.fps=(w) ⇒ Object
102 |
# File 'opal/dxopal/window.rb', line 102 def self.fps=(w); @@fps = w; end |
.height ⇒ Object
106 |
# File 'opal/dxopal/window.rb', line 106 def self.height; @@height; end |
.height=(h) ⇒ Object
107 |
# File 'opal/dxopal/window.rb', line 107 def self.height=(h); @@height = h; end |
.load_resources(&block) ⇒ Object
Load resources specified with Image.register or Sound.register Call block when loaded
16 17 18 |
# File 'opal/dxopal/window.rb', line 16 def self.load_resources(&block) RemoteResource._load_resources(&block) end |
.loop(&block) ⇒ Object
20 21 22 23 |
# File 'opal/dxopal/window.rb', line 20 def self.loop(&block) @@block = block `window`.JS.requestAnimationFrame{|time| _loop(time, &block) } end |
.pause ⇒ Object
(DXOpal original) Pause & resume
26 27 28 29 30 |
# File 'opal/dxopal/window.rb', line 26 def self.pause @@paused = true @@draw_queue.clear draw_pause_screen end |
.paused? ⇒ Boolean
31 |
# File 'opal/dxopal/window.rb', line 31 def self.paused?; @@paused; end |
.real_fps ⇒ Object
103 |
# File 'opal/dxopal/window.rb', line 103 def self.real_fps; @@real_fps; end |
.resume ⇒ Object
32 33 34 35 |
# File 'opal/dxopal/window.rb', line 32 def self.resume raise "Window.resume is called before Window.loop" if @@block.nil? @@paused = false; Window.loop(&@@block) end |
.width ⇒ Object
104 |
# File 'opal/dxopal/window.rb', line 104 def self.width; @@width; end |
.width=(w) ⇒ Object
105 |
# File 'opal/dxopal/window.rb', line 105 def self.width=(w); @@width = w; end |