yeah 0.2.0 → 0.2.2
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 +23 -2
- data/README.md +10 -2
- data/lib/monkey/numeric.rb +6 -0
- data/lib/yeah/basic_physics.rb +11 -0
- data/lib/yeah/color.rb +12 -9
- data/lib/yeah/desktop.rb +45 -7
- data/lib/yeah/entity.rb +118 -16
- data/lib/yeah/game.rb +33 -9
- data/lib/yeah/map.rb +35 -2
- data/lib/yeah/rectangle.rb +8 -1
- data/lib/yeah/surface.rb +20 -13
- data/lib/yeah/vector.rb +48 -41
- data/lib/yeah.rb +6 -3
- metadata +6 -20
- data/Gemfile +0 -6
- data/Gemfile.lock +0 -60
- data/Guardfile +0 -6
- data/demo/happy_rectangle.rb +0 -44
- data/spec/color_spec.rb +0 -56
- data/spec/desktop_spec.rb +0 -123
- data/spec/entity_spec.rb +0 -70
- data/spec/game_spec.rb +0 -103
- data/spec/map_spec.rb +0 -20
- data/spec/rectangle_spec.rb +0 -71
- data/spec/spec_helper.rb +0 -13
- data/spec/surface_spec.rb +0 -141
- data/spec/vector_spec.rb +0 -197
- data/spec/yeah_spec.rb +0 -14
- data/tmp/rspec_guard_result +0 -1
- data/yeah-0.1.0.gem +0 -0
- data/yeah.gemspec +0 -18
data/spec/surface_spec.rb
DELETED
@@ -1,141 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Surface do
|
4
|
-
let(:klass) { described_class }
|
5
|
-
let(:vector) { Vector[Random.rand(48)+2, Random.rand(48)+2] }
|
6
|
-
let(:instance) { klass.new(vector) }
|
7
|
-
|
8
|
-
describe '::new' do
|
9
|
-
subject(:method) { klass.method :new }
|
10
|
-
|
11
|
-
it { method.call.size.should eq Vector[] }
|
12
|
-
|
13
|
-
it "accepts a Vector size" do
|
14
|
-
surface = method.call(vector)
|
15
|
-
surface.size.should eq vector
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe '#size' do
|
20
|
-
subject { instance.size }
|
21
|
-
|
22
|
-
it { should eq vector }
|
23
|
-
end
|
24
|
-
|
25
|
-
describe '#size=' do
|
26
|
-
subject(:method) { instance.method(:size=) }
|
27
|
-
|
28
|
-
it_behaves_like 'writer', Vector[20, 20]
|
29
|
-
end
|
30
|
-
|
31
|
-
describe '#data' do
|
32
|
-
subject(:method) { instance.method(:data) }
|
33
|
-
let(:data) { instance.data }
|
34
|
-
|
35
|
-
it "has length of #size.x * #size.y * 4" do
|
36
|
-
instance.size = instance.size * 2
|
37
|
-
expected_length = instance.size.x * instance.size.y * 4
|
38
|
-
data.length.should eq expected_length
|
39
|
-
end
|
40
|
-
|
41
|
-
it "is a series of \x00\x00\x00\x00 by default" do
|
42
|
-
pixels = data.unpack('H*')[0].scan(/.{8}/)
|
43
|
-
pixels.uniq.size.should eq 1
|
44
|
-
pixels.uniq.last.should eq "00000000"
|
45
|
-
end
|
46
|
-
|
47
|
-
it "accepts format param" do
|
48
|
-
instance.data = "\x00\x11\x22\x33"
|
49
|
-
method.call(:rgba).should eq "\x00\x11\x22\x33"
|
50
|
-
method.call(:bgra).should eq "\x22\x11\x00\x33"
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe '#data=' do
|
55
|
-
subject(:method) { instance.method(:data=) }
|
56
|
-
|
57
|
-
it "assigns hex data of length size.x * size.y * 4" do
|
58
|
-
data = "\xFF" * instance.size.x * instance.size.y * 4
|
59
|
-
method.call(data)
|
60
|
-
instance.data.should eq data
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
describe '#color_at' do
|
65
|
-
subject(:method) { instance.method(:color_at) }
|
66
|
-
|
67
|
-
it { expect { method.call }.to raise_error ArgumentError }
|
68
|
-
|
69
|
-
it "matches the color of the pixel at position" do
|
70
|
-
method.call(vector/2).should eq Color[0, 0, 0, 0]
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
describe '#fill' do
|
75
|
-
subject(:method) { instance.method(:fill) }
|
76
|
-
let(:color2) { Color[0, 255, 0, 255] }
|
77
|
-
|
78
|
-
it { expect { method.call }.to raise_error ArgumentError }
|
79
|
-
|
80
|
-
it "changes color of rectangular area with position args" do
|
81
|
-
method.call(color2, Vector[], vector/2)
|
82
|
-
instance.color_at(Vector[]).should eq color2
|
83
|
-
instance.color_at(vector/2).should eq color2
|
84
|
-
instance.color_at(vector/2 + Vector[1, 0]).should eq Color[0, 0, 0, 0]
|
85
|
-
instance.color_at(vector/2 + Vector[0, 1]).should eq Color[0, 0, 0, 0]
|
86
|
-
instance.data.length.should eq instance.size.x * instance.size.y * 4
|
87
|
-
end
|
88
|
-
|
89
|
-
it "changes color of entire surface without position args" do
|
90
|
-
method.call(color2)
|
91
|
-
instance.color_at(Vector[]).should eq color2
|
92
|
-
instance.color_at(vector/2).should eq color2
|
93
|
-
instance.color_at(vector-1).should eq color2
|
94
|
-
instance.data.length.should eq instance.size.x * instance.size.y * 4
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
describe '#draw' do
|
99
|
-
subject(:method) { instance.method(:draw) }
|
100
|
-
let(:color) { Color[0, Random.rand(255), Random.rand(255), 255] }
|
101
|
-
|
102
|
-
it { expect { method.call }.to raise_error ArgumentError }
|
103
|
-
|
104
|
-
it "draws surface at position" do
|
105
|
-
surface = Surface.new(Vector[1, 1])
|
106
|
-
surface.fill(color)
|
107
|
-
surface2 = Surface.new(Vector[10, 10])
|
108
|
-
surface2.draw(surface, Vector[1, 1])
|
109
|
-
|
110
|
-
surface2.color_at(Vector[0, 0]).should eq Color[0, 0, 0, 0]
|
111
|
-
surface2.color_at(Vector[1, 1]).should eq color
|
112
|
-
surface2.color_at(Vector[2, 2]).should eq Color[0, 0, 0, 0]
|
113
|
-
end
|
114
|
-
|
115
|
-
it "draws surface at (0, 0) by default" do
|
116
|
-
surface = Surface.new(Vector[1, 1])
|
117
|
-
surface.fill(color)
|
118
|
-
surface2 = Surface.new(Vector[10, 10])
|
119
|
-
surface2.draw(surface)
|
120
|
-
|
121
|
-
surface2.color_at(Vector[0, 0]).should eq color
|
122
|
-
surface2.color_at(Vector[1, 1]).should eq Color[0, 0, 0, 0]
|
123
|
-
end
|
124
|
-
|
125
|
-
it "draws a rectangular area" do
|
126
|
-
surface = Surface.new(Vector[3, 3])
|
127
|
-
surface.fill(color)
|
128
|
-
surface2 = Surface.new(Vector[5, 5])
|
129
|
-
surface2.draw(surface, Vector[1, 1])
|
130
|
-
|
131
|
-
surface2.color_at(Vector[1, 1]).should eq color
|
132
|
-
surface2.color_at(Vector[1, 3]).should eq color
|
133
|
-
surface2.color_at(Vector[3, 1]).should eq color
|
134
|
-
surface2.color_at(Vector[3, 3]).should eq color
|
135
|
-
surface2.color_at(Vector[0, 3]).should eq Color[0, 0, 0, 0]
|
136
|
-
surface2.color_at(Vector[3, 0]).should eq Color[0, 0, 0, 0]
|
137
|
-
surface2.color_at(Vector[4, 3]).should eq Color[0, 0, 0, 0]
|
138
|
-
surface2.color_at(Vector[3, 4]).should eq Color[0, 0, 0, 0]
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
data/spec/vector_spec.rb
DELETED
@@ -1,197 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Vector do
|
4
|
-
let(:klass) { described_class }
|
5
|
-
let(:arguments) { (1..3).map { Random.rand(100)+1 } }
|
6
|
-
let(:instance) { klass.new(*arguments) }
|
7
|
-
|
8
|
-
it { klass.should be_instance_of Class }
|
9
|
-
|
10
|
-
[:new, :[]].each do |method_name|
|
11
|
-
describe "::#{method_name}" do
|
12
|
-
subject(:method) { klass.method(method_name) }
|
13
|
-
|
14
|
-
it { method.call.should be_instance_of klass }
|
15
|
-
it { method.call.components.should eq [0, 0, 0] }
|
16
|
-
it { method.call(4, 5, 6).components.should eq [4, 5, 6] }
|
17
|
-
it { method.call(8, 9).components.should eq [8, 9, 0] }
|
18
|
-
it { method.call(7).components.should eq [7, 0, 0] }
|
19
|
-
|
20
|
-
it "complains with 4 arguments" do
|
21
|
-
expect { method.call(7, 8, 9, 10) }.
|
22
|
-
to raise_error ArgumentError, /too many arguments/
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe '#components' do
|
28
|
-
subject(:components) { instance.components }
|
29
|
-
|
30
|
-
it { should be_instance_of Array }
|
31
|
-
it { should have(3).elements }
|
32
|
-
it { components.each { |c| c.should be_kind_of Numeric } }
|
33
|
-
end
|
34
|
-
|
35
|
-
describe '#components=' do
|
36
|
-
it "assigns array of up to 3 elements and uses 0 for missing elements" do
|
37
|
-
instance.components = [4, 5, 6]
|
38
|
-
instance.components.should eq [4, 5, 6]
|
39
|
-
|
40
|
-
instance.components = [8, 9]
|
41
|
-
instance.components.should eq [8, 9, 0]
|
42
|
-
|
43
|
-
instance.components = []
|
44
|
-
instance.components.should eq [0, 0, 0]
|
45
|
-
end
|
46
|
-
|
47
|
-
it "complains with 4-element array" do
|
48
|
-
expect { instance.components = [7, 8, 9, 10] }.
|
49
|
-
to raise_error ArgumentError, /too many elements/
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe '#==' do
|
54
|
-
it { (instance == klass[*instance.components]).should eq true }
|
55
|
-
it { (instance == klass[*instance.components.reverse]).should eq false }
|
56
|
-
it { (instance == nil).should eq false }
|
57
|
-
end
|
58
|
-
|
59
|
-
describe '#[]' do
|
60
|
-
it { instance[0].should eq arguments[0] }
|
61
|
-
it { instance[1].should eq arguments[1] }
|
62
|
-
it { instance[2].should eq arguments[2] }
|
63
|
-
end
|
64
|
-
|
65
|
-
describe '#[]=' do
|
66
|
-
it "assigns n component" do
|
67
|
-
3.times do |i|
|
68
|
-
instance[i] = instance[i] + 5
|
69
|
-
instance[i].should eq arguments[i] + 5
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
describe '#+' do
|
75
|
-
it "adds Vector" do
|
76
|
-
sum = instance + instance
|
77
|
-
sum.components.each_with_index do |component, i|
|
78
|
-
component.should eq instance.components[i] * 2
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
it "adds Numeric" do
|
83
|
-
addend = Random.rand(100)
|
84
|
-
sum = instance + addend
|
85
|
-
|
86
|
-
sum.components.each_with_index do |component, i|
|
87
|
-
component.should eq instance.components[i] + addend
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
describe '#-' do
|
93
|
-
it "subtracts Vector" do
|
94
|
-
difference = instance - instance
|
95
|
-
difference.components.each do |component|
|
96
|
-
component.should eq 0
|
97
|
-
end
|
98
|
-
|
99
|
-
difference2 = difference - instance
|
100
|
-
difference2.components.each_with_index do |component, i|
|
101
|
-
component.should eq -instance.components[i]
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
it "subtracts Numeric" do
|
106
|
-
subtrahend = Random.rand(100)
|
107
|
-
difference = instance - subtrahend
|
108
|
-
|
109
|
-
difference.components.each_with_index do |component, i|
|
110
|
-
component.should eq instance.components[i] - subtrahend
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
describe '#*' do
|
116
|
-
it "multiplies by Vector" do
|
117
|
-
product = instance * instance
|
118
|
-
product.components.each_with_index do |component, i|
|
119
|
-
component.should eq instance.components[i] ** 2
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
it "multiplies by Numeric" do
|
124
|
-
multiple = Random.rand(100)
|
125
|
-
product = instance * multiple
|
126
|
-
|
127
|
-
product.components.each_with_index do |component, i|
|
128
|
-
component.should eq instance.components[i] * multiple
|
129
|
-
end
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
describe '#/' do
|
134
|
-
it "divides by Vector" do
|
135
|
-
quotient = instance / instance
|
136
|
-
quotient.components.each do |component|
|
137
|
-
component.should eq 1
|
138
|
-
end
|
139
|
-
|
140
|
-
quotient2 = instance / quotient
|
141
|
-
quotient2.components.each_with_index do |component, i|
|
142
|
-
component.should eq instance.components[i]
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
it "divides by Numeric" do
|
147
|
-
divisor = Random.rand(100) + 1
|
148
|
-
quotient = instance / divisor
|
149
|
-
|
150
|
-
quotient.components.each_with_index do |component, i|
|
151
|
-
component.should eq instance.components[i] / divisor
|
152
|
-
end
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
[
|
157
|
-
[:x, :width],
|
158
|
-
[:y, :height],
|
159
|
-
[:z, :depth]
|
160
|
-
].each_with_index do |method_name_set, i|
|
161
|
-
method_name_set.each do |method_name|
|
162
|
-
describe "##{method_name}" do
|
163
|
-
subject(:method) { instance.method(method_name) }
|
164
|
-
|
165
|
-
it { method.call.should eq instance[i] }
|
166
|
-
end
|
167
|
-
|
168
|
-
describe "#{method_name}=" do
|
169
|
-
subject(:method) { instance.method("#{method_name}=") }
|
170
|
-
|
171
|
-
it "assigns value" do
|
172
|
-
value = Random.rand(100)
|
173
|
-
method.call(value)
|
174
|
-
instance[i].should eq value
|
175
|
-
end
|
176
|
-
end
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
[:norm, :magnitude, :length, :distance, :speed].each do |method_name|
|
181
|
-
describe "##{method_name}" do
|
182
|
-
it { klass.new(3, 4).method(method_name).call.should eq 5 }
|
183
|
-
it { klass.new(6, 8).method(method_name).call.should eq 10 }
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
|
-
describe '#reset' do
|
188
|
-
it "sets components to 0" do
|
189
|
-
instance.reset
|
190
|
-
instance.components.should eq [0, 0, 0]
|
191
|
-
end
|
192
|
-
|
193
|
-
it "returns itself" do
|
194
|
-
instance.reset.should eq instance
|
195
|
-
end
|
196
|
-
end
|
197
|
-
end
|
data/spec/yeah_spec.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Yeah do
|
4
|
-
let(:modjul) { described_class }
|
5
|
-
|
6
|
-
it { modjul.should be_instance_of Module }
|
7
|
-
|
8
|
-
describe '::VERSION' do
|
9
|
-
subject { modjul::VERSION }
|
10
|
-
|
11
|
-
it { should be_instance_of String }
|
12
|
-
it { should match /[0-9]+\.[0-9]+\.[0-9]+/ }
|
13
|
-
end
|
14
|
-
end
|
data/tmp/rspec_guard_result
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
|
data/yeah-0.1.0.gem
DELETED
Binary file
|
data/yeah.gemspec
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
|
-
lib = File.expand_path('../lib/', __FILE__)
|
4
|
-
$:.unshift lib unless $:.include?(lib)
|
5
|
-
|
6
|
-
require 'yeah'
|
7
|
-
|
8
|
-
Gem::Specification.new do |s|
|
9
|
-
s.name = 'yeah'
|
10
|
-
s.version = Yeah::VERSION
|
11
|
-
s.summary = "The positive video game framework"
|
12
|
-
s.description = "Programming video games should have a positive impact on your health!"
|
13
|
-
s.authors = ["Artur Ostrega"]
|
14
|
-
s.email = 'skoofoo@gmail.com'
|
15
|
-
s.files = Dir.glob('**/*')
|
16
|
-
s.license = 'MIT'
|
17
|
-
s.homepage = 'https://github.com/skofo/yeah'
|
18
|
-
end
|