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 +4 -4
- data/ChangeLog.md +6 -0
- data/VERSION +1 -1
- data/examples/physics.rb +2 -1
- data/lib/rubysketch/all.rb +1 -0
- data/lib/rubysketch/context.rb +38 -31
- data/lib/rubysketch/shape.rb +123 -0
- data/lib/rubysketch/sprite.rb +51 -16
- data/rubysketch.gemspec +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 96ae60d6cddfaf8e77134a40cd35024a252278bc9b87755eb235ad6ef96151b5
|
4
|
+
data.tar.gz: c3bb6f454cfb2d5f6c9f872571842a82affe84e08bde8d7b68e4a95b46dd65a9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 38bbd11f37d0541d94ad2e06c468116e0f215561c6e53798a6adb1b5a1bba7a5b634b39415387f354f3e6907d4cb4685417a86c865d9e20f3fe1c2161ad353dd
|
7
|
+
data.tar.gz: 6f7664cd66b93f54897c0904a41b64ec0c79060c4d661a3b8f6858298c64ef0cbb6e7f4e8c9fe115ee50f7cbb00e02b75bee0949396e5514dd3b44d43146b9e8
|
data/ChangeLog.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.32
|
data/examples/physics.rb
CHANGED
data/lib/rubysketch/all.rb
CHANGED
data/lib/rubysketch/context.rb
CHANGED
@@ -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,
|
155
|
-
# pos
|
156
|
-
# @param [Numeric] x
|
157
|
-
# @param [Numeric] y
|
158
|
-
# @param [
|
159
|
-
# @param [
|
160
|
-
#
|
161
|
-
# @overload createSprite(x, y,
|
162
|
-
# pos: [x, y], size: [
|
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
|
-
#
|
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 {
|
232
|
+
draw.call {sp.draw__ self, 0, 0, f.w, f.h}
|
214
233
|
end
|
215
234
|
elsif degrees == 0
|
216
|
-
|
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
|
-
|
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
|
data/lib/rubysketch/sprite.rb
CHANGED
@@ -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,
|
23
|
-
# pos
|
24
|
-
# @param [Numeric] x
|
25
|
-
# @param [Numeric] y
|
26
|
-
# @param [
|
27
|
-
# @param [
|
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,
|
30
|
-
# pos: [x, y], size: [
|
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
|
-
|
51
|
-
|
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.
|
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.
|
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-
|
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.
|
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.
|
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
|