rubysketch 0.8.1 → 0.9.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 +10 -0
- data/VERSION +1 -1
- data/examples/physics.rb +40 -11
- data/lib/rubysketch/all.rb +1 -0
- data/lib/rubysketch/sprite.rb +25 -14
- data/lib/rubysketch/window.rb +14 -0
- data/lib/rubysketch.rb +12 -13
- data/rubysketch.gemspec +6 -6
- data/test/test_context.rb +11 -4
- data/test/test_sprite.rb +8 -0
- metadata +15 -14
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7d8dec759594380f551b5fd46d9f880d38351930e360942630fbac8ac4a3b91b
|
|
4
|
+
data.tar.gz: 953ab7409d9439449f34baa09695f76ba45a0e421e4a2bbadd47b0245dde5e59
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 984289d2daf410e6729e4f09f83127938cde051f4bbdb91a82291fc7c3e571a0eac6f5d233c54a69c668c1dd6d836cb50d46c3fa327c769b689c700af64ecc7c
|
|
7
|
+
data.tar.gz: d07dc1574e39ee30f1d44d00f455c6ab6f8ef8c5d9ef01d3317dc286cbc111b19bb3865c7b937073728b697191d6095337181c9dbdcc167ff74dcf6c0c048528
|
data/ChangeLog.md
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
# rubysketch ChangeLog
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
## [v0.9.0] - 2026-06-12
|
|
5
|
+
|
|
6
|
+
- [BREAKING] Drop redundant drawXxx aliases from GraphicsContext (from processing)
|
|
7
|
+
- [BREAKING] Make pixelDensity a keyword arg in createGraphics (from processing)
|
|
8
|
+
|
|
9
|
+
- Adopt the per-window Context model from Processing
|
|
10
|
+
- Make context dispatch survive across event paths
|
|
11
|
+
- Rework physics example with walls, FPS, and drag-to-spawn
|
|
12
|
+
|
|
13
|
+
|
|
4
14
|
## [v0.8.1] - 2026-05-20
|
|
5
15
|
|
|
6
16
|
- Rename snake_case methods to camelCase
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.9.0
|
data/examples/physics.rb
CHANGED
|
@@ -5,21 +5,50 @@
|
|
|
5
5
|
require 'rubysketch'
|
|
6
6
|
using RubySketch
|
|
7
7
|
|
|
8
|
-
noStroke
|
|
9
|
-
gravity 0, 1000
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
def setup()
|
|
10
|
+
noStroke
|
|
11
|
+
gravity 0, 1000
|
|
13
12
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
$sprites = []
|
|
14
|
+
$grounds = [
|
|
15
|
+
createSprite(0, height - 10, width, 10),
|
|
16
|
+
createSprite(0, 0, 10, height),
|
|
17
|
+
createSprite(width - 10, 0, 10, height)
|
|
18
|
+
]
|
|
17
19
|
end
|
|
18
20
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
def draw()
|
|
22
|
+
background 0
|
|
23
|
+
|
|
24
|
+
fill 200
|
|
25
|
+
sprite *$grounds
|
|
26
|
+
fill 150, 240, 150
|
|
27
|
+
sprite *$sprites
|
|
28
|
+
|
|
29
|
+
textSize 16
|
|
30
|
+
fill 255, 200, 150
|
|
31
|
+
text "#{frameRate.to_i} FPS, #{$sprites.size} Shapes", 20, 30
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def mousePressed()
|
|
35
|
+
$sprites << create(mouseX, mouseY)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def mouseDragged()
|
|
39
|
+
$sprites << create(mouseX, mouseY)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def create(x, y)
|
|
43
|
+
x += rand
|
|
44
|
+
y += rand
|
|
45
|
+
size = 20
|
|
46
|
+
if rand(2) == 0
|
|
47
|
+
sp = createSprite x, y, size, size
|
|
48
|
+
else
|
|
49
|
+
sp = createSprite x, y, shape: Circle.new(0, 0, size)
|
|
50
|
+
end
|
|
22
51
|
sp.dynamic = true
|
|
23
52
|
sp.restitution = 0.5
|
|
24
|
-
|
|
53
|
+
sp
|
|
25
54
|
end
|
data/lib/rubysketch/all.rb
CHANGED
data/lib/rubysketch/sprite.rb
CHANGED
|
@@ -63,7 +63,7 @@ module RubySketch
|
|
|
63
63
|
raise 'invalid image' if image && !image.getInternal__.is_a?(Rays::Image)
|
|
64
64
|
raise 'invalid shape' if shape && !shape.getInternal__.is_a?(Reflex::Shape)
|
|
65
65
|
|
|
66
|
-
@context__ = context || Context.
|
|
66
|
+
@context__ = context || Context.current__
|
|
67
67
|
@shape__ = shape
|
|
68
68
|
@view__ = View.new(
|
|
69
69
|
self, x: x, y: y, w: w, h: h,
|
|
@@ -851,7 +851,7 @@ module RubySketch
|
|
|
851
851
|
# @return [Boolean] is any key pressed or not
|
|
852
852
|
#
|
|
853
853
|
def keyPressed(&block)
|
|
854
|
-
|
|
854
|
+
setViewBlock__ :keyPressed, block if block
|
|
855
855
|
keyIsPressed
|
|
856
856
|
end
|
|
857
857
|
|
|
@@ -860,7 +860,7 @@ module RubySketch
|
|
|
860
860
|
# @return [nil] nil
|
|
861
861
|
#
|
|
862
862
|
def keyReleased(&block)
|
|
863
|
-
|
|
863
|
+
setViewBlock__ :keyReleased, block if block
|
|
864
864
|
nil
|
|
865
865
|
end
|
|
866
866
|
|
|
@@ -869,7 +869,7 @@ module RubySketch
|
|
|
869
869
|
# @return [nil] nil
|
|
870
870
|
#
|
|
871
871
|
def keyTyped(&block)
|
|
872
|
-
|
|
872
|
+
setViewBlock__ :keyTyped, block if block
|
|
873
873
|
nil
|
|
874
874
|
end
|
|
875
875
|
|
|
@@ -883,7 +883,7 @@ module RubySketch
|
|
|
883
883
|
# @return [Boolean] is any mouse button pressed or not
|
|
884
884
|
#
|
|
885
885
|
def mousePressed(&block)
|
|
886
|
-
|
|
886
|
+
setViewBlock__ :mousePressed, block if block
|
|
887
887
|
@view__.mousePressed?
|
|
888
888
|
end
|
|
889
889
|
|
|
@@ -897,7 +897,7 @@ module RubySketch
|
|
|
897
897
|
# @return [nil] nil
|
|
898
898
|
#
|
|
899
899
|
def mouseReleased(&block)
|
|
900
|
-
|
|
900
|
+
setViewBlock__ :mouseReleased, block if block
|
|
901
901
|
nil
|
|
902
902
|
end
|
|
903
903
|
|
|
@@ -911,7 +911,7 @@ module RubySketch
|
|
|
911
911
|
# @return [nil] nil
|
|
912
912
|
#
|
|
913
913
|
def mouseMoved(&block)
|
|
914
|
-
|
|
914
|
+
setViewBlock__ :mouseMoved, block if block
|
|
915
915
|
nil
|
|
916
916
|
end
|
|
917
917
|
|
|
@@ -925,7 +925,7 @@ module RubySketch
|
|
|
925
925
|
# @return [nil] nil
|
|
926
926
|
#
|
|
927
927
|
def mouseDragged(&block)
|
|
928
|
-
|
|
928
|
+
setViewBlock__ :mouseDragged, block if block
|
|
929
929
|
nil
|
|
930
930
|
end
|
|
931
931
|
|
|
@@ -939,7 +939,7 @@ module RubySketch
|
|
|
939
939
|
# @return [nil] nil
|
|
940
940
|
#
|
|
941
941
|
def mouseClicked(&block)
|
|
942
|
-
|
|
942
|
+
setViewBlock__ :mouseClicked, block if block
|
|
943
943
|
nil
|
|
944
944
|
end
|
|
945
945
|
|
|
@@ -953,7 +953,7 @@ module RubySketch
|
|
|
953
953
|
# @return [nil] nil
|
|
954
954
|
#
|
|
955
955
|
def mouseWheel(&block)
|
|
956
|
-
|
|
956
|
+
setViewBlock__ :mouseWheel, block if block
|
|
957
957
|
nil
|
|
958
958
|
end
|
|
959
959
|
|
|
@@ -967,7 +967,7 @@ module RubySketch
|
|
|
967
967
|
# @return [nil] nil
|
|
968
968
|
#
|
|
969
969
|
def touchStarted(&block)
|
|
970
|
-
|
|
970
|
+
setViewBlock__ :touchStarted, block if block
|
|
971
971
|
nil
|
|
972
972
|
end
|
|
973
973
|
|
|
@@ -981,7 +981,7 @@ module RubySketch
|
|
|
981
981
|
# @return [nil] nil
|
|
982
982
|
#
|
|
983
983
|
def touchEnded(&block)
|
|
984
|
-
|
|
984
|
+
setViewBlock__ :touchEnded, block if block
|
|
985
985
|
nil
|
|
986
986
|
end
|
|
987
987
|
|
|
@@ -995,7 +995,7 @@ module RubySketch
|
|
|
995
995
|
# @return [nil] nil
|
|
996
996
|
#
|
|
997
997
|
def touchMoved(&block)
|
|
998
|
-
|
|
998
|
+
setViewBlock__ :touchMoved, block if block
|
|
999
999
|
nil
|
|
1000
1000
|
end
|
|
1001
1001
|
|
|
@@ -1084,6 +1084,17 @@ module RubySketch
|
|
|
1084
1084
|
end
|
|
1085
1085
|
end
|
|
1086
1086
|
|
|
1087
|
+
# @private
|
|
1088
|
+
def setViewBlock__(name, block)
|
|
1089
|
+
c = @context__
|
|
1090
|
+
@view__.__send__ "#{name}=", block && (proc do |*a, **k, &b|
|
|
1091
|
+
prev, $processing_context__ = $processing_context__, c
|
|
1092
|
+
block.call(*a, **k, &b)
|
|
1093
|
+
ensure
|
|
1094
|
+
$processing_context__ = prev
|
|
1095
|
+
end)
|
|
1096
|
+
end
|
|
1097
|
+
|
|
1087
1098
|
end# Sprite
|
|
1088
1099
|
|
|
1089
1100
|
|
|
@@ -1147,7 +1158,7 @@ module RubySketch
|
|
|
1147
1158
|
#
|
|
1148
1159
|
def createSprite(*args, klass: nil, context: nil, **kwargs)
|
|
1149
1160
|
klass ||= RubySketch::Sprite
|
|
1150
|
-
context ||= Context.
|
|
1161
|
+
context ||= Context.current__
|
|
1151
1162
|
addSprite klass.new(*args, context: context, **kwargs)
|
|
1152
1163
|
end
|
|
1153
1164
|
|
data/lib/rubysketch.rb
CHANGED
|
@@ -2,13 +2,13 @@ require 'rubysketch/all'
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
module RubySketch
|
|
5
|
-
WINDOW__
|
|
5
|
+
WINDOW__ = Processing.setup__ Window, Context
|
|
6
|
+
$processing_context__ = WINDOW__.context
|
|
6
7
|
|
|
7
8
|
refine Object do
|
|
8
|
-
|
|
9
|
-
Processing.funcs__(context).each do |func|
|
|
9
|
+
Processing.funcs__(Context).each do |func|
|
|
10
10
|
define_method func do |*args, **kwargs, &block|
|
|
11
|
-
|
|
11
|
+
$processing_context__.__send__ func, *args, **kwargs, &block
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -23,10 +23,9 @@ def RubySketch(snake_case: false)
|
|
|
23
23
|
Processing.alias_snake_case_methods__ RubySketch
|
|
24
24
|
|
|
25
25
|
refine Object do
|
|
26
|
-
|
|
27
|
-
Processing.funcs__(context).each do |func|
|
|
26
|
+
Processing.funcs__(RubySketch::Context).each do |func|
|
|
28
27
|
define_method func do |*args, **kwargs, &block|
|
|
29
|
-
|
|
28
|
+
$processing_context__.__send__ func, *args, **kwargs, &block
|
|
30
29
|
end
|
|
31
30
|
end
|
|
32
31
|
end
|
|
@@ -35,20 +34,20 @@ end
|
|
|
35
34
|
|
|
36
35
|
|
|
37
36
|
begin
|
|
38
|
-
w
|
|
37
|
+
w = RubySketch::WINDOW__
|
|
39
38
|
|
|
40
|
-
|
|
39
|
+
w.context.class.constants
|
|
41
40
|
.reject {_1 =~ /__$/}
|
|
42
|
-
.each {self.class.const_set _1,
|
|
41
|
+
.each {self.class.const_set _1, w.context.class.const_get(_1)}
|
|
43
42
|
|
|
44
43
|
w.__send__ :begin_draw
|
|
45
44
|
at_exit do
|
|
46
|
-
Processing.events__(
|
|
45
|
+
Processing.events__(w.context.class).each do |event|
|
|
47
46
|
m = begin method event; rescue NameError; nil end
|
|
48
|
-
|
|
47
|
+
w.context.__send__(event) {__send__ event} if m
|
|
49
48
|
end
|
|
50
49
|
|
|
51
50
|
w.__send__ :end_draw
|
|
52
|
-
Processing::App.new {w.show}.start if
|
|
51
|
+
Processing::App.new {w.show}.start if w.context.hasUserBlocks__ && !$!
|
|
53
52
|
end
|
|
54
53
|
end
|
data/rubysketch.gemspec
CHANGED
|
@@ -25,12 +25,12 @@ Gem::Specification.new do |s|
|
|
|
25
25
|
s.platform = Gem::Platform::RUBY
|
|
26
26
|
s.required_ruby_version = '>= 3.0.0'
|
|
27
27
|
|
|
28
|
-
s.add_dependency 'xot', '~> 0.3.
|
|
29
|
-
s.add_dependency 'rucy', '~> 0.3.
|
|
30
|
-
s.add_dependency 'beeps', '~> 0.3.
|
|
31
|
-
s.add_dependency 'rays', '~> 0.3.
|
|
32
|
-
s.add_dependency 'reflexion', '~> 0.4.
|
|
33
|
-
s.add_dependency 'processing', '~> 1.
|
|
28
|
+
s.add_dependency 'xot', '~> 0.3.14'
|
|
29
|
+
s.add_dependency 'rucy', '~> 0.3.14'
|
|
30
|
+
s.add_dependency 'beeps', '~> 0.3.15'
|
|
31
|
+
s.add_dependency 'rays', '~> 0.3.15'
|
|
32
|
+
s.add_dependency 'reflexion', '~> 0.4.2'
|
|
33
|
+
s.add_dependency 'processing', '~> 1.3.0'
|
|
34
34
|
|
|
35
35
|
s.files = `git ls-files`.split $/
|
|
36
36
|
s.test_files = s.files.grep %r{^(test|spec|features)/}
|
data/test/test_context.rb
CHANGED
|
@@ -4,14 +4,21 @@ require_relative 'helper'
|
|
|
4
4
|
class TestContext < Test::Unit::TestCase
|
|
5
5
|
|
|
6
6
|
RS = RubySketch
|
|
7
|
-
|
|
7
|
+
|
|
8
|
+
def sprite(*args, **kwargs)
|
|
9
|
+
RS::Sprite.new(*args, **kwargs)
|
|
10
|
+
end
|
|
8
11
|
|
|
9
12
|
def context()
|
|
10
|
-
RS::Context.
|
|
13
|
+
RS::Context.current__
|
|
11
14
|
end
|
|
12
15
|
|
|
13
|
-
def
|
|
14
|
-
RS::
|
|
16
|
+
def setup()
|
|
17
|
+
RS::Context.setCurrent__ RS::Window.new.context
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def teardown()
|
|
21
|
+
RS::Context.setCurrent__ nil
|
|
15
22
|
end
|
|
16
23
|
|
|
17
24
|
def test_addSprite()
|
data/test/test_sprite.rb
CHANGED
|
@@ -17,6 +17,14 @@ class TestSprite < Test::Unit::TestCase
|
|
|
17
17
|
RS::Image.new Rays::Image.new(w, h)
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
+
def setup()
|
|
21
|
+
RS::Context.setCurrent__ RS::Window.new.context
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def teardown()
|
|
25
|
+
RS::Context.setCurrent__ nil
|
|
26
|
+
end
|
|
27
|
+
|
|
20
28
|
def test_initialize()
|
|
21
29
|
assert_equal vec(0, 0), sprite .pos
|
|
22
30
|
assert_equal vec(1, 2), sprite(1, 2) .pos
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rubysketch
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.9.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- xordog
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-06-12 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: xot
|
|
@@ -16,84 +16,84 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 0.3.
|
|
19
|
+
version: 0.3.14
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 0.3.
|
|
26
|
+
version: 0.3.14
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: rucy
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: 0.3.
|
|
33
|
+
version: 0.3.14
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
38
|
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: 0.3.
|
|
40
|
+
version: 0.3.14
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: beeps
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: 0.3.
|
|
47
|
+
version: 0.3.15
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: 0.3.
|
|
54
|
+
version: 0.3.15
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: rays
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
59
|
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: 0.3.
|
|
61
|
+
version: 0.3.15
|
|
62
62
|
type: :runtime
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: 0.3.
|
|
68
|
+
version: 0.3.15
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: reflexion
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
73
|
- - "~>"
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: 0.4.
|
|
75
|
+
version: 0.4.2
|
|
76
76
|
type: :runtime
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: 0.4.
|
|
82
|
+
version: 0.4.2
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: processing
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
87
|
- - "~>"
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: 1.
|
|
89
|
+
version: 1.3.0
|
|
90
90
|
type: :runtime
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
94
|
- - "~>"
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: 1.
|
|
96
|
+
version: 1.3.0
|
|
97
97
|
description: A game engine based on the Processing API.
|
|
98
98
|
email: xordog@gmail.com
|
|
99
99
|
executables: []
|
|
@@ -132,6 +132,7 @@ files:
|
|
|
132
132
|
- lib/rubysketch/shape.rb
|
|
133
133
|
- lib/rubysketch/sound.rb
|
|
134
134
|
- lib/rubysketch/sprite.rb
|
|
135
|
+
- lib/rubysketch/window.rb
|
|
135
136
|
- pod.rake
|
|
136
137
|
- rubysketch.gemspec
|
|
137
138
|
- src/RubySketch.h
|