particlefx2d 0.3.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 +7 -0
- data/.gitignore +14 -0
- data/.rspec +3 -0
- data/.rubocop.yml +21 -0
- data/.ruby-version +1 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +25 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +67 -0
- data/LICENSE.txt +21 -0
- data/README.md +174 -0
- data/Rakefile +19 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/example/images/fx_blue_swirling_smoke.png +0 -0
- data/example/images/fx_square_burst.png +0 -0
- data/example/images/fx_white_red_smoke.png +0 -0
- data/example/ruby2d/fx_blue_swirling_smoke.rb +39 -0
- data/example/ruby2d/fx_square_burst.rb +41 -0
- data/example/ruby2d/fx_white_red_smoke.rb +37 -0
- data/lib/particlefx2d/emitter.rb +163 -0
- data/lib/particlefx2d/images/particle.png +0 -0
- data/lib/particlefx2d/particle.rb +173 -0
- data/lib/particlefx2d/private/color.rb +88 -0
- data/lib/particlefx2d/private/vector2.rb +85 -0
- data/lib/particlefx2d/renderer.rb +34 -0
- data/lib/particlefx2d/renderer_factory.rb +37 -0
- data/lib/particlefx2d/ruby2d/canvas_renderer_factory.rb +63 -0
- data/lib/particlefx2d/ruby2d/particle_circle.rb +38 -0
- data/lib/particlefx2d/ruby2d/particle_image.rb +45 -0
- data/lib/particlefx2d/ruby2d/shape_renderer.rb +52 -0
- data/lib/particlefx2d/ruby2d/shape_renderer_factory.rb +30 -0
- data/lib/particlefx2d/version.rb +6 -0
- data/lib/particlefx2d.rb +9 -0
- data/lib/particlefx_ruby2d.rb +14 -0
- data/particlefx2d.gemspec +32 -0
- data/sig/particlefx2d.rbs +4 -0
- data/spec/spec_helper.rb +15 -0
- data/spec/unit/particlefx2d_spec.rb +7 -0
- metadata +170 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'shape_renderer'
|
4
|
+
|
5
|
+
module ParticleFX2D
|
6
|
+
module Ruby2D
|
7
|
+
#
|
8
|
+
# A particle shape that is based on the Ruby2D _Image_.
|
9
|
+
class ParticleImage < ::Ruby2D::Image
|
10
|
+
include ShapeRenderer
|
11
|
+
|
12
|
+
# This class method is used to identify the image file to load.
|
13
|
+
# Create a subclass and override this method to define your own
|
14
|
+
# particle shapes based on image files.
|
15
|
+
def self.image_path
|
16
|
+
"#{File.dirname(__FILE__)}/../images/particle.png"
|
17
|
+
end
|
18
|
+
|
19
|
+
# Called by the emitter for each particle that it manages. Creates an instance
|
20
|
+
# of _ParticleImage_ using #image_path to obtain the file to load as image and
|
21
|
+
# intialized with the particle's position, size and colour.
|
22
|
+
#
|
23
|
+
# @param [ParticleFX2D::Particle] particle
|
24
|
+
#
|
25
|
+
def self.for(particle)
|
26
|
+
s = ParticleImage.new image_path, width: particle.size, height: particle.size
|
27
|
+
s.remove
|
28
|
+
s
|
29
|
+
end
|
30
|
+
|
31
|
+
# Sets the images's position using the incoming centre coordinates
|
32
|
+
# offset by the shape's mid-size.
|
33
|
+
def center!(centre_x, centre_y)
|
34
|
+
self.x = centre_x - (width / 2)
|
35
|
+
self.y = centre_y - (height / 2)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Sets the image size using the particle size and calls #super
|
39
|
+
def draw_particle(particle)
|
40
|
+
self.width = self.height = particle.size
|
41
|
+
super
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../renderer_factory'
|
4
|
+
|
5
|
+
module ParticleFX2D
|
6
|
+
module Ruby2D
|
7
|
+
# The base definition for a Ruby2D shape-based renderer that can be peered to
|
8
|
+
# a particle managed by the ParticleFX2D _Emitter_. Include this when defining
|
9
|
+
# Ruby2D shape-specific classes to provide the Emitter to render
|
10
|
+
# the particle.
|
11
|
+
#
|
12
|
+
# This approach requires a shape per particle.
|
13
|
+
module ShapeRenderer
|
14
|
+
include ParticleFX2D::Renderer
|
15
|
+
|
16
|
+
# Show the particle. Used when a particle is activated.
|
17
|
+
def show_particle(_particle)
|
18
|
+
add
|
19
|
+
end
|
20
|
+
|
21
|
+
# Hide the particle. Used when a particle is deactivated.
|
22
|
+
def hide_particle(_particle)
|
23
|
+
remove
|
24
|
+
end
|
25
|
+
|
26
|
+
# Updates the shape's properties; no explicit drawing needed.
|
27
|
+
def draw_particle(particle)
|
28
|
+
center!(particle.x, particle.y)
|
29
|
+
color!(particle.color)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
# Set the shape's center position. Must be implemented per shape.
|
35
|
+
# @raise [StandardError] because this method is unimplemented.
|
36
|
+
def center!(_centre_x, _centre_y)
|
37
|
+
raise StandardError('unimplemented')
|
38
|
+
end
|
39
|
+
|
40
|
+
# Set the shape's color.
|
41
|
+
#
|
42
|
+
# @param [Object] particle_color A colour object with +r+, +g+, +b+, +a+ members,
|
43
|
+
# where each component is in the range [0.0..1.0].
|
44
|
+
def color!(particle_color)
|
45
|
+
color.r = particle_color.r
|
46
|
+
color.g = particle_color.g
|
47
|
+
color.b = particle_color.b
|
48
|
+
color.opacity = particle_color.opacity
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../renderer_factory'
|
4
|
+
|
5
|
+
module ParticleFX2D
|
6
|
+
module Ruby2D
|
7
|
+
#
|
8
|
+
# Use an instance of this class to provide
|
9
|
+
# an _Emitter_ with a renderer factory.
|
10
|
+
class ShapeRendererFactory
|
11
|
+
include RendererFactory
|
12
|
+
|
13
|
+
#
|
14
|
+
# Instantiate a shape renderer factory.
|
15
|
+
#
|
16
|
+
# @param [ShapeRenderer] renderer_class Specify the object that will be used to create
|
17
|
+
# the particle renderers. e.g. _ParticleCircle_.
|
18
|
+
def initialize(renderer_class)
|
19
|
+
@renderer_class = renderer_class
|
20
|
+
end
|
21
|
+
|
22
|
+
# Return a particle renderer.
|
23
|
+
#
|
24
|
+
# @return [Renderer] for each particle
|
25
|
+
def renderer_for(particle)
|
26
|
+
@renderer_class.for(particle)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/particlefx2d.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'particlefx2d'
|
4
|
+
require_relative 'particlefx2d/ruby2d/particle_circle'
|
5
|
+
require_relative 'particlefx2d/ruby2d/particle_image'
|
6
|
+
require_relative 'particlefx2d/ruby2d/shape_renderer_factory'
|
7
|
+
require_relative 'particlefx2d/ruby2d/canvas_renderer_factory'
|
8
|
+
|
9
|
+
module ParticleFX2D
|
10
|
+
# This module defines the Ruby2D-specific particle shapes
|
11
|
+
# that can be peered with ParticleFX2D's particle effects.
|
12
|
+
module Ruby2D
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'lib/particlefx2d/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = 'particlefx2d'
|
7
|
+
spec.version = ParticleFX2D::VERSION
|
8
|
+
spec.authors = ['nogginly']
|
9
|
+
spec.email = ['nogginly@icloud.com']
|
10
|
+
|
11
|
+
spec.summary = '2D particle effects API for use with any Ruby graphics API.'
|
12
|
+
spec.homepage = 'https://github.com/nogginly/particlefx2d'
|
13
|
+
spec.license = 'MIT'
|
14
|
+
spec.required_ruby_version = '>= 2.7.0'
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split("\n")
|
17
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
|
+
spec.require_paths = ['lib']
|
19
|
+
|
20
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
21
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
22
|
+
|
23
|
+
# no deployment dependencies
|
24
|
+
|
25
|
+
# development
|
26
|
+
spec.add_development_dependency 'rake'
|
27
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
28
|
+
spec.add_development_dependency 'rubocop'
|
29
|
+
spec.add_development_dependency 'rubocop-rake'
|
30
|
+
spec.add_development_dependency 'rubocop-rspec'
|
31
|
+
spec.add_development_dependency 'yard'
|
32
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'particlefx2d'
|
4
|
+
|
5
|
+
RSpec.configure do |config|
|
6
|
+
# Enable flags like --only-failures and --next-failure
|
7
|
+
config.example_status_persistence_file_path = '.rspec_status'
|
8
|
+
|
9
|
+
# Disable RSpec exposing methods globally on `Module` and `main`
|
10
|
+
config.disable_monkey_patching!
|
11
|
+
|
12
|
+
config.expect_with :rspec do |c|
|
13
|
+
c.syntax = :expect
|
14
|
+
end
|
15
|
+
end
|
metadata
ADDED
@@ -0,0 +1,170 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: particlefx2d
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- nogginly
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-04-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rubocop
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop-rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop-rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: yard
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
description:
|
98
|
+
email:
|
99
|
+
- nogginly@icloud.com
|
100
|
+
executables: []
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files: []
|
103
|
+
files:
|
104
|
+
- ".gitignore"
|
105
|
+
- ".rspec"
|
106
|
+
- ".rubocop.yml"
|
107
|
+
- ".ruby-version"
|
108
|
+
- ".yardopts"
|
109
|
+
- CHANGELOG.md
|
110
|
+
- CODE_OF_CONDUCT.md
|
111
|
+
- Gemfile
|
112
|
+
- Gemfile.lock
|
113
|
+
- LICENSE.txt
|
114
|
+
- README.md
|
115
|
+
- Rakefile
|
116
|
+
- bin/console
|
117
|
+
- bin/setup
|
118
|
+
- example/images/fx_blue_swirling_smoke.png
|
119
|
+
- example/images/fx_square_burst.png
|
120
|
+
- example/images/fx_white_red_smoke.png
|
121
|
+
- example/ruby2d/fx_blue_swirling_smoke.rb
|
122
|
+
- example/ruby2d/fx_square_burst.rb
|
123
|
+
- example/ruby2d/fx_white_red_smoke.rb
|
124
|
+
- lib/particlefx2d.rb
|
125
|
+
- lib/particlefx2d/emitter.rb
|
126
|
+
- lib/particlefx2d/images/particle.png
|
127
|
+
- lib/particlefx2d/particle.rb
|
128
|
+
- lib/particlefx2d/private/color.rb
|
129
|
+
- lib/particlefx2d/private/vector2.rb
|
130
|
+
- lib/particlefx2d/renderer.rb
|
131
|
+
- lib/particlefx2d/renderer_factory.rb
|
132
|
+
- lib/particlefx2d/ruby2d/canvas_renderer_factory.rb
|
133
|
+
- lib/particlefx2d/ruby2d/particle_circle.rb
|
134
|
+
- lib/particlefx2d/ruby2d/particle_image.rb
|
135
|
+
- lib/particlefx2d/ruby2d/shape_renderer.rb
|
136
|
+
- lib/particlefx2d/ruby2d/shape_renderer_factory.rb
|
137
|
+
- lib/particlefx2d/version.rb
|
138
|
+
- lib/particlefx_ruby2d.rb
|
139
|
+
- particlefx2d.gemspec
|
140
|
+
- sig/particlefx2d.rbs
|
141
|
+
- spec/spec_helper.rb
|
142
|
+
- spec/unit/particlefx2d_spec.rb
|
143
|
+
homepage: https://github.com/nogginly/particlefx2d
|
144
|
+
licenses:
|
145
|
+
- MIT
|
146
|
+
metadata:
|
147
|
+
homepage_uri: https://github.com/nogginly/particlefx2d
|
148
|
+
rubygems_mfa_required: 'true'
|
149
|
+
post_install_message:
|
150
|
+
rdoc_options: []
|
151
|
+
require_paths:
|
152
|
+
- lib
|
153
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - ">="
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: 2.7.0
|
158
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
|
+
requirements:
|
160
|
+
- - ">="
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: '0'
|
163
|
+
requirements: []
|
164
|
+
rubygems_version: 3.3.7
|
165
|
+
signing_key:
|
166
|
+
specification_version: 4
|
167
|
+
summary: 2D particle effects API for use with any Ruby graphics API.
|
168
|
+
test_files:
|
169
|
+
- spec/spec_helper.rb
|
170
|
+
- spec/unit/particlefx2d_spec.rb
|