yeah 0.2.0 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
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