dxopal 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +25 -0
 - data/DEVELOPMENT.md +3 -1
 - data/Gemfile.lock +14 -6
 - data/README.md +2 -2
 - data/Rakefile +12 -11
 - data/TODO.md +2 -2
 - data/build/dxopal.js +35121 -29081
 - data/build/dxopal.min.js +1 -1
 - data/config.ru +6 -5
 - data/doc/api/DXOpal.html +4 -4
 - data/doc/api/DXOpal/Font.html +30 -19
 - data/doc/api/DXOpal/Image.html +417 -242
 - data/doc/api/DXOpal/Input.html +402 -102
 - data/doc/api/DXOpal/Input/MouseCodes.html +3 -3
 - data/doc/api/DXOpal/RemoteResource.html +29 -27
 - data/doc/api/DXOpal/Sound.html +3 -3
 - data/doc/api/DXOpal/SoundEffect.html +14 -10
 - data/doc/api/DXOpal/SoundEffect/WaveTypes.html +3 -3
 - data/doc/api/DXOpal/Sprite.html +3 -3
 - data/doc/api/DXOpal/Window.html +238 -132
 - data/doc/api/_index.html +4 -7
 - data/doc/api/css/style.css +7 -0
 - data/doc/api/file.README.html +6 -36
 - data/doc/api/file_list.html +0 -5
 - data/doc/api/frames.html +1 -1
 - data/doc/api/index.html +6 -36
 - data/doc/api/method_list.html +113 -57
 - data/doc/api/top-level-namespace.html +3 -3
 - data/doc/en/index.html +12 -0
 - data/doc/ja/index.html +9 -0
 - data/dxopal.gemspec +3 -2
 - data/exe/dxopal +4 -2
 - data/index.html +2 -0
 - data/opal/dxopal.rb +42 -0
 - data/opal/dxopal/font.rb +2 -0
 - data/opal/dxopal/image.rb +30 -3
 - data/opal/dxopal/input/key_codes.rb +0 -3
 - data/opal/dxopal/remote_resource.rb +2 -0
 - data/opal/dxopal/sound_effect.rb +3 -0
 - data/opal/dxopal/sprite/collision_check.rb +27 -7
 - data/opal/dxopal/sprite/collision_checker.rb +2 -0
 - data/opal/dxopal/sprite/physics.rb +6 -2
 - data/opal/dxopal/version.rb +1 -1
 - data/opal/dxopal/window.rb +13 -4
 - data/template/index.html +4 -1
 - metadata +20 -6
 
| 
         @@ -6,7 +6,7 @@ 
     | 
|
| 
       6 
6 
     | 
    
         
             
            <title>
         
     | 
| 
       7 
7 
     | 
    
         
             
              Top Level Namespace
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
                — Documentation by YARD 0.9. 
     | 
| 
      
 9 
     | 
    
         
            +
                — Documentation by YARD 0.9.12
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
            </title>
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
         @@ -100,9 +100,9 @@ 
     | 
|
| 
       100 
100 
     | 
    
         
             
            </div>
         
     | 
| 
       101 
101 
     | 
    
         | 
| 
       102 
102 
     | 
    
         
             
                  <div id="footer">
         
     | 
| 
       103 
     | 
    
         
            -
              Generated on  
     | 
| 
      
 103 
     | 
    
         
            +
              Generated on Mon Feb  5 16:56:40 2018 by
         
     | 
| 
       104 
104 
     | 
    
         
             
              <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
         
     | 
| 
       105 
     | 
    
         
            -
              0.9. 
     | 
| 
      
 105 
     | 
    
         
            +
              0.9.12 (ruby-2.4.2).
         
     | 
| 
       106 
106 
     | 
    
         
             
            </div>
         
     | 
| 
       107 
107 
     | 
    
         | 
| 
       108 
108 
     | 
    
         
             
                </div>
         
     | 
    
        data/doc/en/index.html
    CHANGED
    
    | 
         @@ -83,6 +83,18 @@ $ dxopal server</code></pre> 
     | 
|
| 
       83 
83 
     | 
    
         
             
                      </li>
         
     | 
| 
       84 
84 
     | 
    
         
             
                    </ul>
         
     | 
| 
       85 
85 
     | 
    
         | 
| 
      
 86 
     | 
    
         
            +
                    <h2>FAQ</h2>
         
     | 
| 
      
 87 
     | 
    
         
            +
                    <h3>Why is dxopal.js so big?</h3>
         
     | 
| 
      
 88 
     | 
    
         
            +
                    <p>
         
     | 
| 
      
 89 
     | 
    
         
            +
                    Because it contains the whole opal processor, so that you will
         
     | 
| 
      
 90 
     | 
    
         
            +
                    not be bothered by how to compile your game files into JS.
         
     | 
| 
      
 91 
     | 
    
         
            +
                    </p>
         
     | 
| 
      
 92 
     | 
    
         
            +
                    <p>
         
     | 
| 
      
 93 
     | 
    
         
            +
                    Technically you can reduce the file size by commenting out
         
     | 
| 
      
 94 
     | 
    
         
            +
                    <code>require "opal-parser"</code> in opal/dxopal.rb and
         
     | 
| 
      
 95 
     | 
    
         
            +
                    building your own .js (including your game).
         
     | 
| 
      
 96 
     | 
    
         
            +
                    </p>
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
       86 
98 
     | 
    
         
             
                  </section>
         
     | 
| 
       87 
99 
     | 
    
         
             
                  <footer>
         
     | 
| 
       88 
100 
     | 
    
         
             
                    <p><small>Hosted on <a href="https://pages.github.com">GitHub Pages</a> using the <a href='https://github.com/pages-themes/dinky'>Dinky theme</a></small></p>
         
     | 
    
        data/doc/ja/index.html
    CHANGED
    
    | 
         @@ -82,6 +82,15 @@ $ dxopal server</code></pre> 
     | 
|
| 
       82 
82 
     | 
    
         
             
                      </li>
         
     | 
| 
       83 
83 
     | 
    
         
             
                    </ul>
         
     | 
| 
       84 
84 
     | 
    
         | 
| 
      
 85 
     | 
    
         
            +
                    <h2>FAQ</h2>
         
     | 
| 
      
 86 
     | 
    
         
            +
                    <h3>dxopal.jsのサイズがけっこう大きいのはなぜ?</h3>
         
     | 
| 
      
 87 
     | 
    
         
            +
                    <p>
         
     | 
| 
      
 88 
     | 
    
         
            +
                    Opal処理系がまるごと入っているからです。その代わり、作ったゲームをJavaScriptに変換する手順を気にしなくて済むというメリットがあります。
         
     | 
| 
      
 89 
     | 
    
         
            +
                    </p>
         
     | 
| 
      
 90 
     | 
    
         
            +
                    <p>
         
     | 
| 
      
 91 
     | 
    
         
            +
                    技術的には、opal/dxopal.rbの<code>require "opal-parser"</code>をコメントアウトして、作ったゲームと一緒に.jsに変換すればより小さいサイズで済むはずです。
         
     | 
| 
      
 92 
     | 
    
         
            +
                    </p>
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
       85 
94 
     | 
    
         
             
                  </section>
         
     | 
| 
       86 
95 
     | 
    
         
             
                  <footer>
         
     | 
| 
       87 
96 
     | 
    
         
             
                    <p><small>Hosted on <a href="https://pages.github.com">GitHub Pages</a> using the <a href='https://github.com/pages-themes/dinky'>Dinky theme</a></small></p>
         
     | 
    
        data/dxopal.gemspec
    CHANGED
    
    | 
         @@ -20,10 +20,11 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       20 
20 
     | 
    
         
             
              spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
         
     | 
| 
       21 
21 
     | 
    
         
             
              spec.require_paths = ["lib"]
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
              spec.add_runtime_dependency "opal", "~> 0. 
     | 
| 
      
 23 
     | 
    
         
            +
              spec.add_runtime_dependency "opal", "~> 0.11.0"
         
     | 
| 
       24 
24 
     | 
    
         
             
              spec.add_runtime_dependency "thor", "~> 0.19.1"
         
     | 
| 
       25 
25 
     | 
    
         
             
              spec.add_runtime_dependency "rack", "~> 2.0"
         
     | 
| 
       26 
26 
     | 
    
         
             
              spec.add_development_dependency "bundler", "~> 1.14"
         
     | 
| 
       27 
27 
     | 
    
         
             
              spec.add_development_dependency "rake", "~> 10.0"
         
     | 
| 
       28 
     | 
    
         
            -
              spec.add_development_dependency "yard", "~> 0.9. 
     | 
| 
      
 28 
     | 
    
         
            +
              spec.add_development_dependency "yard", "~> 0.9.12"
         
     | 
| 
      
 29 
     | 
    
         
            +
              spec.add_development_dependency "opal-sprockets", "~> 0.4.1"
         
     | 
| 
       29 
30 
     | 
    
         
             
            end
         
     | 
    
        data/exe/dxopal
    CHANGED
    
    | 
         @@ -31,14 +31,16 @@ module DXOpal 
     | 
|
| 
       31 
31 
     | 
    
         
             
                end
         
     | 
| 
       32 
32 
     | 
    
         | 
| 
       33 
33 
     | 
    
         
             
                desc "server", "Start local server"
         
     | 
| 
      
 34 
     | 
    
         
            +
                option "port", aliases: :p, type: :numeric, default: 7521
         
     | 
| 
       34 
35 
     | 
    
         
             
                def server
         
     | 
| 
       35 
36 
     | 
    
         
             
                  puts "Starting DXOpal Server"
         
     | 
| 
       36 
     | 
    
         
            -
                  puts "(Open http://localhost: 
     | 
| 
      
 37 
     | 
    
         
            +
                  puts "(Open http://localhost:#{options[:port]}/index.html in the browser)"
         
     | 
| 
       37 
38 
     | 
    
         
             
                  puts "---"
         
     | 
| 
       38 
39 
     | 
    
         
             
                  app = Rack::Directory.new(Dir.pwd)
         
     | 
| 
       39 
     | 
    
         
            -
                  Rack::Server.start(app: app, Port:  
     | 
| 
      
 40 
     | 
    
         
            +
                  Rack::Server.start(app: app, Port: options[:port])
         
     | 
| 
       40 
41 
     | 
    
         
             
                end
         
     | 
| 
       41 
42 
     | 
    
         
             
              end
         
     | 
| 
       42 
43 
     | 
    
         
             
            end
         
     | 
| 
       43 
44 
     | 
    
         | 
| 
      
 45 
     | 
    
         
            +
            puts "DXOpal v#{DXOpal::VERSION}" 
         
     | 
| 
       44 
46 
     | 
    
         
             
            DXOpal::Cli.start
         
     | 
    
        data/index.html
    CHANGED
    
    | 
         @@ -23,6 +23,7 @@ 
     | 
|
| 
       23 
23 
     | 
    
         
             
                    <canvas id="dxopal-canvas" style='float: left'></canvas>
         
     | 
| 
       24 
24 
     | 
    
         
             
                    <div id="editor" style='width: 350px; height: 300px; position: relative'></div>
         
     | 
| 
       25 
25 
     | 
    
         
             
                    <input type='button' style='float: right' id='run' value='Run'>
         
     | 
| 
      
 26 
     | 
    
         
            +
                    <div id="dxopal-errors"></div>
         
     | 
| 
       26 
27 
     | 
    
         
             
                  </section>
         
     | 
| 
       27 
28 
     | 
    
         
             
                </div>
         
     | 
| 
       28 
29 
     | 
    
         | 
| 
         @@ -42,6 +43,7 @@ 
     | 
|
| 
       42 
43 
     | 
    
         
             
                    editor.setValue(rb, -1); // -1: set cursor to document start
         
     | 
| 
       43 
44 
     | 
    
         
             
                  });
         
     | 
| 
       44 
45 
     | 
    
         
             
                  $('#run').on("click", function() {
         
     | 
| 
      
 46 
     | 
    
         
            +
                    $('#dxopal-errors').empty();
         
     | 
| 
       45 
47 
     | 
    
         
             
                    try {
         
     | 
| 
       46 
48 
     | 
    
         
             
                      eval(Opal.compile(editor.getValue()));
         
     | 
| 
       47 
49 
     | 
    
         
             
                    }
         
     | 
    
        data/opal/dxopal.rb
    CHANGED
    
    | 
         @@ -14,6 +14,8 @@ require 'dxopal/version' 
     | 
|
| 
       14 
14 
     | 
    
         
             
            # Enable runtime compilation of Opal code (so that you can make games
         
     | 
| 
       15 
15 
     | 
    
         
             
            # without even install Ruby)
         
     | 
| 
       16 
16 
     | 
    
         
             
            require 'opal-parser'
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            # Patch to opal-parser
         
     | 
| 
       17 
19 
     | 
    
         
             
            def require_remote(url)
         
     | 
| 
       18 
20 
     | 
    
         
             
              %x{
         
     | 
| 
       19 
21 
     | 
    
         
             
                var r = new XMLHttpRequest();
         
     | 
| 
         @@ -33,6 +35,29 @@ module DXOpal 
     | 
|
| 
       33 
35 
     | 
    
         
             
              include DXOpal::Input::MouseCodes
         
     | 
| 
       34 
36 
     | 
    
         
             
              include DXOpal::SoundEffect::WaveTypes
         
     | 
| 
       35 
37 
     | 
    
         | 
| 
      
 38 
     | 
    
         
            +
              # Call block and dump backtrace if an exception is raised.
         
     | 
| 
      
 39 
     | 
    
         
            +
              # Nothing is shown if a tag with `id='dxopal-errors'` does not exist
         
     | 
| 
      
 40 
     | 
    
         
            +
              def self.dump_error(&block)
         
     | 
| 
      
 41 
     | 
    
         
            +
                block.call
         
     | 
| 
      
 42 
     | 
    
         
            +
              rescue Exception => ex
         
     | 
| 
      
 43 
     | 
    
         
            +
                div = `document.getElementById('dxopal-errors')`
         
     | 
| 
      
 44 
     | 
    
         
            +
                if `div && !ex.DXOpalPrinted`
         
     | 
| 
      
 45 
     | 
    
         
            +
                  %x{
         
     | 
| 
      
 46 
     | 
    
         
            +
                    div.textContent = "ERROR: " + #{ex.class.name};
         
     | 
| 
      
 47 
     | 
    
         
            +
                    var ul = document.createElement('ul');
         
     | 
| 
      
 48 
     | 
    
         
            +
                    // Note: ex.backtrace may be an Array or a String
         
     | 
| 
      
 49 
     | 
    
         
            +
                    #{Array(ex.backtrace)}.forEach(function(line){
         
     | 
| 
      
 50 
     | 
    
         
            +
                      var li = document.createElement('li');
         
     | 
| 
      
 51 
     | 
    
         
            +
                      li.textContent = line;
         
     | 
| 
      
 52 
     | 
    
         
            +
                      ul.appendChild(li);
         
     | 
| 
      
 53 
     | 
    
         
            +
                    });
         
     | 
| 
      
 54 
     | 
    
         
            +
                    div.appendChild(ul);
         
     | 
| 
      
 55 
     | 
    
         
            +
                    ex.DXOpalPrinted = true;
         
     | 
| 
      
 56 
     | 
    
         
            +
                  }
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
                raise ex
         
     | 
| 
      
 59 
     | 
    
         
            +
              end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
       36 
61 
     | 
    
         
             
              # Like `Kernel.p`, but prints only limited times for each `key`
         
     | 
| 
       37 
62 
     | 
    
         
             
              # This is useful for debugging your game without flooding the
         
     | 
| 
       38 
63 
     | 
    
         
             
              # developer console.
         
     | 
| 
         @@ -49,6 +74,23 @@ module DXOpal 
     | 
|
| 
       49 
74 
     | 
    
         
             
              end
         
     | 
| 
       50 
75 
     | 
    
         
             
            end
         
     | 
| 
       51 
76 
     | 
    
         | 
| 
      
 77 
     | 
    
         
            +
            %x{
         
     | 
| 
      
 78 
     | 
    
         
            +
              // Like `console.log`, but prints only limited times.
         
     | 
| 
      
 79 
     | 
    
         
            +
              // Example:
         
     | 
| 
      
 80 
     | 
    
         
            +
              //   Opal.DXOpal.p_("player", player)
         
     | 
| 
      
 81 
     | 
    
         
            +
              (function(){
         
     | 
| 
      
 82 
     | 
    
         
            +
                var P_CT = {};
         
     | 
| 
      
 83 
     | 
    
         
            +
                Opal.DXOpal.p_ = function(key, obj, n) {
         
     | 
| 
      
 84 
     | 
    
         
            +
                  n = (n || 10);
         
     | 
| 
      
 85 
     | 
    
         
            +
                  P_CT[key] = (P_CT[key] || 0);
         
     | 
| 
      
 86 
     | 
    
         
            +
                  if (P_CT[key] < n) {
         
     | 
| 
      
 87 
     | 
    
         
            +
                    console.log(key, obj);
         
     | 
| 
      
 88 
     | 
    
         
            +
                    P_CT[key] += 1;
         
     | 
| 
      
 89 
     | 
    
         
            +
                  }
         
     | 
| 
      
 90 
     | 
    
         
            +
                };
         
     | 
| 
      
 91 
     | 
    
         
            +
              })();
         
     | 
| 
      
 92 
     | 
    
         
            +
            }
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
       52 
94 
     | 
    
         
             
            # `require 'dxopal'` will automatically import names like `Window` to the
         
     | 
| 
       53 
95 
     | 
    
         
             
            # toplevel (as `require 'dxruby'` does)
         
     | 
| 
       54 
96 
     | 
    
         
             
            include DXOpal
         
     | 
    
        data/opal/dxopal/font.rb
    CHANGED
    
    
    
        data/opal/dxopal/image.rb
    CHANGED
    
    | 
         @@ -1,6 +1,8 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'dxopal/remote_resource'
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module DXOpal
         
     | 
| 
      
 4 
     | 
    
         
            +
              # Represents an image
         
     | 
| 
      
 5 
     | 
    
         
            +
              # Each instance of Image has its own off-screen canvas.
         
     | 
| 
       4 
6 
     | 
    
         
             
              class Image < RemoteResource
         
     | 
| 
       5 
7 
     | 
    
         
             
                RemoteResource.add_class(Image)
         
     | 
| 
       6 
8 
     | 
    
         | 
| 
         @@ -53,6 +55,14 @@ module DXOpal 
     | 
|
| 
       53 
55 
     | 
    
         
             
                  return self
         
     | 
| 
       54 
56 
     | 
    
         
             
                end
         
     | 
| 
       55 
57 
     | 
    
         | 
| 
      
 58 
     | 
    
         
            +
                # Draw an Image on this image with scaling
         
     | 
| 
      
 59 
     | 
    
         
            +
                # - scale_x, scale_y: scaling factor (eg. 1.5)
         
     | 
| 
      
 60 
     | 
    
         
            +
                # - center_x, center_y: scaling center (in other words, the point
         
     | 
| 
      
 61 
     | 
    
         
            +
                #   which does not move by this scaling. Default: image center)
         
     | 
| 
      
 62 
     | 
    
         
            +
                def draw_scale(x, y, image, scale_x, scale_y, center_x=nil, center_y=nil)
         
     | 
| 
      
 63 
     | 
    
         
            +
                  draw_ex(x, y, image, scale_x: scale_x, scale_y: scale_y, center_x: center_x, center_y: center_y)
         
     | 
| 
      
 64 
     | 
    
         
            +
                end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
       56 
66 
     | 
    
         
             
                # Draw an Image on this image with rotation
         
     | 
| 
       57 
67 
     | 
    
         
             
                # - angle: Rotation angle (radian)
         
     | 
| 
       58 
68 
     | 
    
         
             
                # - center_x, center_y: Rotation center in the `image` (default: center of the `image`)
         
     | 
| 
         @@ -231,7 +241,7 @@ module DXOpal 
     | 
|
| 
       231 
241 
     | 
    
         
             
                def slice(x, y, width, height)
         
     | 
| 
       232 
242 
     | 
    
         
             
                  newimg = Image.new(width, height)
         
     | 
| 
       233 
243 
     | 
    
         
             
                  data = _image_data(x, y, width, height)
         
     | 
| 
       234 
     | 
    
         
            -
                  newimg._put_image_data(data 
     | 
| 
      
 244 
     | 
    
         
            +
                  newimg._put_image_data(data)
         
     | 
| 
       235 
245 
     | 
    
         
             
                  return newimg
         
     | 
| 
       236 
246 
     | 
    
         
             
                end
         
     | 
| 
       237 
247 
     | 
    
         | 
| 
         @@ -246,10 +256,27 @@ module DXOpal 
     | 
|
| 
       246 
256 
     | 
    
         
             
                  }
         
     | 
| 
       247 
257 
     | 
    
         
             
                end
         
     | 
| 
       248 
258 
     | 
    
         | 
| 
      
 259 
     | 
    
         
            +
                # Set alpha of the pixels of the given color to 0
         
     | 
| 
      
 260 
     | 
    
         
            +
                # - color : RGB color (If ARGV color is given, A is just ignored)
         
     | 
| 
      
 261 
     | 
    
         
            +
                def set_color_key(color)
         
     | 
| 
      
 262 
     | 
    
         
            +
                  r, g, b, _ = _rgba_ary(color)
         
     | 
| 
      
 263 
     | 
    
         
            +
                  data = _image_data()
         
     | 
| 
      
 264 
     | 
    
         
            +
                  %x{
         
     | 
| 
      
 265 
     | 
    
         
            +
                    var buf = data.data;
         
     | 
| 
      
 266 
     | 
    
         
            +
             
     | 
| 
      
 267 
     | 
    
         
            +
                    for(var i = 0; i < buf.length; i += 4){
         
     | 
| 
      
 268 
     | 
    
         
            +
                      if (buf[i] == r && buf[i+1] == g && buf[i+2] == b) {
         
     | 
| 
      
 269 
     | 
    
         
            +
                        buf[i+3] = 0
         
     | 
| 
      
 270 
     | 
    
         
            +
                      }
         
     | 
| 
      
 271 
     | 
    
         
            +
                    }
         
     | 
| 
      
 272 
     | 
    
         
            +
                  }
         
     | 
| 
      
 273 
     | 
    
         
            +
                  _put_image_data(data)
         
     | 
| 
      
 274 
     | 
    
         
            +
                end
         
     | 
| 
      
 275 
     | 
    
         
            +
             
     | 
| 
       249 
276 
     | 
    
         
             
                # Copy an <img> onto this image
         
     | 
| 
       250 
277 
     | 
    
         
             
                def _draw_raw_image(x, y, raw_img)
         
     | 
| 
       251 
278 
     | 
    
         
             
                  %x{
         
     | 
| 
       252 
     | 
    
         
            -
                    #{@ctx}.drawImage(#{raw_img}, x, y)
         
     | 
| 
      
 279 
     | 
    
         
            +
                    #{@ctx}.drawImage(#{raw_img}, x, y);
         
     | 
| 
       253 
280 
     | 
    
         
             
                  }
         
     | 
| 
       254 
281 
     | 
    
         
             
                end
         
     | 
| 
       255 
282 
     | 
    
         | 
| 
         @@ -259,7 +286,7 @@ module DXOpal 
     | 
|
| 
       259 
286 
     | 
    
         
             
                end
         
     | 
| 
       260 
287 
     | 
    
         | 
| 
       261 
288 
     | 
    
         
             
                # Call .putImageData
         
     | 
| 
       262 
     | 
    
         
            -
                def _put_image_data(image_data, x, y)
         
     | 
| 
      
 289 
     | 
    
         
            +
                def _put_image_data(image_data, x=0, y=0)
         
     | 
| 
       263 
290 
     | 
    
         
             
                  `#{@ctx}.putImageData(image_data, x, y)`
         
     | 
| 
       264 
291 
     | 
    
         
             
                end
         
     | 
| 
       265 
292 
     | 
    
         | 
| 
         @@ -2,6 +2,8 @@ module DXOpal 
     | 
|
| 
       2 
2 
     | 
    
         
             
              # A base class for resources acquired through JS Promises.
         
     | 
| 
       3 
3 
     | 
    
         
             
              # Provides `<klass>.register` and `<klass>[name]`.
         
     | 
| 
       4 
4 
     | 
    
         
             
              # A subclass must impelment `<klass>._load`.
         
     | 
| 
      
 5 
     | 
    
         
            +
              #
         
     | 
| 
      
 6 
     | 
    
         
            +
              # TODO: better name? (SoundEffect is not actually 'remote')
         
     | 
| 
       5 
7 
     | 
    
         
             
              class RemoteResource
         
     | 
| 
       6 
8 
     | 
    
         
             
                # List of registered resources (Contains path_or_url)
         
     | 
| 
       7 
9 
     | 
    
         
             
                @@resources = Hash.new{|h,k| h[k] = {}}
         
     | 
    
        data/opal/dxopal/sound_effect.rb
    CHANGED
    
    | 
         @@ -7,6 +7,8 @@ module DXOpal 
     | 
|
| 
       7 
7 
     | 
    
         
             
              #     v = v - 0.03
         
     | 
| 
       8 
8 
     | 
    
         
             
              #     [rand(300), v]
         
     | 
| 
       9 
9 
     | 
    
         
             
              #   end
         
     | 
| 
      
 10 
     | 
    
         
            +
              #
         
     | 
| 
      
 11 
     | 
    
         
            +
              # This will generate a sound with WebAudio.
         
     | 
| 
       10 
12 
     | 
    
         
             
              class SoundEffect < Sound
         
     | 
| 
       11 
13 
     | 
    
         
             
                RemoteResource.add_class(SoundEffect)
         
     | 
| 
       12 
14 
     | 
    
         | 
| 
         @@ -79,6 +81,7 @@ module DXOpal 
     | 
|
| 
       79 
81 
     | 
    
         
             
                end
         
     | 
| 
       80 
82 
     | 
    
         | 
| 
       81 
83 
     | 
    
         
             
                def add(wave_type=WAVE_RECT, resolution=1000)
         
     | 
| 
      
 84 
     | 
    
         
            +
                  TODO
         
     | 
| 
       82 
85 
     | 
    
         
             
                end
         
     | 
| 
       83 
86 
     | 
    
         
             
              end
         
     | 
| 
       84 
87 
     | 
    
         
             
            end
         
     | 
| 
         @@ -5,8 +5,28 @@ module DXOpal 
     | 
|
| 
       5 
5 
     | 
    
         
             
                # Methods of Sprite related to collision checking
         
     | 
| 
       6 
6 
     | 
    
         
             
                module CollisionCheck
         
     | 
| 
       7 
7 
     | 
    
         
             
                  module ClassMethods
         
     | 
| 
       8 
     | 
    
         
            -
                    #  
     | 
| 
      
 8 
     | 
    
         
            +
                    # Run collision checking for set of sprites
         
     | 
| 
      
 9 
     | 
    
         
            +
                    # - offences: Sprite or [Sprite]
         
     | 
| 
      
 10 
     | 
    
         
            +
                    # - defences: Sprite or [Sprite]
         
     | 
| 
      
 11 
     | 
    
         
            +
                    # - shot: method name
         
     | 
| 
      
 12 
     | 
    
         
            +
                    # - hit: method name
         
     | 
| 
      
 13 
     | 
    
         
            +
                    #
         
     | 
| 
      
 14 
     | 
    
         
            +
                    # This method has two modes.
         
     | 
| 
      
 15 
     | 
    
         
            +
                    # - If `offences` and `defences` are the same, collision check will
         
     | 
| 
      
 16 
     | 
    
         
            +
                    #   be performed on each pair from the array. Method `hit` is called
         
     | 
| 
      
 17 
     | 
    
         
            +
                    #   on the each sprite, with the other sprite as an argument.
         
     | 
| 
      
 18 
     | 
    
         
            +
                    # - Otherwise, collision check will be performed on each pair
         
     | 
| 
      
 19 
     | 
    
         
            +
                    #   of offence sprite and defence sprite. In this case,
         
     | 
| 
      
 20 
     | 
    
         
            +
                    #   method `shot` is called on the offence sprite and
         
     | 
| 
      
 21 
     | 
    
         
            +
                    #   method `hit` is called on the defence sprite, with the
         
     | 
| 
      
 22 
     | 
    
         
            +
                    #   other sprite as an argument.
         
     | 
| 
      
 23 
     | 
    
         
            +
                    #
         
     | 
| 
      
 24 
     | 
    
         
            +
                    # TODO: return true if any collition is detected
         
     | 
| 
      
 25 
     | 
    
         
            +
                    # TODO: skip collision checking if shot/hit returned `:discard`
         
     | 
| 
       9 
26 
     | 
    
         
             
                    def check(offences, defences, shot=:shot, hit=:hit)
         
     | 
| 
      
 27 
     | 
    
         
            +
                      offences = Array(offences)
         
     | 
| 
      
 28 
     | 
    
         
            +
                      defences = Array(defences)
         
     | 
| 
      
 29 
     | 
    
         
            +
                      i = j = 0  # trick to use i, j in the `#{}`
         
     | 
| 
       10 
30 
     | 
    
         
             
                      if offences.equal?(defences)
         
     | 
| 
       11 
31 
     | 
    
         
             
                        # any-vs-any mode
         
     | 
| 
       12 
32 
     | 
    
         
             
                        sprites = offences.select{|x| x.is_a?(Sprite)}
         
     | 
| 
         @@ -14,9 +34,9 @@ module DXOpal 
     | 
|
| 
       14 
34 
     | 
    
         
             
                        %x{
         
     | 
| 
       15 
35 
     | 
    
         
             
                          for (var i=0; i<n; i++) {
         
     | 
| 
       16 
36 
     | 
    
         
             
                            for (var j=i+1; j<n; j++) {
         
     | 
| 
       17 
     | 
    
         
            -
                              if (sprites[i] 
     | 
| 
       18 
     | 
    
         
            -
                                sprites[i] 
     | 
| 
       19 
     | 
    
         
            -
                                sprites[j] 
     | 
| 
      
 37 
     | 
    
         
            +
                              if (#{sprites[i] === sprites[j]}) {
         
     | 
| 
      
 38 
     | 
    
         
            +
                                #{sprites[i].__send__(hit)};
         
     | 
| 
      
 39 
     | 
    
         
            +
                                #{sprites[j].__send__(hit)};
         
     | 
| 
       20 
40 
     | 
    
         
             
                              }
         
     | 
| 
       21 
41 
     | 
    
         
             
                            }
         
     | 
| 
       22 
42 
     | 
    
         
             
                          }
         
     | 
| 
         @@ -26,9 +46,9 @@ module DXOpal 
     | 
|
| 
       26 
46 
     | 
    
         
             
                        %x{
         
     | 
| 
       27 
47 
     | 
    
         
             
                          for (var i=0; i<offences.length; i++) {
         
     | 
| 
       28 
48 
     | 
    
         
             
                            for (var j=0; j<defences.length; j++) {
         
     | 
| 
       29 
     | 
    
         
            -
                              if (offences[i] 
     | 
| 
       30 
     | 
    
         
            -
                                offences[i] 
     | 
| 
       31 
     | 
    
         
            -
                                defences[j] 
     | 
| 
      
 49 
     | 
    
         
            +
                              if (#{offences[i] === defences[j]}) {
         
     | 
| 
      
 50 
     | 
    
         
            +
                                #{offences[i].__send__(shot, defences[j])};
         
     | 
| 
      
 51 
     | 
    
         
            +
                                #{defences[j].__send__(hit, offences[i])};
         
     | 
| 
       32 
52 
     | 
    
         
             
                              }
         
     | 
| 
       33 
53 
     | 
    
         
             
                            }
         
     | 
| 
       34 
54 
     | 
    
         
             
                          }
         
     | 
| 
         @@ -1,6 +1,8 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module DXOpal
         
     | 
| 
       2 
2 
     | 
    
         
             
              class Sprite
         
     | 
| 
       3 
     | 
    
         
            -
                #  
     | 
| 
      
 3 
     | 
    
         
            +
                # Experimental Matter.js (physics engine) support
         
     | 
| 
      
 4 
     | 
    
         
            +
                #
         
     | 
| 
      
 5 
     | 
    
         
            +
                # You need to load matter.js in advance to using these features.
         
     | 
| 
       4 
6 
     | 
    
         
             
                module Physics
         
     | 
| 
       5 
7 
     | 
    
         
             
                  # Create Matter Body and register it to the World
         
     | 
| 
       6 
8 
     | 
    
         
             
                  # - type: :rectangle, etc.
         
     | 
| 
         @@ -56,7 +58,9 @@ module DXOpal 
     | 
|
| 
       56 
58 
     | 
    
         | 
| 
       57 
59 
     | 
    
         
             
                # Return true if `physical_body=` is ever called
         
     | 
| 
       58 
60 
     | 
    
         
             
                def self.matter_enabled?
         
     | 
| 
       59 
     | 
    
         
            -
                   
     | 
| 
      
 61 
     | 
    
         
            +
                  # Note: we cannot use `!!` here because @matter_engine may be a JS object,
         
     | 
| 
      
 62 
     | 
    
         
            +
                  # which does not have Ruby's `!@` method
         
     | 
| 
      
 63 
     | 
    
         
            +
                  @matter_engine ? true : false
         
     | 
| 
       60 
64 
     | 
    
         
             
                end
         
     | 
| 
       61 
65 
     | 
    
         | 
| 
       62 
66 
     | 
    
         
             
                # Call Matter.Runner.tick
         
     | 
    
        data/opal/dxopal/version.rb
    CHANGED
    
    
    
        data/opal/dxopal/window.rb
    CHANGED
    
    | 
         @@ -14,7 +14,9 @@ module DXOpal 
     | 
|
| 
       14 
14 
     | 
    
         
             
                # Load resources specified with Image.register or Sound.register
         
     | 
| 
       15 
15 
     | 
    
         
             
                # Call block when loaded
         
     | 
| 
       16 
16 
     | 
    
         
             
                def self.load_resources(&block)
         
     | 
| 
       17 
     | 
    
         
            -
                  RemoteResource._load_resources 
     | 
| 
      
 17 
     | 
    
         
            +
                  RemoteResource._load_resources do
         
     | 
| 
      
 18 
     | 
    
         
            +
                    DXOpal.dump_error(&block)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
       18 
20 
     | 
    
         
             
                end
         
     | 
| 
       19 
21 
     | 
    
         | 
| 
       20 
22 
     | 
    
         
             
                # Start main loop
         
     | 
| 
         @@ -22,8 +24,9 @@ module DXOpal 
     | 
|
| 
       22 
24 
     | 
    
         
             
                # When called twice, previous loop is stopped (this is useful
         
     | 
| 
       23 
25 
     | 
    
         
             
                # when implementing interactive game editor, etc.)
         
     | 
| 
       24 
26 
     | 
    
         
             
                def self.loop(&block)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  already_running = !!@@block
         
     | 
| 
       25 
28 
     | 
    
         
             
                  @@block = block
         
     | 
| 
       26 
     | 
    
         
            -
                   
     | 
| 
      
 29 
     | 
    
         
            +
                  _loop unless already_running
         
     | 
| 
       27 
30 
     | 
    
         
             
                end
         
     | 
| 
       28 
31 
     | 
    
         | 
| 
       29 
32 
     | 
    
         
             
                # (DXOpal original) Pause & resume
         
     | 
| 
         @@ -43,7 +46,7 @@ module DXOpal 
     | 
|
| 
       43 
46 
     | 
    
         
             
                end
         
     | 
| 
       44 
47 
     | 
    
         | 
| 
       45 
48 
     | 
    
         
             
                # (internal) call @@block periodically
         
     | 
| 
       46 
     | 
    
         
            -
                def self._loop(time)
         
     | 
| 
      
 49 
     | 
    
         
            +
                def self._loop(time=0)
         
     | 
| 
       47 
50 
     | 
    
         
             
                  @@img ||= _init(@@width, @@height)
         
     | 
| 
       48 
51 
     | 
    
         
             
                  t0 = Time.now
         
     | 
| 
       49 
52 
     | 
    
         | 
| 
         @@ -67,7 +70,7 @@ module DXOpal 
     | 
|
| 
       67 
70 
     | 
    
         
             
                  if @@paused
         
     | 
| 
       68 
71 
     | 
    
         
             
                    Window.draw_pause_screen
         
     | 
| 
       69 
72 
     | 
    
         
             
                  else
         
     | 
| 
       70 
     | 
    
         
            -
                     
     | 
| 
      
 73 
     | 
    
         
            +
                    DXOpal.dump_error(&@@block)
         
     | 
| 
       71 
74 
     | 
    
         
             
                  end
         
     | 
| 
       72 
75 
     | 
    
         | 
| 
       73 
76 
     | 
    
         
             
                  # Draw
         
     | 
| 
         @@ -77,6 +80,7 @@ module DXOpal 
     | 
|
| 
       77 
80 
     | 
    
         
             
                    case item[2]
         
     | 
| 
       78 
81 
     | 
    
         
             
                    when :image then @@img.draw(*item.drop(3))
         
     | 
| 
       79 
82 
     | 
    
         
             
                    when :image_rot then @@img.draw_rot(*item.drop(3))
         
     | 
| 
      
 83 
     | 
    
         
            +
                    when :image_scale then @@img.draw_scale(*item.drop(3))
         
     | 
| 
       80 
84 
     | 
    
         
             
                    when :draw_ex then @@img.draw_ex(*item.drop(3))
         
     | 
| 
       81 
85 
     | 
    
         
             
                    when :font then @@img.draw_font(*item.drop(3)) 
         
     | 
| 
       82 
86 
     | 
    
         
             
                    when :pixel then @@img.[]=(*item.drop(3))
         
     | 
| 
         @@ -120,6 +124,10 @@ module DXOpal 
     | 
|
| 
       120 
124 
     | 
    
         
             
                  enqueue_draw(z, :image, x, y, image)
         
     | 
| 
       121 
125 
     | 
    
         
             
                end
         
     | 
| 
       122 
126 
     | 
    
         | 
| 
      
 127 
     | 
    
         
            +
                def self.draw_scale(x, y, image, scale_x, scale_y, center_x=nil, center_y=nil, z=0)
         
     | 
| 
      
 128 
     | 
    
         
            +
                  enqueue_draw(z, :image_scale, x, y, image, scale_x, scale_y, center_x, center_y)
         
     | 
| 
      
 129 
     | 
    
         
            +
                end
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
       123 
131 
     | 
    
         
             
                def self.draw_rot(x, y, image, angle, center_x=nil, center_y=nil, z=0)
         
     | 
| 
       124 
132 
     | 
    
         
             
                  enqueue_draw(z, :image_rot, x, y, image, angle, center_x, center_y)
         
     | 
| 
       125 
133 
     | 
    
         
             
                end
         
     | 
| 
         @@ -166,6 +174,7 @@ module DXOpal 
     | 
|
| 
       166 
174 
     | 
    
         
             
                  enqueue_draw(z, :triangle_fill, x1, y1, x2, y2, x3, y3, color)
         
     | 
| 
       167 
175 
     | 
    
         
             
                end
         
     | 
| 
       168 
176 
     | 
    
         | 
| 
      
 177 
     | 
    
         
            +
                # (internal)
         
     | 
| 
       169 
178 
     | 
    
         
             
                def self.enqueue_draw(z, *args)
         
     | 
| 
       170 
179 
     | 
    
         
             
                  @@draw_queue.push([z, @@draw_queue.length, *args])
         
     | 
| 
       171 
180 
     | 
    
         
             
                end
         
     | 
    
        data/template/index.html
    CHANGED
    
    | 
         @@ -4,10 +4,13 @@ 
     | 
|
| 
       4 
4 
     | 
    
         
             
                <meta charset= "utf-8" />
         
     | 
| 
       5 
5 
     | 
    
         
             
                <title>DXOpal game</title>
         
     | 
| 
       6 
6 
     | 
    
         
             
                <script type="text/javascript" src="dxopal.min.js"></script>
         
     | 
| 
       7 
     | 
    
         
            -
                <script type="text/ruby" 
     | 
| 
      
 7 
     | 
    
         
            +
                <script type="text/ruby">
         
     | 
| 
      
 8 
     | 
    
         
            +
                  DXOpal.dump_error{ require_remote 'main.rb' }
         
     | 
| 
      
 9 
     | 
    
         
            +
                </script>
         
     | 
| 
       8 
10 
     | 
    
         
             
              </head>
         
     | 
| 
       9 
11 
     | 
    
         | 
| 
       10 
12 
     | 
    
         
             
              <body>
         
     | 
| 
       11 
13 
     | 
    
         
             
                <canvas id="dxopal-canvas"></canvas>
         
     | 
| 
      
 14 
     | 
    
         
            +
                <div id="dxopal-errors"></div>
         
     | 
| 
       12 
15 
     | 
    
         
             
              </body>
         
     | 
| 
       13 
16 
     | 
    
         
             
            </html>
         
     |