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.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yeah
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artur Ostrega
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-22 00:00:00.000000000 Z
11
+ date: 2013-11-13 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Programming video games should have a positive impact on your health!
14
14
  email: skoofoo@gmail.com
@@ -16,35 +16,20 @@ executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []
18
18
  files:
19
- - Gemfile
20
- - Guardfile
21
19
  - lib/yeah/map.rb
22
20
  - lib/yeah/game.rb
23
21
  - lib/yeah/color.rb
24
22
  - lib/yeah/surface.rb
25
23
  - lib/yeah/vector.rb
24
+ - lib/yeah/basic_physics.rb
26
25
  - lib/yeah/desktop.rb
27
26
  - lib/yeah/rectangle.rb
28
27
  - lib/yeah/entity.rb
28
+ - lib/monkey/numeric.rb
29
29
  - lib/yeah.rb
30
+ - LICENSE.txt
30
31
  - README.md
31
32
  - CHANGELOG.md
32
- - tmp/rspec_guard_result
33
- - Gemfile.lock
34
- - yeah.gemspec
35
- - LICENSE.txt
36
- - demo/happy_rectangle.rb
37
- - yeah-0.1.0.gem
38
- - spec/yeah_spec.rb
39
- - spec/color_spec.rb
40
- - spec/desktop_spec.rb
41
- - spec/game_spec.rb
42
- - spec/rectangle_spec.rb
43
- - spec/surface_spec.rb
44
- - spec/map_spec.rb
45
- - spec/spec_helper.rb
46
- - spec/entity_spec.rb
47
- - spec/vector_spec.rb
48
33
  homepage: https://github.com/skofo/yeah
49
34
  licenses:
50
35
  - MIT
@@ -70,3 +55,4 @@ signing_key:
70
55
  specification_version: 4
71
56
  summary: The positive video game framework
72
57
  test_files: []
58
+ has_rdoc:
data/Gemfile DELETED
@@ -1,6 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rspec'
4
- gem 'guard-rspec'
5
- gem 'libnotify'
6
- gem 'rubygame'
data/Gemfile.lock DELETED
@@ -1,60 +0,0 @@
1
- GEM
2
- remote: https://rubygems.org/
3
- specs:
4
- coderay (1.0.9)
5
- diff-lcs (1.2.4)
6
- ffi (1.9.0)
7
- formatador (0.2.4)
8
- guard (1.8.1)
9
- formatador (>= 0.2.4)
10
- listen (>= 1.0.0)
11
- lumberjack (>= 1.0.2)
12
- pry (>= 0.9.10)
13
- thor (>= 0.14.6)
14
- guard-rspec (3.0.2)
15
- guard (>= 1.8)
16
- rspec (~> 2.13)
17
- libnotify (0.8.1)
18
- ffi (>= 1.0.11)
19
- listen (1.2.2)
20
- rb-fsevent (>= 0.9.3)
21
- rb-inotify (>= 0.9)
22
- rb-kqueue (>= 0.2)
23
- lumberjack (1.0.4)
24
- method_source (0.8.1)
25
- nice-ffi (0.4)
26
- ffi (>= 0.5.0)
27
- pry (0.9.12.2)
28
- coderay (~> 1.0.5)
29
- method_source (~> 0.8)
30
- slop (~> 3.4)
31
- rake (10.1.0)
32
- rb-fsevent (0.9.3)
33
- rb-inotify (0.9.0)
34
- ffi (>= 0.5.0)
35
- rb-kqueue (0.2.0)
36
- ffi (>= 0.5.0)
37
- rspec (2.14.1)
38
- rspec-core (~> 2.14.0)
39
- rspec-expectations (~> 2.14.0)
40
- rspec-mocks (~> 2.14.0)
41
- rspec-core (2.14.5)
42
- rspec-expectations (2.14.2)
43
- diff-lcs (>= 1.1.3, < 2.0)
44
- rspec-mocks (2.14.3)
45
- ruby-sdl-ffi (0.4)
46
- nice-ffi (>= 0.2)
47
- rubygame (2.6.4)
48
- rake (>= 0.7.0)
49
- ruby-sdl-ffi (>= 0.1.0)
50
- slop (3.4.5)
51
- thor (0.18.1)
52
-
53
- PLATFORMS
54
- ruby
55
-
56
- DEPENDENCIES
57
- guard-rspec
58
- libnotify
59
- rspec
60
- rubygame
data/Guardfile DELETED
@@ -1,6 +0,0 @@
1
- guard :rspec, cli: "--color" do
2
- watch('spec/spec_helper.rb')
3
- watch(%r{^spec/.+_spec\.rb$})
4
- watch(%r{^lib(\/yeah)?\/(.+)\.rb$}) { |m| "spec/#{m[2]}_spec.rb" }
5
- end
6
-
@@ -1,44 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # Happy Rectangle
4
- # A barebones demo for Yeah.
5
-
6
- lib = File.expand_path('../../lib/', __FILE__)
7
- $:.unshift lib unless $:.include?(lib)
8
-
9
- require 'yeah'
10
- include Yeah
11
-
12
- class HappyRectangle < Entity
13
- def initialize(position)
14
- super position
15
- @visual = Rectangle.new(Vector[16, 24], Color[255, 255, 0, 255])
16
- @updates = 0
17
- @radius = 60
18
- @center = (Game.new.resolution - @visual.size) / 2
19
- end
20
-
21
- def update
22
- @updates += 1
23
- @position.x = @center.x + (Math.cos(@updates) * @radius).floor
24
- @position.y = @center.y + (Math.sin(@updates) * @radius).floor
25
- end
26
- end
27
-
28
- class HappyRectangleGame < Game
29
- def initialize
30
- super
31
- @updates = 0
32
- @entities << HappyRectangle.new(resolution/2)
33
- end
34
-
35
- def update
36
- super
37
- @updates += 1
38
- puts "#{@updates}/60 updates."
39
- abort if @updates == 60
40
- end
41
- end
42
-
43
- g = HappyRectangleGame.new
44
- g.start
data/spec/color_spec.rb DELETED
@@ -1,56 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Color do
4
- let(:klass) { described_class }
5
- let(:instance) { klass.new }
6
-
7
- it { klass.should be_kind_of Class }
8
-
9
- [:new, :[]].each do |method_name|
10
- describe "::#{method_name}" do
11
- subject(:method) { klass.method(method_name) }
12
-
13
- it { method.call.should be_instance_of klass }
14
- it { method.call.rgba_bytes.should eq [0, 0, 0, 255] }
15
- it { method.call([10, 20, 30, 40]).rgba_bytes.should eq [10, 20, 30, 40] }
16
- it { method.call([55, 25, 55, 25]).rgba_bytes.should eq [55, 25, 55, 25] }
17
- it { method.call(10, 20, 30, 40).rgba_bytes.should eq [10, 20, 30, 40] }
18
- it { method.call(55, 25, 55, 25).rgba_bytes.should eq [55, 25, 55, 25] }
19
- end
20
- end
21
-
22
- describe '#==' do
23
- subject(:method) { instance.method(:==).unbind }
24
-
25
- it "is true for itself" do
26
- color = klass[55, 54, 53, 52]
27
- method.bind(color).call(color).should eq true
28
- end
29
-
30
- it "is true for Color of same value" do
31
- value = (1..4).map { Random.rand(255) }
32
- method.bind(klass[value]).call(klass[value]).should eq true
33
- end
34
-
35
- it "is false for Color of different value" do
36
- value = (1..4).map { Random.rand(255) }
37
- method.bind(klass[value]).call(klass[value.reverse]).should eq false
38
- end
39
-
40
- it "is false for nil" do
41
- method.bind(klass[]).call(nil).should eq false
42
- end
43
- end
44
-
45
- describe '#rgba_bytes' do
46
- subject(:rgba_bytes) { instance.rgba_bytes }
47
-
48
- it { should eq [0, 0, 0, 255] }
49
- end
50
-
51
- describe '#rgba_bytes=' do
52
- subject(:method) { instance.method(:rgba_bytes=) }
53
-
54
- it_behaves_like 'writer', (1..4).map { Random.rand(255) }
55
- end
56
- end
data/spec/desktop_spec.rb DELETED
@@ -1,123 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Desktop do
4
- let(:klass) { described_class }
5
- let(:instance) { klass.new }
6
-
7
- it { klass.should be_instance_of Class }
8
-
9
- describe '::new' do
10
- subject(:method) { klass.method(:new) }
11
-
12
- it { method.call.resolution.should eq Vector[320, 240] }
13
-
14
- it "accepts Vector as resolution" do
15
- vector = Vector[Random.rand(250), Random.rand(250)]
16
- desktop = method.call(vector)
17
- desktop.resolution.should eq vector
18
- desktop.screen.size.should eq vector[0..1]
19
- end
20
-
21
- it { method.call.instance_variables.should include :@clock }
22
- it do
23
- clock = method.call.instance_variable_get(:@clock)
24
- clock.should be_instance_of Rubygame::Clock
25
- end
26
- end
27
-
28
- describe '#screen' do
29
- subject { instance.screen }
30
-
31
- it { should be_instance_of Rubygame::Screen }
32
- its(:size) { should eq [320, 240] }
33
- end
34
-
35
- describe '#resolution' do
36
- subject { instance.resolution }
37
-
38
- it { should eq Vector[320, 240] }
39
- end
40
-
41
- describe '#resolution=' do
42
- subject(:method) { instance.method(:resolution=) }
43
-
44
- it_behaves_like 'writer', Vector[Random.rand(250), Random.rand(250)]
45
-
46
- it "changes screen size" do
47
- resolution = Vector[Random.rand(250)+1, Random.rand(250)+1]
48
- method.call(resolution)
49
- instance.screen.size.should eq resolution.components[0..1]
50
- end
51
- end
52
-
53
- describe '#render' do
54
- subject(:method) { instance.method(:render) }
55
-
56
- it { expect { method.call }.to raise_error ArgumentError }
57
-
58
- it "renders a Surface" do
59
- surface = Surface.new(instance.resolution)
60
- surface.fill(Color[255, 255, 0, 255], Vector[0, 0], Vector[1, 1])
61
-
62
- screen_update_count = 0
63
- allow(instance.screen).to receive(:update) { screen_update_count += 1 }
64
-
65
- method.call(surface)
66
- instance.screen.get_at([0, 0]).should eq [255, 255, 0, 255]
67
- screen_update_count.should eq 1
68
- end
69
- end
70
-
71
- describe '#each_tick' do
72
- subject(:method) { instance.method(:each_tick) }
73
-
74
- it { expect { method.call }.to raise_error LocalJumpError }
75
-
76
- it "repeatedly calls passed block" do
77
- call_count = 0
78
-
79
- method.call do
80
- call_count += 1
81
- break if call_count == 5
82
- end
83
-
84
- call_count.should eq 5
85
- end
86
-
87
- it "calls Rubygame::Clock#tick per call" do
88
- call_count = 0
89
- tick_call_count = 0
90
- allow(instance.instance_variable_get(:@clock)).to receive(:tick) do
91
- tick_call_count += 1
92
- end
93
-
94
- method.call do
95
- break if tick_call_count == 5
96
- call_count += 1
97
- end
98
-
99
- call_count.should eq 5
100
- tick_call_count.should eq 5
101
- end
102
- end
103
-
104
- describe '#tickrate' do
105
- subject { instance.tickrate }
106
-
107
- its(:round) { should eq 30 }
108
- end
109
-
110
- describe '#tickrate=' do
111
- subject(:method) { instance.method(:tickrate=) }
112
-
113
- it_behaves_like 'writer', 60
114
-
115
- it "sets @clock#target_framerate" do
116
- tickrate = Random.rand(30) + 30
117
- clock = instance.instance_variable_get(:@clock)
118
- method.call(tickrate)
119
-
120
- clock.target_framerate.round.should eq tickrate
121
- end
122
- end
123
- end
data/spec/entity_spec.rb DELETED
@@ -1,70 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Entity do
4
- let(:klass) { described_class }
5
- let(:instance) { klass.new }
6
-
7
- it { klass.should be_instance_of Class }
8
-
9
- describe '::new' do
10
- subject(:method) { klass.method(:new) }
11
-
12
- it { method.call.should be_instance_of klass }
13
- it { method.call.position.should eq Vector[0, 0, 0] }
14
- it { method.call(Vector[2, 4, 8]).position.should eq Vector[2, 4, 8] }
15
- end
16
-
17
- describe '#position' do
18
- subject(:position) { instance.position }
19
-
20
- it { should be_instance_of Vector }
21
- it { position.components.should eq [0, 0, 0] }
22
- end
23
-
24
- describe '#position=' do
25
- subject(:method) { instance.method(:position=) }
26
-
27
- it_behaves_like 'writer', Vector[Random.rand(100)]
28
- end
29
-
30
- [:x, :y, :z].each do |method_name|
31
- describe "##{method_name}" do
32
- it "is #position.#{method_name}" do
33
- instance.position.send("#{method_name}=", Random.rand(100))
34
- instance.send(method_name).should eq instance.position.send(method_name)
35
- end
36
- end
37
-
38
- describe "##{method_name}=" do
39
- it "assigns #position.#{method_name}" do
40
- value = Random.rand(100)
41
- instance.send("#{method_name}=", value)
42
- instance.position.send(method_name).should eq value
43
- end
44
- end
45
- end
46
-
47
- describe '#visual' do
48
- subject { instance.visual }
49
-
50
- it { should eq nil }
51
- end
52
-
53
- describe '#visual=' do
54
- subject { instance.method(:visual=) }
55
-
56
- it_behaves_like 'writer', Rectangle.new(Vector[50, 50])
57
- end
58
-
59
- describe '#draw' do
60
- subject(:method) { instance.method(:draw) }
61
-
62
- its(:call) { should eq nil }
63
-
64
- it "calls #draw method of #visual if it exists" do
65
- instance.visual = Rectangle.new
66
- instance.visual.should receive(:draw)
67
- method.call
68
- end
69
- end
70
- end
data/spec/game_spec.rb DELETED
@@ -1,103 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Game do
4
- let(:klass) { described_class }
5
- let(:instance) { klass.new }
6
-
7
- it { klass.should be_instance_of Class }
8
-
9
- describe '#platform' do
10
- subject { instance.platform }
11
-
12
- it { should be_instance_of Desktop }
13
- end
14
-
15
- describe '#resolution' do
16
- subject { instance.resolution }
17
-
18
- it { should eq Vector[320, 240] }
19
- end
20
-
21
- describe '#resolution=' do
22
- subject { instance.method(:resolution=) }
23
-
24
- it_behaves_like 'writer', Vector[512, 384]
25
- end
26
-
27
- describe '#entities' do
28
- subject(:entities) { instance.entities }
29
-
30
- it { should eq [] }
31
- end
32
-
33
- describe '#entities=' do
34
- subject(:method) { instance.method(:entities=) }
35
-
36
- it_behaves_like 'writer', [Entity.new(Random.rand(10))]
37
- end
38
-
39
- describe '#update' do
40
- subject(:method) { instance.method(:update) }
41
-
42
- it "calls #update of each element in #entities" do
43
- instance.entities = (1..3).map { Entity.new }
44
- instance.entities.each { |e| e.should receive(:update) }
45
- method.call
46
- end
47
- end
48
-
49
- describe '#draw' do
50
- subject(:method) { instance.method(:draw) }
51
-
52
- it "clears #screen" do
53
- instance.screen.should receive(:fill).with(Color[0, 0, 0, 0])
54
- method.call
55
- end
56
-
57
- it "calls #draw of each element in #entities" do
58
- instance.entities = (1..3).map { Entity.new }
59
- instance.entities.each { |e| e.should receive(:draw) }
60
- method.call
61
- end
62
-
63
- it "draws entities on #screen" do
64
- color = Color[0, 255, 0, 255]
65
- entity = Entity.new
66
- entity.visual = Rectangle.new(Vector[1, 1], color)
67
- entity.position = Vector[Random.rand(10), Random.rand(10)]
68
- instance.entities << entity
69
- method.call
70
-
71
- instance.screen.color_at(entity.position).should eq color
72
- end
73
-
74
- it "writes to #platform#screen#struct#pixels" do
75
- pixels = instance.platform.screen.send(:struct).pixels
76
- pixel_data = pixels.read_string(instance.screen.data.length)
77
- pixel_data.should eq instance.screen.data
78
- end
79
-
80
- it "calls #platform#screen#update" do
81
- instance.platform.screen.should receive(:update)
82
- method.call
83
- end
84
- end
85
-
86
- describe '#screen' do
87
- subject(:screen) { instance.screen }
88
-
89
- it { should be_instance_of Surface }
90
- its(:size) { should eq instance.resolution }
91
- end
92
-
93
- describe '#start' do
94
- subject(:method) { instance.method(:start) }
95
-
96
- it "calls #platform#each_tick with a block with #update and #draw calls" do
97
- instance.platform.instance_eval "def each_tick; yield; end"
98
- instance.should receive(:update)
99
- instance.should receive(:draw)
100
- method.call
101
- end
102
- end
103
- end
data/spec/map_spec.rb DELETED
@@ -1,20 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Map do
4
- let(:klass) { described_class }
5
- let(:instance) { klass.new }
6
-
7
- it { klass.should be_instance_of Class }
8
-
9
- describe '#background' do
10
- subject(:background) { instance.background }
11
-
12
- it { should eq Color[] }
13
- end
14
-
15
- describe '#background=' do
16
- subject(:method) { instance.method(:background=) }
17
-
18
- it_behaves_like 'writer', Color[*[Random.rand(255)]*4]
19
- end
20
- end
@@ -1,71 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Rectangle do
4
- let(:klass) { described_class }
5
- let(:instance) { klass.new }
6
-
7
- it { klass.should be_kind_of Class }
8
-
9
- describe '::new' do
10
- subject(:method) { klass.method(:new) }
11
-
12
- it { method.call.should be_instance_of klass }
13
- it { method.call.size.should eq Vector[] }
14
- it { method.call.color.should eq Color[255, 255, 255, 255] }
15
-
16
- it "assigns Vector first argument as #size" do
17
- vector = Vector[Random.rand(40)]
18
- method.call(vector).size.should eq vector
19
- end
20
-
21
- it "assigns second argument Color as #color" do
22
- byte_array = (1..4).map { Random.rand(255) }
23
- color = Color[*byte_array]
24
- method.call(Vector[], color).color.should eq color
25
- end
26
- end
27
-
28
- describe '#size' do
29
- subject(:size) { instance.size }
30
-
31
- it { should eq Vector[] }
32
- end
33
-
34
- describe '#size=' do
35
- subject(:method) { instance.method(:size=) }
36
-
37
- it_behaves_like 'writer', Vector[Random.rand(40)]
38
- end
39
-
40
- describe '#color' do
41
- subject(:color) { instance.color }
42
-
43
- it { should eq Color[255, 255, 255, 255] }
44
- end
45
-
46
- describe '#color=' do
47
- subject(:method) { instance.method(:color=) }
48
-
49
- it_behaves_like 'writer', Color[*[Random.rand(255)]*4]
50
- end
51
-
52
- describe '#draw' do
53
- subject(:method) { instance.method(:draw) }
54
-
55
- its(:call) { should be_instance_of Surface }
56
-
57
- it "matches size" do
58
- instance.size = Vector[Random.rand(49)+1, 50]
59
- method.call.size.should eq instance.size
60
- end
61
-
62
- it "matches color" do
63
- instance.size = Vector[10, 10]
64
- instance.color = Color[*[Random.rand(255)]*4]
65
- surface = method.call
66
- surface.color_at(Vector[]).should eq instance.color
67
- surface.color_at(instance.size/2).should eq instance.color
68
- surface.color_at(instance.size-Vector[1, 1]).should eq instance.color
69
- end
70
- end
71
- end
data/spec/spec_helper.rb DELETED
@@ -1,13 +0,0 @@
1
- require 'yeah'
2
- include Yeah
3
-
4
- shared_examples 'writer' do |value|
5
- it "assigns its reader" do
6
- writer = subject
7
- reader_name = writer.name[0..-2].to_sym
8
- reader = writer.receiver.method(reader_name)
9
-
10
- writer.call(value)
11
- reader.call.should eq value
12
- end
13
- end