rubysketch 0.5.3 → 0.5.5
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/.github/workflows/utils.rb +2 -1
- data/ChangeLog.md +23 -0
- data/RubySketch.podspec +18 -5
- data/VERSION +1 -1
- data/examples/physics.rb +24 -0
- data/examples/sprite.rb +47 -0
- data/lib/rubysketch/all.rb +8 -3
- data/lib/rubysketch/context.rb +120 -17
- data/lib/rubysketch/extension.rb +1 -0
- data/lib/rubysketch/helper.rb +1 -0
- data/lib/rubysketch/sprite.rb +682 -60
- data/lib/rubysketch/window.rb +1 -0
- data/pod.rake +7 -5
- data/rubysketch.gemspec +6 -6
- data/test/helper.rb +0 -3
- data/test/test_sprite.rb +223 -8
- metadata +16 -18
- data/lib/rubysketch/graphics_context.rb +0 -37
- data/lib/rubysketch/sound.rb +0 -55
- data/test/test_sound.rb +0 -90
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11852910038d162e39601eb01056ee3b4161c4ac0576ac93aef87e25eed557ee
|
4
|
+
data.tar.gz: 6d978cf96d2e8d32df00477e77f03c645840bb70985f74e5d254ff5f47f5cd4c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0593125c1c609a1f1c38eb45631f558fcb525db85792335524a37718d306c770d12f12012d3ddf5752080318070eb139d8ece676fb436f5a10abd88af02b2c8b'
|
7
|
+
data.tar.gz: 2d78202eb29f9541886efc54ec44142caf1cbd192ff58e51a26af5d3a0b8cb242c80be05171013f215b698a01cd70b9878fb10a2364abb4259402c48f6ea8475
|
data/.github/workflows/utils.rb
CHANGED
@@ -20,8 +20,9 @@ def setup_dependencies(build: true, only: nil)
|
|
20
20
|
|
21
21
|
exts.each do |ext|
|
22
22
|
gem = RENAMES[ext.to_sym].then {|s| s || ext}
|
23
|
-
clone = "git clone --depth 1 https://github.com/xord/#{ext}.git ../#{ext}"
|
24
23
|
ver = gemspec[/add_runtime_dependency.*['"]#{gem}['"].*['"]\s*~>\s*([\d\.]+)\s*['"]/, 1]
|
24
|
+
opts = '-c advice.detachedHead=false --depth 1'
|
25
|
+
clone = "git clone #{opts} https://github.com/xord/#{ext}.git ../#{ext}"
|
25
26
|
|
26
27
|
# 'rake subtree:push' pushes all subrepos, so cloning by new tag
|
27
28
|
# often fails before tagging each new tag
|
data/ChangeLog.md
CHANGED
@@ -1,6 +1,29 @@
|
|
1
1
|
# rubysketch ChangeLog
|
2
2
|
|
3
3
|
|
4
|
+
## [v0.5.5] - 2023-05-08
|
5
|
+
|
6
|
+
- Add Sprite#draw()
|
7
|
+
- Add Sprite#angle accessor
|
8
|
+
- Add Sprite#pivot accessor
|
9
|
+
- Add Sprite#ox and Sprite#oy
|
10
|
+
- Add mousePressed, mouseReleased, mouseMoved, mouseDragged, mouseClicked, touchStarted, touchEnded, and touchMoved to Sprite class
|
11
|
+
- Add inspect() to classes
|
12
|
+
- Alias draw methods
|
13
|
+
- Sprite has density 1 by default
|
14
|
+
- Sprite is static by deault
|
15
|
+
- Add sprite.rb and physics.rb as an example
|
16
|
+
- Delete Sound class
|
17
|
+
- Remove wall collision by default
|
18
|
+
|
19
|
+
|
20
|
+
## [v0.5.4] - 2023-04-30
|
21
|
+
|
22
|
+
- Add Sprite#image=() and Sprite#offset=()
|
23
|
+
- gravity() takes vector by pixel
|
24
|
+
- Add documents for Sprite class and test it
|
25
|
+
|
26
|
+
|
4
27
|
## [v0.5.3] - 2023-04-22
|
5
28
|
|
6
29
|
- Depends on Beeps
|
data/RubySketch.podspec
CHANGED
@@ -23,11 +23,15 @@ Pod::Spec.new do |s|
|
|
23
23
|
incdirs = exts.map {|x| "#{root}/#{x}/include"}.concat %W[
|
24
24
|
#{root}/src
|
25
25
|
#{root}/beeps/vendor/stk/include
|
26
|
+
#{root}/beeps/vendor/AudioFile
|
27
|
+
#{root}/beeps/vendor/r8brain-free-src
|
28
|
+
#{root}/beeps/vendor/signalsmith-stretch
|
26
29
|
#{root}/rays/vendor/glm
|
27
30
|
#{root}/rays/vendor/clipper/cpp
|
28
31
|
#{root}/rays/vendor/poly2tri/poly2tri
|
29
32
|
#{root}/rays/vendor/splines-lib
|
30
|
-
#{root}/reflex/vendor/
|
33
|
+
#{root}/reflex/vendor/box2d/include
|
34
|
+
#{root}/reflex/vendor/box2d/src
|
31
35
|
${PODS_ROOT}/CRuby/CRuby/include
|
32
36
|
]
|
33
37
|
|
@@ -63,16 +67,25 @@ Pod::Spec.new do |s|
|
|
63
67
|
end
|
64
68
|
|
65
69
|
s.subspec "Beeps" do |spec|
|
66
|
-
spec.source_files = "beeps/src/*.cpp"
|
67
|
-
spec.
|
70
|
+
spec .source_files = "beeps/src/*.cpp"
|
71
|
+
spec.osx.source_files = "beeps/src/osx/*.{cpp,mm}"
|
72
|
+
spec.ios.source_files = "beeps/src/osx/*.{cpp,mm}"
|
73
|
+
spec.frameworks = %w[OpenAL AVFoundation]
|
68
74
|
|
69
75
|
spec.subspec "STK" do |sub|
|
70
76
|
sub.source_files = "beeps/vendor/stk/src/*.cpp"
|
71
|
-
sub.exclude_files = %
|
77
|
+
sub.exclude_files = %w[Tcp Udp Socket Thread Mutex InetWv Rt].map {|s|
|
72
78
|
"beeps/vendor/stk/src/#{s}*.cpp"
|
73
79
|
}
|
74
80
|
end
|
75
81
|
|
82
|
+
spec.subspec "R8BrainFreeSrc" do |sub|
|
83
|
+
sub.source_files = "beeps/vendor/r8brain-free-src/*.cpp"
|
84
|
+
sub.exclude_files = %w[example pffft_double/].map {|s|
|
85
|
+
"beeps/vendor/r8brain-free-src/#{s}*.cpp"
|
86
|
+
}
|
87
|
+
end
|
88
|
+
|
76
89
|
spec.subspec "Ext" do |ext|
|
77
90
|
ext.source_files = "beeps/ext/beeps/*.cpp"
|
78
91
|
end
|
@@ -108,7 +121,7 @@ Pod::Spec.new do |s|
|
|
108
121
|
spec.ios.frameworks = %w[CoreMotion]
|
109
122
|
|
110
123
|
spec.subspec "Box2D" do |sub|
|
111
|
-
sub.source_files = "reflex/vendor/
|
124
|
+
sub.source_files = "reflex/vendor/box2d/src/**/*.cpp"
|
112
125
|
end
|
113
126
|
|
114
127
|
spec.subspec "Ext" do |ext|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.5
|
data/examples/physics.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
%w[xot rucy beeps rays reflex processing rubysketch]
|
2
|
+
.map {|s| File.expand_path "../../#{s}/lib", __dir__}
|
3
|
+
.each {|s| $:.unshift s if !$:.include?(s) && File.directory?(s)}
|
4
|
+
|
5
|
+
require 'rubysketch'
|
6
|
+
using RubySketch
|
7
|
+
|
8
|
+
noStroke
|
9
|
+
gravity 0, 1000
|
10
|
+
|
11
|
+
sprites = []
|
12
|
+
ground = createSprite 0, height - 10, width, 10
|
13
|
+
|
14
|
+
draw do
|
15
|
+
background 100
|
16
|
+
sprite *sprites, ground
|
17
|
+
end
|
18
|
+
|
19
|
+
mousePressed do
|
20
|
+
sp = createSprite mouseX, mouseY, 20, 20
|
21
|
+
sp.dynamic = true
|
22
|
+
sp.restitution = 0.5
|
23
|
+
sprites << sp
|
24
|
+
end
|
data/examples/sprite.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
%w[xot rucy beeps rays reflex processing rubysketch]
|
2
|
+
.map {|s| File.expand_path "../../#{s}/lib", __dir__}
|
3
|
+
.each {|s| $:.unshift s if !$:.include?(s) && File.directory?(s)}
|
4
|
+
|
5
|
+
require 'rubysketch'
|
6
|
+
using RubySketch
|
7
|
+
|
8
|
+
sp = createSprite 100, 100, 50, 50
|
9
|
+
sp.angle += Math::PI * 0.2
|
10
|
+
|
11
|
+
red = 0
|
12
|
+
|
13
|
+
sp.update do
|
14
|
+
red = (red + 1) % 255
|
15
|
+
end
|
16
|
+
|
17
|
+
sp.draw do |&draw|
|
18
|
+
fill red, 200, 200
|
19
|
+
draw.call
|
20
|
+
fill 0
|
21
|
+
text :hello, 10, 20
|
22
|
+
end
|
23
|
+
|
24
|
+
sp.mousePressed do
|
25
|
+
p [:pressed, sp.mouseX, sp.mouseY, sp.mouseButton]
|
26
|
+
end
|
27
|
+
|
28
|
+
sp.mouseReleased do
|
29
|
+
p [:released, sp.mouseX, sp.mouseY, sp.mouseButton]
|
30
|
+
end
|
31
|
+
|
32
|
+
sp.mouseMoved do
|
33
|
+
p [:moved, sp.mouseX, sp.mouseY, sp.pmouseX, sp.pmouseY]
|
34
|
+
end
|
35
|
+
|
36
|
+
sp.mouseDragged do
|
37
|
+
p [:dragged, sp.mouseX, sp.mouseY, sp.pmouseX, sp.pmouseY]
|
38
|
+
end
|
39
|
+
|
40
|
+
sp.mouseClicked do
|
41
|
+
p [:clicked, sp.mouseX, sp.mouseY, sp.mouseButton]
|
42
|
+
end
|
43
|
+
|
44
|
+
draw do
|
45
|
+
background 0
|
46
|
+
sprite sp
|
47
|
+
end
|
data/lib/rubysketch/all.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'forwardable'
|
2
1
|
require 'beeps'
|
3
2
|
require 'processing/all'
|
4
3
|
|
@@ -7,6 +6,12 @@ require 'rubysketch/window'
|
|
7
6
|
require 'rubysketch/helper'
|
8
7
|
|
9
8
|
require 'rubysketch/sprite'
|
10
|
-
require 'rubysketch/sound'
|
11
|
-
require 'rubysketch/graphics_context'
|
12
9
|
require 'rubysketch/context'
|
10
|
+
|
11
|
+
|
12
|
+
module RubySketch
|
13
|
+
|
14
|
+
Vector = Processing::Vector
|
15
|
+
Image = Processing::Image
|
16
|
+
|
17
|
+
end# RubySketch
|
data/lib/rubysketch/context.rb
CHANGED
@@ -3,49 +3,152 @@ module RubySketch
|
|
3
3
|
|
4
4
|
class Context < Processing::Context
|
5
5
|
|
6
|
-
|
6
|
+
Sprite = RubySketch::Sprite
|
7
7
|
|
8
|
+
# @private
|
8
9
|
def initialize(window)
|
9
10
|
super
|
10
|
-
@
|
11
|
+
@layer__ = window.add_overlay SpriteLayer.new
|
11
12
|
end
|
12
13
|
|
14
|
+
# Creates a new sprite and add it to physics engine.
|
15
|
+
#
|
16
|
+
# @overload createSprite(image: img)
|
17
|
+
# pos: [0, 0], size: [image.width, image.height]
|
18
|
+
# @param [Image] img sprite image
|
19
|
+
#
|
20
|
+
# @overload createSprite(x, y, image: img)
|
21
|
+
# pos: [x, y], size: [image.width, image.height]
|
22
|
+
# @param [Numeric] x x of sprite position
|
23
|
+
# @param [Numeric] y y of sprite position
|
24
|
+
# @param [Image] img sprite image
|
25
|
+
#
|
26
|
+
# @overload createSprite(x, y, w, h)
|
27
|
+
# pos(x, y), size: [w, h]
|
28
|
+
# @param [Numeric] x x of sprite position
|
29
|
+
# @param [Numeric] y y of sprite position
|
30
|
+
# @param [Numeric] w width of sprite
|
31
|
+
# @param [Numeric] h height of sprite
|
32
|
+
#
|
33
|
+
# @overload createSprite(x, y, w, h, image: img, offset: off)
|
34
|
+
# pos: [x, y], size: [w, h], offset: [offset.x, offset.x]
|
35
|
+
# @param [Numeric] x x of sprite position
|
36
|
+
# @param [Numeric] y y of sprite position
|
37
|
+
# @param [Numeric] w width of sprite
|
38
|
+
# @param [Numeric] h height of sprite
|
39
|
+
# @param [Image] img sprite image
|
40
|
+
# @param [Vector] off offset of sprite image
|
41
|
+
#
|
13
42
|
def createSprite(*args, **kwargs)
|
14
|
-
addSprite Sprite.new(*args, **kwargs)
|
43
|
+
addSprite Sprite.new(*args, **kwargs, context: self)
|
15
44
|
end
|
16
45
|
|
46
|
+
# Adds the sprite to the physics engine.
|
47
|
+
#
|
48
|
+
# @param [Sprite] sprite sprite object
|
49
|
+
#
|
50
|
+
# @return [Sprite] added sprite
|
51
|
+
#
|
17
52
|
def addSprite(sprite)
|
18
|
-
@
|
53
|
+
@layer__.add sprite.getInternal__ if sprite
|
19
54
|
sprite
|
20
55
|
end
|
21
56
|
|
57
|
+
# Removes the sprite from the physics engine.
|
58
|
+
#
|
59
|
+
# @param [Sprite] sprite sprite object
|
60
|
+
#
|
61
|
+
# @return [Sprite] removed sprite
|
62
|
+
#
|
22
63
|
def removeSprite(sprite)
|
23
|
-
@
|
64
|
+
@layer__.remove sprite.getInternal__ if sprite
|
24
65
|
sprite
|
25
66
|
end
|
26
67
|
|
27
|
-
|
28
|
-
|
68
|
+
# Draws one or more sprites.
|
69
|
+
#
|
70
|
+
# @param [Array<Sprite>] sprites
|
71
|
+
#
|
72
|
+
# @return [nil] nil
|
73
|
+
#
|
74
|
+
def sprite(*sprites)
|
75
|
+
sprites.flatten! if sprites.first&.is_a? Array
|
76
|
+
sprites.each do |sp|
|
77
|
+
view, draw = sp.getInternal__, sp.instance_variable_get(:@drawBlock__)
|
78
|
+
f, degrees, pivot = view.frame, view.angle, view.pivot
|
79
|
+
if draw
|
80
|
+
push do
|
81
|
+
translate f.x + pivot.x * f.w, f.y + pivot.y * f.h
|
82
|
+
rotate fromDegrees__ degrees
|
83
|
+
translate -pivot.x * f.w, -pivot.y * f.h
|
84
|
+
draw.call {drawSprite__ sp, 0, 0, f.w, f.h}
|
85
|
+
end
|
86
|
+
elsif degrees == 0
|
87
|
+
drawSprite__ sp, f.x, f.y, f.w, f.h
|
88
|
+
else
|
89
|
+
pushMatrix do
|
90
|
+
translate f.x + pivot.x * f.w, f.y + pivot.y * f.h
|
91
|
+
rotate fromDegrees__ degrees
|
92
|
+
translate -pivot.x * f.w, -pivot.y * f.h
|
93
|
+
drawSprite__ sp, 0, 0, f.w, f.h
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
nil
|
98
|
+
end
|
99
|
+
|
100
|
+
alias drawSprite sprite
|
101
|
+
|
102
|
+
# @private
|
103
|
+
def drawSprite__(sp, x, y, w, h)
|
104
|
+
img, off = sp.image, sp.offset
|
105
|
+
if img && off
|
106
|
+
copy img, off.x, off.y, w, h, x, y, w, h
|
107
|
+
elsif img
|
108
|
+
image img, x, y
|
109
|
+
else
|
110
|
+
rect x, y, w, h
|
111
|
+
end
|
29
112
|
end
|
30
113
|
|
114
|
+
# Sets gravity for the physics engine.
|
115
|
+
#
|
116
|
+
# @overload gravity(vec)
|
117
|
+
# @param [Vector] vec gracity vector
|
118
|
+
#
|
119
|
+
# @overload gravity(ary)
|
120
|
+
# @param [Array<Numeric>] ary gravityX, gravityY
|
121
|
+
#
|
122
|
+
# @overload gravity(x, y)
|
123
|
+
# @param [Numeric] x x of gravity vector
|
124
|
+
# @param [Numeric] y y of gracity vector
|
125
|
+
#
|
31
126
|
def gravity(*args)
|
32
127
|
x, y =
|
33
|
-
case args
|
34
|
-
when
|
128
|
+
case arg = args.first
|
129
|
+
when Vector then arg.array
|
130
|
+
when Array then arg
|
35
131
|
else args
|
36
132
|
end
|
37
|
-
@
|
38
|
-
v.gravity x * v.meter, y * v.meter
|
39
|
-
end
|
133
|
+
@layer__.gravity x, y
|
40
134
|
end
|
41
135
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
136
|
+
end# Context
|
137
|
+
|
138
|
+
|
139
|
+
# @private
|
140
|
+
class SpriteLayer < Reflex::View
|
141
|
+
|
142
|
+
def initialize(*a, **k, &b)
|
143
|
+
super
|
144
|
+
remove wall
|
46
145
|
end
|
47
146
|
|
48
|
-
|
147
|
+
def on_draw(e)
|
148
|
+
e.block
|
149
|
+
end
|
150
|
+
|
151
|
+
end# SpriteLayer
|
49
152
|
|
50
153
|
|
51
154
|
end# RubySketch
|
data/lib/rubysketch/extension.rb
CHANGED
data/lib/rubysketch/helper.rb
CHANGED