rubysketch 0.8.0 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c2d5ce7e554264c501763b490d4ecec02cc7be17509bf44c4821c5b0d4083788
4
- data.tar.gz: 8c1d4352f30dd6e5b7455f4d67892952f43594e02f35fc7a5a3e3832ecc77aa4
3
+ metadata.gz: 7d8dec759594380f551b5fd46d9f880d38351930e360942630fbac8ac4a3b91b
4
+ data.tar.gz: 953ab7409d9439449f34baa09695f76ba45a0e421e4a2bbadd47b0245dde5e59
5
5
  SHA512:
6
- metadata.gz: 9ecd190e2f06b9321e76cb74c2d8ffdbe42142430095f80837df1731fbf6c0539d3c89855e9b69e09d94d730d69379ebe8a3968916a55a5b4cafbaaa9b885697
7
- data.tar.gz: 28a1bc912004c769b691804768c203a2cb98454d3f96accd63b536687797eba08432ec4bb2cfe2a27f7411b97a85317e6bfe959e7e389dde13331b2915f38034
6
+ metadata.gz: 984289d2daf410e6729e4f09f83127938cde051f4bbdb91a82291fc7c3e571a0eac6f5d233c54a69c668c1dd6d836cb50d46c3fa327c769b689c700af64ecc7c
7
+ data.tar.gz: d07dc1574e39ee30f1d44d00f455c6ab6f8ef8c5d9ef01d3317dc286cbc111b19bb3865c7b937073728b697191d6095337181c9dbdcc167ff74dcf6c0c048528
data/ChangeLog.md CHANGED
@@ -1,6 +1,21 @@
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
+
14
+ ## [v0.8.1] - 2026-05-20
15
+
16
+ - Rename snake_case methods to camelCase
17
+
18
+
4
19
  ## [v0.8.0] - 2026-05-17
5
20
 
6
21
  - [BREAKING] Wheel Y delta now follows top-left origin convention (from reflex)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.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
- sprites = []
12
- ground = createSprite 0, height - 10, width, 10
9
+ def setup()
10
+ noStroke
11
+ gravity 0, 1000
13
12
 
14
- draw do
15
- background 100
16
- sprite *sprites, ground
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
- mousePressed do
20
- shape = Circle.new 0, 0, 20
21
- sp = createSprite mouseX + rand, mouseY + rand, shape: shape
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
- sprites << sp
53
+ sp
25
54
  end
@@ -14,6 +14,7 @@ end# RubySketch
14
14
 
15
15
  require 'rubysketch/extension'
16
16
  require 'rubysketch/helper'
17
+ require 'rubysketch/window'
17
18
 
18
19
  require 'rubysketch/sprite'
19
20
  require 'rubysketch/shape'
@@ -65,22 +65,28 @@ module RubySketch
65
65
  nil
66
66
  end
67
67
 
68
- # Defines contact_end block.
68
+ # Defines contactEnd block.
69
69
  #
70
70
  # @example Call jumping() when the shape leaves the ground sprite
71
- # shape.contact_end do |o|
71
+ # shape.contactEnd do |o|
72
72
  # jumping if o == groundSprite
73
73
  # end
74
74
  #
75
75
  # @return [nil] nil
76
76
  #
77
- def contact_end(&block)
77
+ def contactEnd(&block)
78
78
  @shape.contact_end do |other|
79
79
  block.call other.instance_variable_get :@owner__ if block
80
80
  end
81
81
  nil
82
82
  end
83
83
 
84
+ # @deprecated Use {#contactEnd} instead.
85
+ def contact_end(&block)
86
+ warn "Shape#contact_end is deprecated, use #contactEnd instead", uniq: true
87
+ contactEnd(&block)
88
+ end
89
+
84
90
  # @private
85
91
  def getInternal__()
86
92
  @shape
@@ -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.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,
@@ -674,7 +674,7 @@ module RubySketch
674
674
  #
675
675
  # @return [Numeric] gravity scale
676
676
  #
677
- def gravity_scale=(scale)
677
+ def gravityScale=(scale)
678
678
  @view__.gravity_scale = scale
679
679
  end
680
680
 
@@ -682,10 +682,22 @@ module RubySketch
682
682
  #
683
683
  # @return [Numeric] gravity scale
684
684
  #
685
- def gravity_scale()
685
+ def gravityScale()
686
686
  @view__.gravity_scale
687
687
  end
688
688
 
689
+ # @deprecated Use {#gravityScale=} instead.
690
+ def gravity_scale=(scale)
691
+ warn "Sprite#gravity_scale= is deprecated, use #gravityScale= instead", uniq: true
692
+ self.gravityScale = scale
693
+ end
694
+
695
+ # @deprecated Use {#gravityScale} instead.
696
+ def gravity_scale()
697
+ warn "Sprite#gravity_scale is deprecated, use #gravityScale instead", uniq: true
698
+ gravityScale
699
+ end
700
+
689
701
  # Converts a vector from the screen coordinate
690
702
  #
691
703
  # @param [Vector] vec screen coordinate vector
@@ -839,7 +851,7 @@ module RubySketch
839
851
  # @return [Boolean] is any key pressed or not
840
852
  #
841
853
  def keyPressed(&block)
842
- @view__.keyPressed = block if block
854
+ setViewBlock__ :keyPressed, block if block
843
855
  keyIsPressed
844
856
  end
845
857
 
@@ -848,7 +860,7 @@ module RubySketch
848
860
  # @return [nil] nil
849
861
  #
850
862
  def keyReleased(&block)
851
- @view__.keyReleased = block if block
863
+ setViewBlock__ :keyReleased, block if block
852
864
  nil
853
865
  end
854
866
 
@@ -857,7 +869,7 @@ module RubySketch
857
869
  # @return [nil] nil
858
870
  #
859
871
  def keyTyped(&block)
860
- @view__.keyTyped = block if block
872
+ setViewBlock__ :keyTyped, block if block
861
873
  nil
862
874
  end
863
875
 
@@ -871,7 +883,7 @@ module RubySketch
871
883
  # @return [Boolean] is any mouse button pressed or not
872
884
  #
873
885
  def mousePressed(&block)
874
- @view__.mousePressed = block if block
886
+ setViewBlock__ :mousePressed, block if block
875
887
  @view__.mousePressed?
876
888
  end
877
889
 
@@ -885,7 +897,7 @@ module RubySketch
885
897
  # @return [nil] nil
886
898
  #
887
899
  def mouseReleased(&block)
888
- @view__.mouseReleased = block if block
900
+ setViewBlock__ :mouseReleased, block if block
889
901
  nil
890
902
  end
891
903
 
@@ -899,7 +911,7 @@ module RubySketch
899
911
  # @return [nil] nil
900
912
  #
901
913
  def mouseMoved(&block)
902
- @view__.mouseMoved = block if block
914
+ setViewBlock__ :mouseMoved, block if block
903
915
  nil
904
916
  end
905
917
 
@@ -913,7 +925,7 @@ module RubySketch
913
925
  # @return [nil] nil
914
926
  #
915
927
  def mouseDragged(&block)
916
- @view__.mouseDragged = block if block
928
+ setViewBlock__ :mouseDragged, block if block
917
929
  nil
918
930
  end
919
931
 
@@ -927,7 +939,7 @@ module RubySketch
927
939
  # @return [nil] nil
928
940
  #
929
941
  def mouseClicked(&block)
930
- @view__.mouseClicked = block if block
942
+ setViewBlock__ :mouseClicked, block if block
931
943
  nil
932
944
  end
933
945
 
@@ -941,7 +953,7 @@ module RubySketch
941
953
  # @return [nil] nil
942
954
  #
943
955
  def mouseWheel(&block)
944
- @view__.mouseWheel = block if block
956
+ setViewBlock__ :mouseWheel, block if block
945
957
  nil
946
958
  end
947
959
 
@@ -955,7 +967,7 @@ module RubySketch
955
967
  # @return [nil] nil
956
968
  #
957
969
  def touchStarted(&block)
958
- @view__.touchStarted = block if block
970
+ setViewBlock__ :touchStarted, block if block
959
971
  nil
960
972
  end
961
973
 
@@ -969,7 +981,7 @@ module RubySketch
969
981
  # @return [nil] nil
970
982
  #
971
983
  def touchEnded(&block)
972
- @view__.touchEnded = block if block
984
+ setViewBlock__ :touchEnded, block if block
973
985
  nil
974
986
  end
975
987
 
@@ -983,7 +995,7 @@ module RubySketch
983
995
  # @return [nil] nil
984
996
  #
985
997
  def touchMoved(&block)
986
- @view__.touchMoved = block if block
998
+ setViewBlock__ :touchMoved, block if block
987
999
  nil
988
1000
  end
989
1001
 
@@ -1072,6 +1084,17 @@ module RubySketch
1072
1084
  end
1073
1085
  end
1074
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
+
1075
1098
  end# Sprite
1076
1099
 
1077
1100
 
@@ -1135,7 +1158,7 @@ module RubySketch
1135
1158
  #
1136
1159
  def createSprite(*args, klass: nil, context: nil, **kwargs)
1137
1160
  klass ||= RubySketch::Sprite
1138
- context ||= Context.context__
1161
+ context ||= Context.current__
1139
1162
  addSprite klass.new(*args, context: context, **kwargs)
1140
1163
  end
1141
1164
 
@@ -0,0 +1,14 @@
1
+ module RubySketch
2
+
3
+
4
+ # @private
5
+ class Window < Processing::Window
6
+
7
+ def initialize(*args, context_class: Context, **kwargs)
8
+ super
9
+ end
10
+
11
+ end# Window
12
+
13
+
14
+ end# RubySketch
data/lib/rubysketch.rb CHANGED
@@ -2,13 +2,13 @@ require 'rubysketch/all'
2
2
 
3
3
 
4
4
  module RubySketch
5
- WINDOW__, CONTEXT__ = Processing.setup__ RubySketch
5
+ WINDOW__ = Processing.setup__ Window, Context
6
+ $processing_context__ = WINDOW__.context
6
7
 
7
8
  refine Object do
8
- context = CONTEXT__
9
- Processing.funcs__(context).each do |func|
9
+ Processing.funcs__(Context).each do |func|
10
10
  define_method func do |*args, **kwargs, &block|
11
- context.__send__ func, *args, **kwargs, &block
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
- context = RubySketch::CONTEXT__
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
- context.__send__ func, *args, **kwargs, &block
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, c = RubySketch::WINDOW__, RubySketch::CONTEXT__
37
+ w = RubySketch::WINDOW__
39
38
 
40
- c.class.constants
39
+ w.context.class.constants
41
40
  .reject {_1 =~ /__$/}
42
- .each {self.class.const_set _1, c.class.const_get(_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__(c).each do |event|
45
+ Processing.events__(w.context.class).each do |event|
47
46
  m = begin method event; rescue NameError; nil end
48
- c.__send__(event) {__send__ event} if m
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 c.hasUserBlocks__ && !$!
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.13'
29
- s.add_dependency 'rucy', '~> 0.3.13'
30
- s.add_dependency 'beeps', '~> 0.3.13'
31
- s.add_dependency 'rays', '~> 0.3.13'
32
- s.add_dependency 'reflexion', '~> 0.4.0'
33
- s.add_dependency 'processing', '~> 1.2.0'
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
- P = Processing
7
+
8
+ def sprite(*args, **kwargs)
9
+ RS::Sprite.new(*args, **kwargs)
10
+ end
8
11
 
9
12
  def context()
10
- RS::Context.new P::Window.new
13
+ RS::Context.current__
11
14
  end
12
15
 
13
- def sprite(*args, **kwargs)
14
- RS::Sprite.new(*args, **kwargs)
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.8.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-05-16 00:00:00.000000000 Z
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.13
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.13
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.13
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.13
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.13
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.13
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.13
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.13
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.0
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.0
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.2.0
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.2.0
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