rubysketch 0.5.31 → 0.5.32

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: ee4bec833e545d64ac7822c59d7b52e92a507ac23d909fd6143f15dace1ed8c4
4
- data.tar.gz: 8151adda147364200efe13a96b2fce82b00c01fa25cb84c69f4de6ba5d9a6a4d
3
+ metadata.gz: 96ae60d6cddfaf8e77134a40cd35024a252278bc9b87755eb235ad6ef96151b5
4
+ data.tar.gz: c3bb6f454cfb2d5f6c9f872571842a82affe84e08bde8d7b68e4a95b46dd65a9
5
5
  SHA512:
6
- metadata.gz: d85c90842181d311cee151604fc1c38edc6d5b2d1caba4d3c9f206f512d98b5f93ced450f8ec6aaa760781bdfc61c8d92644cdc2f2b4811c63b7f81f70091ca2
7
- data.tar.gz: 94978e5eadf6fbd607c4762adec4049df1930123be74c5cee46dfb582c0ec76f907f8a3e214cc162d779a9b96bc12a4904cd054f60ecae921db3abdb57a5ff0c
6
+ metadata.gz: 38bbd11f37d0541d94ad2e06c468116e0f215561c6e53798a6adb1b5a1bba7a5b634b39415387f354f3e6907d4cb4685417a86c865d9e20f3fe1c2161ad353dd
7
+ data.tar.gz: 6f7664cd66b93f54897c0904a41b64ec0c79060c4d661a3b8f6858298c64ef0cbb6e7f4e8c9fe115ee50f7cbb00e02b75bee0949396e5514dd3b44d43146b9e8
data/ChangeLog.md CHANGED
@@ -1,6 +1,12 @@
1
1
  # rubysketch ChangeLog
2
2
 
3
3
 
4
+ ## [v0.5.32] - 2023-10-29
5
+
6
+ - Add Shape class
7
+ - Add Circle shape class and Sprite can take 'shape' parameter
8
+
9
+
4
10
  ## [v0.5.31] - 2023-10-25
5
11
 
6
12
  - Add toon.rb
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.31
1
+ 0.5.32
data/examples/physics.rb CHANGED
@@ -17,7 +17,8 @@ draw do
17
17
  end
18
18
 
19
19
  mousePressed do
20
- sp = createSprite mouseX, mouseY, 20, 20
20
+ shape = Circle.new 0, 0, 20
21
+ sp = createSprite mouseX + rand, mouseY + rand, shape: shape
21
22
  sp.dynamic = true
22
23
  sp.restitution = 0.5
23
24
  sprites << sp
@@ -5,6 +5,7 @@ require 'rubysketch/extension'
5
5
  require 'rubysketch/helper'
6
6
 
7
7
  require 'rubysketch/sprite'
8
+ require 'rubysketch/shape'
8
9
  require 'rubysketch/sound'
9
10
  require 'rubysketch/easings'
10
11
  require 'rubysketch/context'
@@ -4,6 +4,7 @@ module RubySketch
4
4
  class Context < Processing::Context
5
5
 
6
6
  Sprite = RubySketch::Sprite
7
+ Circle = RubySketch::Circle
7
8
  Sound = RubySketch::Sound
8
9
 
9
10
  # @private
@@ -141,31 +142,49 @@ module RubySketch
141
142
 
142
143
  # Creates a new sprite and add it to physics engine.
143
144
  #
145
+ # @overload createSprite(x, y, w, h)
146
+ # pos(x, y), size: [w, h]
147
+ # @param [Numeric] x x of the sprite position
148
+ # @param [Numeric] y y of the sprite position
149
+ # @param [Numeric] w width of the sprite
150
+ # @param [Numeric] h height of the sprite
151
+ #
144
152
  # @overload createSprite(image: img)
145
153
  # pos: [0, 0], size: [image.width, image.height]
146
154
  # @param [Image] img sprite image
147
155
  #
148
156
  # @overload createSprite(x, y, image: img)
149
157
  # pos: [x, y], size: [image.width, image.height]
150
- # @param [Numeric] x x of sprite position
151
- # @param [Numeric] y y of sprite position
158
+ # @param [Numeric] x x of the sprite position
159
+ # @param [Numeric] y y of the sprite position
152
160
  # @param [Image] img sprite image
153
161
  #
154
- # @overload createSprite(x, y, w, h)
155
- # pos(x, y), size: [w, h]
156
- # @param [Numeric] x x of sprite position
157
- # @param [Numeric] y y of sprite position
158
- # @param [Numeric] w width of sprite
159
- # @param [Numeric] h height of sprite
160
- #
161
- # @overload createSprite(x, y, w, h, image: img, offset: off)
162
- # pos: [x, y], size: [w, h], offset: [offset.x, offset.x]
163
- # @param [Numeric] x x of sprite position
164
- # @param [Numeric] y y of sprite position
165
- # @param [Numeric] w width of sprite
166
- # @param [Numeric] h height of sprite
162
+ # @overload createSprite(x, y, image: img, offset: off)
163
+ # pos: [x, y], size: [image.width, image.height], offset: [offset.x, offset.x]
164
+ # @param [Numeric] x x of the sprite position
165
+ # @param [Numeric] y y of the sprite position
166
+ # @param [Image] img sprite image
167
+ # @param [Vector] off offset of the sprite image
168
+ #
169
+ # @overload createSprite(x, y, image: img, shape: shp)
170
+ # pos: [x, y], size: [image.width, image.height]
171
+ # @param [Numeric] x x of the sprite position
172
+ # @param [Numeric] y y of the sprite position
167
173
  # @param [Image] img sprite image
168
- # @param [Vector] off offset of sprite image
174
+ #
175
+ # @overload createSprite(x, y, image: img, offset: off, shape: shp)
176
+ # pos: [x, y], size: [image.width, image.height], offset: [offset.x, offset.x]
177
+ # @param [Numeric] x x of the sprite position
178
+ # @param [Numeric] y y of the sprite position
179
+ # @param [Image] img sprite image
180
+ # @param [Vector] off offset of the sprite image
181
+ # @param [Shape] shp shape of the sprite for physics calculations
182
+ #
183
+ # @overload createSprite(x, y, shape: shp)
184
+ # pos: [x, y], size: [shape.width, shape.height]
185
+ # @param [Numeric] x x of the sprite position
186
+ # @param [Numeric] y y of the sprite position
187
+ # @param [Shape] shp shape of the sprite for physics calculations
169
188
  #
170
189
  def createSprite(*args, **kwargs)
171
190
  addSprite Sprite.new(*args, **kwargs, context: self)
@@ -210,16 +229,16 @@ module RubySketch
210
229
  translate f.x + pivot.x * f.w, f.y + pivot.y * f.h
211
230
  rotate fromDegrees__ degrees
212
231
  translate (-pivot.x) * f.w, (-pivot.y) * f.h
213
- draw.call {drawSprite__ sp, 0, 0, f.w, f.h}
232
+ draw.call {sp.draw__ self, 0, 0, f.w, f.h}
214
233
  end
215
234
  elsif degrees == 0
216
- drawSprite__ sp, f.x, f.y, f.w, f.h
235
+ sp.draw__ self, f.x, f.y, f.w, f.h
217
236
  else
218
237
  pushMatrix do
219
238
  translate f.x + pivot.x * f.w, f.y + pivot.y * f.h
220
239
  rotate fromDegrees__ degrees
221
240
  translate (-pivot.x) * f.w, (-pivot.y) * f.h
222
- drawSprite__ sp, 0, 0, f.w, f.h
241
+ sp.draw__ self, 0, 0, f.w, f.h
223
242
  end
224
243
  end
225
244
  end
@@ -228,18 +247,6 @@ module RubySketch
228
247
 
229
248
  alias drawSprite sprite
230
249
 
231
- # @private
232
- def drawSprite__(sp, x, y, w, h)
233
- img, off = sp.image, sp.offset
234
- if img && off
235
- copy img, off.x, off.y, w, h, x, y, w, h
236
- elsif img
237
- image img, x, y
238
- else
239
- rect x, y, w, h
240
- end
241
- end
242
-
243
250
  # Loads sound file.
244
251
  #
245
252
  # @param [String] path path for sound file
@@ -0,0 +1,123 @@
1
+ module RubySketch
2
+
3
+
4
+ # Shape class for physics calculations.
5
+ #
6
+ class Shape
7
+
8
+ include Xot::Inspectable
9
+
10
+ # @private
11
+ def initialize(shape)
12
+ @shape = shape or raise ArgumentError
13
+ @shape.instance_variable_set :@owner__, self
14
+ end
15
+
16
+ # Returns the width of the shape.
17
+ #
18
+ # @return [Numeric] width
19
+ #
20
+ def width()
21
+ @shape.width
22
+ end
23
+
24
+ # Returns the height of the shape.
25
+ #
26
+ # @return [Numeric] height
27
+ #
28
+ def height()
29
+ @shape.height
30
+ end
31
+
32
+ alias w width
33
+ alias h height
34
+
35
+ # Set this shape as a sensor object.
36
+ # Sensor object receives contact events, but no collisions.
37
+ #
38
+ # @return [Boolean] sensor or not
39
+ #
40
+ def sensor=(state)
41
+ @shape.sensor = state
42
+ end
43
+
44
+ # Returns weather the shape is a sensor or not.
45
+ #
46
+ # @return [Boolean] sensor or not
47
+ #
48
+ def sensor?()
49
+ @shape.sensor?
50
+ end
51
+
52
+ # Defines contact block.
53
+ #
54
+ # @example Score increases when the shape touches a coin
55
+ # shape.contact do |o|
56
+ # score += 1 if o.coin?
57
+ # end
58
+ #
59
+ # @return [nil] nil
60
+ #
61
+ def contact(&block)
62
+ @shape.contact_begin do |other|
63
+ block.call other.instance_variable_get :@owner__ if block
64
+ end
65
+ nil
66
+ end
67
+
68
+ # Defines contact_end block.
69
+ #
70
+ # @example Call jumping() when the shape leaves the ground sprite
71
+ # shape.contact_end do |o|
72
+ # jumping if o == groundSprite
73
+ # end
74
+ #
75
+ # @return [nil] nil
76
+ #
77
+ def contact_end(&block)
78
+ @shape.contact_end do |other|
79
+ block.call other.instance_variable_get :@owner__ if block
80
+ end
81
+ nil
82
+ end
83
+
84
+ # @private
85
+ def getInternal__()
86
+ @shape
87
+ end
88
+
89
+ # @private
90
+ def draw__(context, x, y, width, height)
91
+ raise NotImplementedError
92
+ end
93
+
94
+ end# Shape
95
+
96
+
97
+ # Circle shape object.
98
+ #
99
+ class Circle < Shape
100
+
101
+ # Initialize circle object.
102
+ #
103
+ # @param [Numeric] x x of the circle shape position
104
+ # @param [Numeric] y y of the circle shape position
105
+ # @param [Numeric] size width and height of the circle shape
106
+ #
107
+ def initialize(x, y, size)
108
+ super Reflex::EllipseShape.new(frame: [x, y, size, size])
109
+ end
110
+
111
+ # @private
112
+ def draw__(c, x, y, w, h)
113
+ f = @shape.frame
114
+ c.pushStyle do
115
+ c.ellipseMode CORNER
116
+ c.ellipse x + f.x, y + f.y, f.w, f.h
117
+ end
118
+ end
119
+
120
+ end# Circle
121
+
122
+
123
+ end# RubySketch
@@ -9,6 +9,13 @@ module RubySketch
9
9
 
10
10
  # Initialize sprite object.
11
11
  #
12
+ # @overload new(x, y, w, h)
13
+ # pos(x, y), size: [w, h]
14
+ # @param [Numeric] x x of the sprite position
15
+ # @param [Numeric] y y of the sprite position
16
+ # @param [Numeric] w width of the sprite
17
+ # @param [Numeric] h height of the sprite
18
+ #
12
19
  # @overload new(image: img)
13
20
  # pos: [0, 0], size: [image.width, image.height]
14
21
  # @param [Image] img sprite image
@@ -19,36 +26,49 @@ module RubySketch
19
26
  # @param [Numeric] y y of the sprite position
20
27
  # @param [Image] img sprite image
21
28
  #
22
- # @overload new(x, y, w, h)
23
- # pos(x, y), size: [w, h]
24
- # @param [Numeric] x x of the sprite position
25
- # @param [Numeric] y y of the sprite position
26
- # @param [Numeric] w width of the sprite
27
- # @param [Numeric] h height of the sprite
29
+ # @overload new(x, y, image: img, offset: off)
30
+ # pos: [x, y], size: [image.width, image.height], offset: [offset.x, offset.x]
31
+ # @param [Numeric] x x of the sprite position
32
+ # @param [Numeric] y y of the sprite position
33
+ # @param [Image] img sprite image
34
+ # @param [Vector] off offset of the sprite image
35
+ #
36
+ # @overload new(x, y, image: img, shape: shp)
37
+ # pos: [x, y], size: [image.width, image.height]
38
+ # @param [Numeric] x x of the sprite position
39
+ # @param [Numeric] y y of the sprite position
40
+ # @param [Image] img sprite image
28
41
  #
29
- # @overload new(x, y, w, h, image: img, offset: off)
30
- # pos: [x, y], size: [w, h], offset: [offset.x, offset.x]
42
+ # @overload new(x, y, image: img, offset: off, shape: shp)
43
+ # pos: [x, y], size: [image.width, image.height], offset: [offset.x, offset.x]
31
44
  # @param [Numeric] x x of the sprite position
32
45
  # @param [Numeric] y y of the sprite position
33
- # @param [Numeric] w width of the sprite
34
- # @param [Numeric] h height of the sprite
35
46
  # @param [Image] img sprite image
36
47
  # @param [Vector] off offset of the sprite image
48
+ # @param [Shape] shp shape of the sprite for physics calculations
49
+ #
50
+ # @overload new(x, y, shape: shp)
51
+ # pos: [x, y], size: [shape.width, shape.height]
52
+ # @param [Numeric] x x of the sprite position
53
+ # @param [Numeric] y y of the sprite position
54
+ # @param [Shape] shp shape of the sprite for physics calculations
37
55
  #
38
56
  def initialize(
39
- x = 0, y = 0, w = nil, h = nil, image: nil, offset: nil,
57
+ x = 0, y = 0, w = nil, h = nil, image: nil, offset: nil, shape: nil,
40
58
  physics: true, context: nil)
41
59
 
42
- w ||= (image&.width || 0)
43
- h ||= (image&.height || 0)
60
+ w ||= (image&.width || shape&.width || 0)
61
+ h ||= (image&.height || shape&.height || 0)
44
62
  raise 'invalid size' unless w >= 0 && h >= 0
45
63
  raise 'invalid image' if image && !image.getInternal__.is_a?(Rays::Image)
64
+ raise 'invalid shape' if shape && !shape.getInternal__.is_a?(Reflex::Shape)
46
65
 
47
66
  @context__ = context || Context.context__
67
+ @shape__ = shape
48
68
  @view__ = SpriteView.new(
49
69
  self, x: x, y: y, w: w, h: h,
50
- physics: physics, density: 1, friction: 0, restitution: 0,
51
- back: :white)
70
+ shape: @shape__, physics: physics, back: :white)
71
+ @view__.set density: 1, friction: 0, restitution: 0
52
72
 
53
73
  self.image = image if image
54
74
  self.offset = offset if offset
@@ -878,6 +898,20 @@ module RubySketch
878
898
  @view__
879
899
  end
880
900
 
901
+ # @private
902
+ def draw__(c, x, y, w, h)
903
+ img, off = @image__, @offset__
904
+ if img && off
905
+ c.copy img, off.x, off.y, w, h, x, y, w, h
906
+ elsif img
907
+ c.image img, x, y
908
+ elsif @shape__
909
+ @shape__.draw__ c, x, y, w, h
910
+ else
911
+ c.rect x, y, w, h
912
+ end
913
+ end
914
+
881
915
  end# Sprite
882
916
 
883
917
 
@@ -891,7 +925,7 @@ module RubySketch
891
925
 
892
926
  attr_reader :sprite, :touches
893
927
 
894
- def initialize(sprite, *args, physics:, **kwargs, &block)
928
+ def initialize(sprite, *args, shape:, physics:, **kwargs, &block)
895
929
  @sprite = sprite
896
930
  super(*args, **kwargs, &block)
897
931
 
@@ -902,6 +936,7 @@ module RubySketch
902
936
  @pointersReleased = []
903
937
  @touches = []
904
938
 
939
+ self.shape = shape.getInternal__ if shape
905
940
  self.static = true if physics
906
941
  end
907
942
 
data/rubysketch.gemspec CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |s|
28
28
  s.add_runtime_dependency 'xot', '~> 0.1.39'
29
29
  s.add_runtime_dependency 'rucy', '~> 0.1.40'
30
30
  s.add_runtime_dependency 'beeps', '~> 0.1.42'
31
- s.add_runtime_dependency 'rays', '~> 0.1.44'
31
+ s.add_runtime_dependency 'rays', '~> 0.1.45'
32
32
  s.add_runtime_dependency 'reflexion', '~> 0.1.52'
33
33
  s.add_runtime_dependency 'processing', '~> 0.5.28'
34
34
 
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.5.31
4
+ version: 0.5.32
5
5
  platform: ruby
6
6
  authors:
7
7
  - xordog
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-24 00:00:00.000000000 Z
11
+ date: 2023-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xot
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.1.44
61
+ version: 0.1.45
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.1.44
68
+ version: 0.1.45
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: reflexion
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -165,6 +165,7 @@ files:
165
165
  - lib/rubysketch/easings.rb
166
166
  - lib/rubysketch/extension.rb
167
167
  - lib/rubysketch/helper.rb
168
+ - lib/rubysketch/shape.rb
168
169
  - lib/rubysketch/sound.rb
169
170
  - lib/rubysketch/sprite.rb
170
171
  - pod.rake