pbox2d 0.0.1-java
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 +7 -0
- data/LICENSE.md +36 -0
- data/README.md +34 -0
- data/Rakefile +101 -0
- data/example/lib/particle_system.rb +152 -0
- data/example/liquidy.rb +40 -0
- data/lib/box2d.rb +15 -0
- data/lib/box2d/version.rb +3 -0
- data/lib/jbox2d-library-2.2.1-ds.jar +0 -0
- data/lib/pbox2d.jar +0 -0
- metadata +101 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d58b2de1118d6e9cb55590c19e0cd0dd3d699e18
|
4
|
+
data.tar.gz: 1f2b801732b33388098101e973565821dd778661
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8c323a434d3df3e99e9ab3cdfef46d528bad0cda056b31760852ae12d27f7a245e39e86be592f47c13c5639ea5a7c78efa8326b4dc8bf97d9ca2667f134a2779
|
7
|
+
data.tar.gz: 52c187591b38c671d9f13f0253dfe1bb53218340685621ae82976ba2b8a3c727b758219dd7da259b3eb7a46612e2250cb8b73a710d07765a69776ef9e23934ff
|
data/LICENSE.md
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
### License
|
2
|
+
|
3
|
+
This work makes use of jbox2d see included LICENCE, and is derived from,
|
4
|
+
but different significantly different from Dan Shiffmans PBox2D-for-processing
|
5
|
+
who claims this:-
|
6
|
+
|
7
|
+
Copyright (c) 2014, Daniel Shiffman
|
8
|
+
All rights reserved.
|
9
|
+
Redistribution and use in source and binary forms, with or without modification,
|
10
|
+
are permitted provided that the following conditions are met:
|
11
|
+
* Redistributions of source code must retain the above copyright notice, this
|
12
|
+
list of conditions and the following disclaimer.
|
13
|
+
* Redistributions in binary form must reproduce the above copyright notice, this
|
14
|
+
list of conditions and the following disclaimer in the documentation and/or
|
15
|
+
other materials provided with the distribution.
|
16
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
17
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
19
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
20
|
+
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
21
|
+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
22
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
23
|
+
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
24
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
25
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
26
|
+
|
27
|
+
I include the Shiffman licence mainly because of the included example
|
28
|
+
(albeit in processing) is his idea. It would be better if everyone stuck to
|
29
|
+
recognized licences.....
|
30
|
+
|
31
|
+
For my part I lean toward GPL3 but MIT is OK and matches ruby-processing and
|
32
|
+
vanilla processing.
|
33
|
+
|
34
|
+
Copyright (c) 2014, Martin Prout
|
35
|
+
|
36
|
+
|
data/README.md
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
### Using JBox2D in ruby-processing
|
2
|
+
|
3
|
+
Here we demonstrate how to use JBox2D library as a rubygem. This approach could be an exemplar of how to use other processing/java libraries with ruby-processing
|
4
|
+
|
5
|
+
### Web Links
|
6
|
+
|
7
|
+
[JBox2D Home][]
|
8
|
+
|
9
|
+
[JBox2D on github][]
|
10
|
+
|
11
|
+
[Box2D for processing on github][]
|
12
|
+
|
13
|
+
### Licensing
|
14
|
+
|
15
|
+
Daniel Murphy is currently claiming ownership of jbox2d (although surely a derived work):-
|
16
|
+
|
17
|
+
Copyright (c) 2014 Daniel Murphy
|
18
|
+
|
19
|
+
Dan Shiffman wrote the original PBox2D for processing (on which this implementation is based)
|
20
|
+
|
21
|
+
Copyright (c) 2014 Daniel Shiffman
|
22
|
+
|
23
|
+
This gem was created by Martin Prout
|
24
|
+
|
25
|
+
Copyright (c) 2014 Martin Prout
|
26
|
+
|
27
|
+
### To compile
|
28
|
+
|
29
|
+
To compile the gem follow the instructions for [JRubyArt][]
|
30
|
+
|
31
|
+
[JBox2D Home]:http://www.jbox2d.org/
|
32
|
+
[JBox2D on github]:https://github.com/jbox2d/jbox2d
|
33
|
+
[Box2D for processing on github]:https://github.com/shiffman/Box2D-for-Processing
|
34
|
+
[JRubyArt]:https://github.com/ruby-processing/JRubyArt
|
data/Rakefile
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/clean'
|
4
|
+
require 'rubygems/package_task'
|
5
|
+
require 'rdoc/task'
|
6
|
+
require 'rake/testtask'
|
7
|
+
require 'rspec/core/rake_task'
|
8
|
+
require_relative 'lib/box2d/version'
|
9
|
+
|
10
|
+
spec = Gem::Specification.new do |s|
|
11
|
+
s.name = 'pbox2d'
|
12
|
+
s.version = Pbox2D::VERSION
|
13
|
+
s.has_rdoc = true
|
14
|
+
s.extra_rdoc_files = ['README.md', 'LICENSE.md']
|
15
|
+
s.summary = 'jbox2d wrapped in a gem for ruby-processing'
|
16
|
+
s.description = <<-EOF
|
17
|
+
"An exemplar for how processing/java libraries can be made available
|
18
|
+
for use in ruby-processing. In this example avoiding an overdose of java
|
19
|
+
reflection by letting jruby sugar implement an interface"
|
20
|
+
EOF
|
21
|
+
s.license = 'MIT'
|
22
|
+
s.authors = ['Martin Prout']
|
23
|
+
s.email = 'martin_p@lineone.net'
|
24
|
+
s.homepage = 'https://github.com/ruby-processing/jbox2d'
|
25
|
+
s.files = %w(LICENSE.md README.md Rakefile) + FileList['lib/**/*.rb', 'example/**/*.rb']
|
26
|
+
s.files << 'lib/pbox2d.jar'
|
27
|
+
s.files << 'lib/jbox2d-library-2.2.1-ds.jar'
|
28
|
+
s.require_path = 'lib'
|
29
|
+
s.add_dependency "ruby-processing", "~> 2.6.4"
|
30
|
+
s.add_development_dependency "rake", "~> 10.3"
|
31
|
+
s.add_development_dependency "rake-compiler", "~> 0.9"
|
32
|
+
s.platform='java'
|
33
|
+
s.requirements << 'A decent graphics card'
|
34
|
+
s.requirements << 'java runtime >= 1.7+'
|
35
|
+
s.requirements << 'processing = 2.2.1+'
|
36
|
+
end
|
37
|
+
|
38
|
+
# -*- ruby -*-
|
39
|
+
|
40
|
+
require 'java'
|
41
|
+
require 'rake/javaextensiontask'
|
42
|
+
|
43
|
+
# -*- encoding: utf-8 -*-
|
44
|
+
require 'psych'
|
45
|
+
|
46
|
+
def copy_jars(name, dest)
|
47
|
+
conf = '~/.jruby_art/config.yml'
|
48
|
+
begin
|
49
|
+
path = File.expand_path(conf)
|
50
|
+
rp_config = (Psych.load_file(path))
|
51
|
+
source= "#{rp_config["PROCESSING_ROOT"]}/core/library/"
|
52
|
+
rescue
|
53
|
+
raise "WARNING: you must set PROCESSING_ROOT in #{conf} compile"
|
54
|
+
end
|
55
|
+
body = proc {
|
56
|
+
Dir["#{source}/core.jar"].each do |f|
|
57
|
+
puts "Copying #{f} To #{dest}"
|
58
|
+
FileUtils.cp f, dest
|
59
|
+
end
|
60
|
+
}
|
61
|
+
Rake::Task.define_task(name, &body)
|
62
|
+
end
|
63
|
+
|
64
|
+
copy_jars(:processing_jars, 'lib')
|
65
|
+
|
66
|
+
Rake::JavaExtensionTask.new('processing') do |ext|
|
67
|
+
jars = FileList['lib/*.jar']
|
68
|
+
ext.classpath = jars.map { |x| File.expand_path x}.join ':'
|
69
|
+
ext.name = 'pbox2d'
|
70
|
+
ext.debug = true
|
71
|
+
ext.lib_dir = 'lib'
|
72
|
+
ext.source_version='1.7'
|
73
|
+
ext.target_version='1.7'
|
74
|
+
end
|
75
|
+
|
76
|
+
Gem::PackageTask.new(spec) do |p|
|
77
|
+
p.gem_spec = spec
|
78
|
+
p.need_tar = true
|
79
|
+
p.need_zip = true
|
80
|
+
end
|
81
|
+
|
82
|
+
Rake::RDocTask.new do |rdoc|
|
83
|
+
files = ['README.md', 'LICENSE.md'] + FileList['lib/**/*.rb']
|
84
|
+
|
85
|
+
rdoc.rdoc_files.add(files)
|
86
|
+
rdoc.main = "README.md" # page to start on
|
87
|
+
rdoc.title = "Box2D Docs"
|
88
|
+
rdoc.rdoc_dir = 'doc/rdoc' # rdoc output folder
|
89
|
+
rdoc.options << '--line-numbers'
|
90
|
+
end
|
91
|
+
|
92
|
+
Rake::TestTask.new do |t|
|
93
|
+
t.test_files = FileList['test/**/*.rb']
|
94
|
+
end
|
95
|
+
|
96
|
+
RSpec::Core::RakeTask.new do |spec|
|
97
|
+
spec.pattern = 'spec/*_spec.rb'
|
98
|
+
spec.rspec_opts = [Dir["lib"].to_a.join(':')]
|
99
|
+
end
|
100
|
+
|
101
|
+
|
@@ -0,0 +1,152 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
module Runnable
|
4
|
+
def run
|
5
|
+
reject! { |item| item.done }
|
6
|
+
each { |item| item.display }
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class ParticleSystem
|
11
|
+
include Enumerable, Runnable
|
12
|
+
extend Forwardable
|
13
|
+
def_delegators(:@particles, :each, :reject!, :<<, :empty?)
|
14
|
+
def_delegator(:@particles, :empty?, :dead?)
|
15
|
+
|
16
|
+
attr_reader :particles, :x, :y
|
17
|
+
|
18
|
+
def initialize(bd, num, x, y)
|
19
|
+
@particles = [] # Initialize the Array
|
20
|
+
@x, @y = x, y # Store the origin point
|
21
|
+
num.times do
|
22
|
+
self << Particle.new(bd, x, y)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def add_particles(bd, n)
|
27
|
+
n.times do
|
28
|
+
self << Particle.new(bd, x, y)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# A Particle
|
34
|
+
require 'pbox2d'
|
35
|
+
|
36
|
+
class Particle
|
37
|
+
include Processing::Proxy
|
38
|
+
include PB
|
39
|
+
TRAIL_SIZE = 6
|
40
|
+
# We need to keep track of a Body
|
41
|
+
|
42
|
+
attr_reader :trail, :body, :box2d
|
43
|
+
|
44
|
+
# Constructor
|
45
|
+
def initialize(b2d, x, y)
|
46
|
+
@box2d = b2d
|
47
|
+
@trail = Array.new(TRAIL_SIZE, [x, y])
|
48
|
+
|
49
|
+
# Add the box to the box2d world
|
50
|
+
# Here's a little trick, let's make a tiny tiny radius
|
51
|
+
# This way we have collisions, but they don't overwhelm the system
|
52
|
+
make_body(PB::Vec2.new(x,y), 0.2)
|
53
|
+
end
|
54
|
+
|
55
|
+
# This function removes the particle from the box2d world
|
56
|
+
def kill_body
|
57
|
+
box2d.destroy_body(body)
|
58
|
+
end
|
59
|
+
|
60
|
+
# Is the particle ready for deletion?
|
61
|
+
def done
|
62
|
+
# Let's find the screen position of the particle
|
63
|
+
pos = box2d.get_body_pixel_coord(body)
|
64
|
+
# Is it off the bottom of the screen?
|
65
|
+
return false unless (pos.y > $app.height + 20)
|
66
|
+
kill_body
|
67
|
+
true
|
68
|
+
end
|
69
|
+
|
70
|
+
# Drawing the box
|
71
|
+
def display
|
72
|
+
# We look at each body and get its screen position
|
73
|
+
pos = box2d.get_body_pixel_coord(body)
|
74
|
+
# Keep track of a history of screen positions in an array
|
75
|
+
(TRAIL_SIZE - 1).times do |i|
|
76
|
+
trail[i] = trail[i + 1]
|
77
|
+
end
|
78
|
+
trail[TRAIL_SIZE - 1] = [pos.x, pos.y]
|
79
|
+
# Draw particle as a trail
|
80
|
+
begin_shape
|
81
|
+
no_fill
|
82
|
+
stroke_weight(2)
|
83
|
+
stroke(0, 150)
|
84
|
+
trail.each do |v|
|
85
|
+
vertex(v[0], v[1])
|
86
|
+
end
|
87
|
+
end_shape
|
88
|
+
end
|
89
|
+
|
90
|
+
# This function adds the rectangle to the box2d world
|
91
|
+
def make_body(center, r)
|
92
|
+
# Define and create the body
|
93
|
+
bd = PB::BodyDef.new
|
94
|
+
bd.type = PB::BodyType::DYNAMIC
|
95
|
+
bd.position.set(box2d.coord_pixels_to_world(center))
|
96
|
+
@body = box2d.create_body(bd)
|
97
|
+
# Give it some initial random velocity
|
98
|
+
body.set_linear_velocity(PB::Vec2.new(rand(-1.0..1), rand(-1.0..1)))
|
99
|
+
# Make the body's shape a circle
|
100
|
+
cs = PB::CircleShape.new
|
101
|
+
cs.m_radius = box2d.scalar_pixels_to_world(r)
|
102
|
+
fd = PB::FixtureDef.new
|
103
|
+
fd.shape = cs
|
104
|
+
fd.density = 1
|
105
|
+
fd.friction = 0 # Slippery when wet!
|
106
|
+
fd.restitution = 0.5
|
107
|
+
# We could use this if we want to turn collisions off
|
108
|
+
#cd.filter.groupIndex = -10
|
109
|
+
# Attach fixture to body
|
110
|
+
body.create_fixture(fd)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
|
115
|
+
class Boundary
|
116
|
+
include Processing::Proxy
|
117
|
+
include PB
|
118
|
+
attr_reader :box2d, :b, :x, :y, :w, :h
|
119
|
+
|
120
|
+
def initialize(b2d, x, y, w, h, a)
|
121
|
+
@box2d, @x, @y, @w, @h = b2d, x, y, w, h
|
122
|
+
# Define the polygon
|
123
|
+
sd = PB::PolygonShape.new
|
124
|
+
# Figure out the box2d coordinates
|
125
|
+
box2dW = box2d.scalar_pixels_to_world(w / 2)
|
126
|
+
box2dH = box2d.scalar_pixels_to_world(h / 2)
|
127
|
+
# We're just a box
|
128
|
+
sd.set_as_box(box2dW, box2dH)
|
129
|
+
# Create the body
|
130
|
+
bd = PB::BodyDef.new
|
131
|
+
bd.type = PB::BodyType::STATIC
|
132
|
+
bd.angle = a
|
133
|
+
bd.position.set(box2d.coord_pixels_to_world(x,y))
|
134
|
+
@b = box2d.create_body(bd)
|
135
|
+
# Attached the shape to the body using a Fixture
|
136
|
+
b.create_fixture(sd, 1)
|
137
|
+
end
|
138
|
+
|
139
|
+
# Draw the boundary, it doesn't move so we don't have to ask the Body for location
|
140
|
+
def display
|
141
|
+
fill(0)
|
142
|
+
stroke(0)
|
143
|
+
stroke_weight(1)
|
144
|
+
rect_mode(CENTER)
|
145
|
+
a = b.get_angle
|
146
|
+
push_matrix
|
147
|
+
translate(x, y)
|
148
|
+
rotate(-a)
|
149
|
+
rect(0, 0, w, h)
|
150
|
+
pop_matrix
|
151
|
+
end
|
152
|
+
end
|
data/example/liquidy.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'box2d'
|
2
|
+
require_relative 'lib/particle_system'
|
3
|
+
attr_reader :box2d, :boundaries, :systems
|
4
|
+
|
5
|
+
include ContactListener
|
6
|
+
|
7
|
+
def setup
|
8
|
+
size(400,300)
|
9
|
+
@box2d = Box2D.new(self)
|
10
|
+
box2d.create_world
|
11
|
+
# We are setting a custom gravity
|
12
|
+
box2d.set_gravity(0, -20)
|
13
|
+
|
14
|
+
# Create Arrays
|
15
|
+
@systems = []
|
16
|
+
@boundaries = []
|
17
|
+
# Add a bunch of fixed boundaries
|
18
|
+
boundaries << Boundary.new(box2d, 50, 100, 300, 5, -0.3)
|
19
|
+
boundaries << Boundary.new(box2d, 250, 175, 300, 5, 0.5)
|
20
|
+
end
|
21
|
+
|
22
|
+
def draw
|
23
|
+
background(255)
|
24
|
+
# Run all the particle systems
|
25
|
+
if systems.size > 0
|
26
|
+
systems.each do |system|
|
27
|
+
system.run
|
28
|
+
system.add_particles(box2d, rand(0..2))
|
29
|
+
end
|
30
|
+
end
|
31
|
+
# Display all the boundaries
|
32
|
+
boundaries.each(&:display)
|
33
|
+
end
|
34
|
+
|
35
|
+
def mouse_pressed
|
36
|
+
# Add a new Particle System whenever the mouse is clicked
|
37
|
+
systems << ParticleSystem.new(box2d, 0, mouse_x, mouse_y)
|
38
|
+
end
|
39
|
+
|
40
|
+
|
data/lib/box2d.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
working_directory = File.join(File.dirname(__FILE__))
|
2
|
+
$LOAD_PATH << working_directory unless $LOAD_PATH.include?(working_directory)
|
3
|
+
Dir[File.join(working_directory, '*.jar')].each do |jar|
|
4
|
+
require jar
|
5
|
+
end
|
6
|
+
|
7
|
+
module PB
|
8
|
+
include_package 'org.jbox2d.collision.shapes'
|
9
|
+
include_package 'org.jbox2d.common'
|
10
|
+
include_package 'org.jbox2d.dynamics'
|
11
|
+
include_package 'processing.box2d'
|
12
|
+
end
|
13
|
+
|
14
|
+
ContactListener = Java::OrgJbox2dCallbacks::ContactListener
|
15
|
+
Box2D = PB::Box2DProcessing
|
Binary file
|
data/lib/pbox2d.jar
ADDED
Binary file
|
metadata
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pbox2d
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: java
|
6
|
+
authors:
|
7
|
+
- Martin Prout
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-11-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - ~>
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: 2.6.4
|
19
|
+
name: ruby-processing
|
20
|
+
prerelease: false
|
21
|
+
type: :runtime
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.6.4
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '10.3'
|
33
|
+
name: rake
|
34
|
+
prerelease: false
|
35
|
+
type: :development
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0.9'
|
47
|
+
name: rake-compiler
|
48
|
+
prerelease: false
|
49
|
+
type: :development
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.9'
|
55
|
+
description: "\"An exemplar for how processing/java libraries can be made available\n\
|
56
|
+
for use in ruby-processing. In this example avoiding an overdose of java \nreflection\
|
57
|
+
\ by letting jruby sugar implement an interface\"\n"
|
58
|
+
email: martin_p@lineone.net
|
59
|
+
executables: []
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files:
|
62
|
+
- README.md
|
63
|
+
- LICENSE.md
|
64
|
+
files:
|
65
|
+
- LICENSE.md
|
66
|
+
- README.md
|
67
|
+
- Rakefile
|
68
|
+
- lib/box2d.rb
|
69
|
+
- lib/box2d/version.rb
|
70
|
+
- example/lib/particle_system.rb
|
71
|
+
- example/liquidy.rb
|
72
|
+
- lib/pbox2d.jar
|
73
|
+
- lib/jbox2d-library-2.2.1-ds.jar
|
74
|
+
homepage: https://github.com/ruby-processing/jbox2d
|
75
|
+
licenses:
|
76
|
+
- MIT
|
77
|
+
metadata: {}
|
78
|
+
post_install_message:
|
79
|
+
rdoc_options: []
|
80
|
+
require_paths:
|
81
|
+
- lib
|
82
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - '>='
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
requirements:
|
93
|
+
- A decent graphics card
|
94
|
+
- java runtime >= 1.7+
|
95
|
+
- processing = 2.2.1+
|
96
|
+
rubyforge_project:
|
97
|
+
rubygems_version: 2.1.9
|
98
|
+
signing_key:
|
99
|
+
specification_version: 4
|
100
|
+
summary: jbox2d wrapped in a gem for ruby-processing
|
101
|
+
test_files: []
|