metro 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/README.md +29 -13
  2. data/changelog.md +10 -0
  3. data/lib/core_ext/numeric.rb +59 -0
  4. data/lib/gosu_ext/gosu_constants.rb +53 -0
  5. data/lib/locale/en.yml +16 -0
  6. data/lib/locale/locale.rb +1 -0
  7. data/lib/metro.rb +30 -16
  8. data/lib/metro/animation/after_interval_factory.rb +12 -0
  9. data/lib/metro/animation/animation_factory.rb +3 -2
  10. data/lib/metro/animation/has_animations.rb +3 -3
  11. data/lib/metro/animation/implicit_animation.rb +33 -19
  12. data/lib/metro/animation/{animation.rb → on_update_operation.rb} +6 -4
  13. data/lib/metro/animation/scene_animation.rb +16 -0
  14. data/lib/metro/events/control_definition.rb +11 -0
  15. data/lib/metro/events/controls.rb +42 -0
  16. data/lib/metro/events/event_relay.rb +49 -11
  17. data/lib/metro/events/has_events.rb +6 -5
  18. data/lib/metro/game.rb +17 -11
  19. data/lib/metro/game/dsl.rb +8 -0
  20. data/lib/metro/models/image.rb +3 -1
  21. data/lib/metro/models/key_value_coding.rb +38 -0
  22. data/lib/metro/models/label.rb +18 -3
  23. data/lib/metro/models/menu.rb +6 -5
  24. data/lib/metro/models/model.rb +11 -4
  25. data/lib/metro/models/rectangle.rb +28 -0
  26. data/lib/metro/scene.rb +76 -15
  27. data/lib/metro/scene_view/yaml_view.rb +11 -4
  28. data/lib/metro/scenes.rb +27 -3
  29. data/lib/metro/template_message.rb +33 -4
  30. data/lib/metro/transitions/fade_transition_scene.rb +59 -0
  31. data/lib/metro/transitions/scene_transitions.rb +30 -0
  32. data/lib/metro/transitions/transition_scene.rb +18 -0
  33. data/lib/metro/version.rb +1 -1
  34. data/lib/metro/window.rb +0 -2
  35. data/lib/templates/game/metro.tt +13 -0
  36. data/lib/templates/game/scenes/brand_scene.rb +10 -4
  37. data/lib/templates/game/scenes/brand_to_title_scene.rb +3 -3
  38. data/lib/templates/game/scenes/title_scene.rb +1 -1
  39. data/lib/templates/game/views/brand_to_title.yaml +2 -4
  40. data/lib/templates/game/views/title.yaml +2 -4
  41. data/lib/templates/message.erb +1 -1
  42. data/lib/templates/model.rb.erb +2 -2
  43. data/lib/templates/scene.rb.erb +3 -3
  44. data/metro.gemspec +1 -0
  45. data/spec/core_ext/numeric_spec.rb +78 -0
  46. data/spec/metro/models/key_value_coding_spec.rb +61 -0
  47. data/spec/metro/scene_views/yaml_view_spec.rb +38 -0
  48. metadata +44 -6
  49. data/lib/metro/error.rb +0 -21
@@ -0,0 +1,30 @@
1
+ require_relative 'transition_scene'
2
+
3
+ module Metro
4
+ module SceneTransitions
5
+ extend self
6
+
7
+ def insert_transition(scene,options)
8
+ return scene unless options.key?(:with)
9
+ generate_transition(name,scene,options)
10
+ end
11
+
12
+ alias_method :filter, :insert_transition
13
+
14
+ def generate_transition(name,next_scene,options)
15
+ transition = find_transition(name).new
16
+ transition.next_scene = next_scene
17
+ transition.options = options
18
+ transition
19
+ end
20
+
21
+ def find_transition(name)
22
+ supported_transitions[name]
23
+ end
24
+
25
+ def supported_transitions
26
+ Hash.new(FadeTransitionScene)
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,18 @@
1
+ module Metro
2
+ class TransitionScene < Scene
3
+
4
+ attr_accessor :next_scene, :previous_scene, :options
5
+
6
+ def prepare_transition_from(old_scene)
7
+ next_scene.prepare_transition_from(old_scene)
8
+ @previous_scene = old_scene
9
+ end
10
+
11
+ def prepare_transition_to(new_scene)
12
+ previous_scene.prepare_transition_to(new_scene)
13
+ end
14
+
15
+ end
16
+ end
17
+
18
+ require_relative 'fade_transition_scene'
data/lib/metro/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Metro
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  WEBSITE = "https://github.com/burtlo/metro"
4
4
  CONTACT_EMAILS = ["franklin.webber@gmail.com"]
5
5
 
data/lib/metro/window.rb CHANGED
@@ -1,5 +1,3 @@
1
- require_relative 'scenes'
2
-
3
1
  module Metro
4
2
 
5
3
  #
@@ -42,6 +42,19 @@ resolution 640, 480
42
42
  #
43
43
  first_scene :brand
44
44
 
45
+
46
+ #
47
+ # Defines controls which are meta events. They can be used group button
48
+ # events together under a single name so that you can use it throughout
49
+ # the game and also will allow for players of your game to redefine the
50
+ # keys.
51
+ #
52
+ controls do
53
+ # NAME_OF_EVENT, is: EVENT TYPE, with: [ ALL_EVENTS ]
54
+ confirmation is: :button_up, with: [ KbReturn, KbEnter, KbSpace, GpButton0 ]
55
+ cancel is: :button_up, with: [ KbEscape, KbDelete ]
56
+ end
57
+
45
58
  #
46
59
  # Enable debug mode for the game. Which could
47
60
  # allow different logic. When this is set the
@@ -2,12 +2,18 @@ class BrandScene < Metro::Scene
2
2
 
3
3
  draws :brand
4
4
 
5
- event :on_up, Gosu::KbEscape, Gosu::KbSpace, Gosu::GpButton0 do
5
+ after 2.seconds do
6
+ transition_to_brand_to_title
7
+ end
8
+
9
+ event :confirmation do
10
+ transition_to_brand_to_title
11
+ end
6
12
 
7
- animate actor: brand, to: { alpha: 0 }, interval: 60 do
13
+ def transition_to_brand_to_title
14
+ animate :brand, to: { alpha: 0 }, interval: 1.second do
8
15
  transition_to :brand_to_title
9
16
  end
10
-
11
17
  end
12
18
 
13
- end
19
+ end
@@ -2,11 +2,11 @@ class BrandToTitleScene < Metro::Scene
2
2
 
3
3
  draws :title
4
4
 
5
- animate actor: :title, to: { alpha: 255 }, interval: 120 do
6
- transition_to :title
5
+ animate :title, to: { alpha: 255 }, interval: 2.seconds do
6
+ transition_to :title, with: :fade
7
7
  end
8
8
 
9
- event :on_up, Gosu::KbEscape do
9
+ event :cancel do
10
10
  transition_to :title
11
11
  end
12
12
 
@@ -4,7 +4,7 @@ class TitleScene < Metro::Scene
4
4
 
5
5
  draw :menu, options: [ 'Start Game', 'Exit' ]
6
6
 
7
- event :on_up, Gosu::KbEscape do
7
+ event :on_up, KbEscape do
8
8
  exit
9
9
  end
10
10
 
@@ -1,9 +1,7 @@
1
1
  title:
2
2
  model: metro::models::label
3
3
  text: "#{Metro::Game.name}"
4
- x: 120
5
- y: 40
6
- x-factor: 2
7
- y-factor: 2
4
+ size: 40
5
+ y: 100
8
6
  color: rgba(255,255,255,0.0)
9
7
 
@@ -1,10 +1,8 @@
1
1
  title:
2
2
  model: metro::models::label
3
3
  text: "#{Metro::Game.name}"
4
- x: 120
5
- y: 40
6
- x-factor: 2
7
- y-factor: 2
4
+ size: 40
5
+ y: 100
8
6
  color: rgba(255,255,255,1.0)
9
7
  menu:
10
8
  model: metro::models::menu
@@ -15,7 +15,7 @@
15
15
 
16
16
  ## Details
17
17
 
18
- <%= message.details %>
18
+ <%= message.actions %>
19
19
  <% end %>
20
20
  ## Contact
21
21
 
@@ -11,11 +11,11 @@ class <%= model_name %> < Metro::Model
11
11
  #
12
12
  # @example Registering the keyboard up key to execute the method `jump`
13
13
  #
14
- # event :on_up, Gosu::KbEscape, do: :jump
14
+ # event :on_up, KbEscape, do: :jump
15
15
  #
16
16
  # @example Registering for button held events that would build the model's acceleration
17
17
  #
18
- # event :on_hold, Gosu::KbRight, Gosu::GpRight do
18
+ # event :on_hold, KbRight, Gosu::GpRight do
19
19
  # acceleration += 1
20
20
  # end
21
21
  #
@@ -29,7 +29,7 @@ class <%= scene_class_name %> < Metro::Scene
29
29
  #
30
30
  # @example of the title being moved to a new y position and the alpha level
31
31
  #
32
- # animate actor: :title, to: { y: 80, alpha: 50 }, interval: 120 do
32
+ # animate :title, to: { y: 80, alpha: 50 }, interval: 120 do
33
33
  # puts "Done Animating!"
34
34
  # end
35
35
  #
@@ -45,11 +45,11 @@ class <%= scene_class_name %> < Metro::Scene
45
45
  #
46
46
  # @example Registering the keyboard up key to execute the method `leave_scene`
47
47
  #
48
- # event :on_up, Gosu::KbEscape, do: :leave_scene
48
+ # event :on_up, KbEscape, do: :leave_scene
49
49
  #
50
50
  # @example Registering for button held events that would move an actor named `player`
51
51
  #
52
- # event :on_hold, Gosu::KbRight, Gosu::GpRight do
52
+ # event :on_hold, KbRight, Gosu::GpRight do
53
53
  # title.alpha = title.alpha - 1
54
54
  # end
55
55
  # Keystroke and Game Event Reference
data/metro.gemspec CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |gem|
27
27
  gem.add_dependency 'gosu', '~> 0.7'
28
28
  gem.add_dependency 'thor', '~> 0.16.0'
29
29
  gem.add_dependency 'sender', '~> 1.5.10'
30
+ gem.add_dependency 'i18n', '~> 0.6.1'
30
31
  gem.add_development_dependency 'rspec', '~> 2.11'
31
32
 
32
33
  gem.files = `git ls-files`.split($/)
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ describe Numeric do
4
+
5
+ before :each do
6
+ Numeric.tick_interval = 16.666666
7
+ end
8
+
9
+ describe "#tick(s)" do
10
+ context "when using an Integer" do
11
+ subject { 60 }
12
+ let(:expected_value) { 60 }
13
+
14
+ its(:tick) { should eq expected_value }
15
+ its(:ticks) { should eq expected_value }
16
+ end
17
+
18
+ context "when using a Float" do
19
+ subject { 70.1 }
20
+ let(:expected_value) { 70.1 }
21
+
22
+ its(:tick) { should eq expected_value }
23
+ its(:ticks) { should eq expected_value }
24
+ end
25
+ end
26
+
27
+ describe "#second(s)" do
28
+
29
+ context "when using an Integer" do
30
+ context "when the tick interval has not been set" do
31
+ subject { 2 }
32
+ let(:expected_value) { 120 }
33
+
34
+ its(:second) { should eq expected_value }
35
+ its(:seconds) { should eq expected_value }
36
+ its(:sec) { should eq expected_value }
37
+ its(:secs) { should eq expected_value }
38
+ end
39
+
40
+ context "when the tick interval has been set to 33.3333" do
41
+ before :each do
42
+ Numeric.tick_interval = 33.333333
43
+ end
44
+
45
+ subject { 2 }
46
+ let(:expected_value) { 60 }
47
+
48
+ its(:second) { should eq expected_value }
49
+ its(:seconds) { should eq expected_value }
50
+ end
51
+ end
52
+
53
+ context "when using a Float" do
54
+ context "when the tick interval has not been set" do
55
+ subject { 2.5 }
56
+ let(:expected_value) { 150 }
57
+
58
+ its(:second) { should eq expected_value }
59
+ its(:seconds) { should eq expected_value }
60
+ its(:sec) { should eq expected_value }
61
+ its(:secs) { should eq expected_value }
62
+ end
63
+
64
+ context "when the tick interval has been set" do
65
+ before :each do
66
+ Numeric.tick_interval = 33.333333
67
+ end
68
+
69
+ subject { 3.5 }
70
+ let(:expected_value) { 105 }
71
+
72
+ its(:second) { should eq expected_value }
73
+ its(:seconds) { should eq expected_value }
74
+ end
75
+ end
76
+ end
77
+
78
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe Metro::KeyValueCoding do
4
+
5
+ class KeyValueCodingObject
6
+ include Metro::KeyValueCoding
7
+ attr_accessor :description, :properties
8
+ end
9
+
10
+ subject do
11
+ object = KeyValueCodingObject.new
12
+
13
+ object.description = "Describe Yourself"
14
+ object.properties = { height: 100, width: 50 }
15
+
16
+ object
17
+ end
18
+
19
+ describe "#get" do
20
+ context "when given a key with a single attribute" do
21
+ let(:key) { :description }
22
+ let(:expected_value) { "Describe Yourself" }
23
+
24
+ it "should return the value" do
25
+ subject.get(key).should eq expected_value
26
+ end
27
+ end
28
+
29
+ context "when given a key with multiple attributes" do
30
+ let(:key) { "properties.keys" }
31
+ let(:expected_value) { [ :height, :width ] }
32
+
33
+ it "should return the expected value" do
34
+ subject.get(key).should eq expected_value
35
+ end
36
+ end
37
+ end
38
+
39
+ describe "#set" do
40
+ context "when given a key with a single attribute" do
41
+ let(:key) { :description }
42
+ let(:expected_value) { "New Description" }
43
+
44
+ it "should set the value" do
45
+ subject.set(key,expected_value)
46
+ subject.get(key).should eq expected_value
47
+ end
48
+ end
49
+
50
+ context "when given a key with multiple attributes" do
51
+ let(:key) { "properties.default" }
52
+ let(:expected_value) { 0 }
53
+
54
+ it "should set the value" do
55
+ subject.set(key,expected_value)
56
+ subject.get(key).should eq expected_value
57
+ end
58
+ end
59
+ end
60
+
61
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe Metro::SceneView::YAMLView do
4
+
5
+ subject { described_class }
6
+ let(:view_name) { "example" }
7
+
8
+ before do
9
+ File.stub(:exists?).and_return(false)
10
+ end
11
+
12
+ describe ".exists?" do
13
+ context "when a view file exists with the extension YAML" do
14
+ before do
15
+ File.stub(:exists?).with(filepath_that_exists).and_return(true)
16
+ end
17
+
18
+ let(:filepath_that_exists) { "#{view_name}.yaml" }
19
+
20
+ it "should return true" do
21
+ subject.exists?(view_name).should be_true
22
+ end
23
+
24
+ end
25
+ context "when a view file exists with the extension YML" do
26
+ before :each do
27
+ File.stub(:exists?).with(filepath_that_exists).and_return(true)
28
+ end
29
+
30
+ let(:filepath_that_exists) { "#{view_name}.yml" }
31
+
32
+ it "should return true" do
33
+ subject.exists?(view_name).should be_true
34
+ end
35
+ end
36
+ end
37
+
38
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-27 00:00:00.000000000 Z
12
+ date: 2012-10-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: gosu
@@ -59,6 +59,22 @@ dependencies:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: 1.5.10
62
+ - !ruby/object:Gem::Dependency
63
+ name: i18n
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 0.6.1
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 0.6.1
62
78
  - !ruby/object:Gem::Dependency
63
79
  name: rspec
64
80
  requirement: !ruby/object:Gem::Requirement
@@ -99,15 +115,22 @@ files:
99
115
  - lib/commands/generate_scene.rb
100
116
  - lib/commands/generate_view.rb
101
117
  - lib/commands/thor.rb
118
+ - lib/core_ext/numeric.rb
102
119
  - lib/core_ext/string.rb
103
120
  - lib/gosu_ext/color.rb
121
+ - lib/gosu_ext/gosu_constants.rb
122
+ - lib/locale/en.yml
123
+ - lib/locale/locale.rb
104
124
  - lib/metro.rb
105
- - lib/metro/animation/animation.rb
125
+ - lib/metro/animation/after_interval_factory.rb
106
126
  - lib/metro/animation/animation_factory.rb
107
127
  - lib/metro/animation/easing.rb
108
128
  - lib/metro/animation/has_animations.rb
109
129
  - lib/metro/animation/implicit_animation.rb
110
- - lib/metro/error.rb
130
+ - lib/metro/animation/on_update_operation.rb
131
+ - lib/metro/animation/scene_animation.rb
132
+ - lib/metro/events/control_definition.rb
133
+ - lib/metro/events/controls.rb
111
134
  - lib/metro/events/event_factory.rb
112
135
  - lib/metro/events/event_relay.rb
113
136
  - lib/metro/events/has_events.rb
@@ -118,10 +141,12 @@ files:
118
141
  - lib/metro/models/draws.rb
119
142
  - lib/metro/models/generic.rb
120
143
  - lib/metro/models/image.rb
144
+ - lib/metro/models/key_value_coding.rb
121
145
  - lib/metro/models/label.rb
122
146
  - lib/metro/models/menu.rb
123
147
  - lib/metro/models/model.rb
124
148
  - lib/metro/models/model_factory.rb
149
+ - lib/metro/models/rectangle.rb
125
150
  - lib/metro/scene.rb
126
151
  - lib/metro/scene_view/json_view.rb
127
152
  - lib/metro/scene_view/no_view.rb
@@ -129,6 +154,9 @@ files:
129
154
  - lib/metro/scene_view/yaml_view.rb
130
155
  - lib/metro/scenes.rb
131
156
  - lib/metro/template_message.rb
157
+ - lib/metro/transitions/fade_transition_scene.rb
158
+ - lib/metro/transitions/scene_transitions.rb
159
+ - lib/metro/transitions/transition_scene.rb
132
160
  - lib/metro/version.rb
133
161
  - lib/metro/window.rb
134
162
  - lib/templates/game/README.md.tt
@@ -145,16 +173,23 @@ files:
145
173
  - lib/templates/scene.rb.erb
146
174
  - lib/templates/view.yaml.erb
147
175
  - metro.gemspec
176
+ - spec/core_ext/numeric_spec.rb
148
177
  - spec/core_ext/string_spec.rb
149
178
  - spec/gosu_ext/color_spec.rb
179
+ - spec/metro/models/key_value_coding_spec.rb
180
+ - spec/metro/scene_views/yaml_view_spec.rb
150
181
  - spec/spec_helper.rb
151
182
  homepage: https://github.com/burtlo/metro
152
183
  licenses: []
153
184
  post_install_message: ! " ______ ___ _____\n ___ |/ /_____ __ /_______________\n
154
185
  \ __ /|_/ / _ _ \\_ __/__ ___/_ __ \\\n _ / / / / __// /_ _ / /
155
186
  /_/ /\n /_/ /_/ \\___/ \\__/ /_/ \\____/\n\n Thank you for installing
156
- metro 0.1.2 / 2012-10-26.\n ---------------------------------------------------------------------\n
157
- \ Changes:\n \n * Generators for games, scenes, models, and views\n \n\n ---------------------------------------------------------------------\n"
187
+ metro 0.1.3 / 2012-10-28.\n ---------------------------------------------------------------------\n
188
+ \ Changes:\n \n * Fade Scene Transition support added\n * Numeric#seconds and
189
+ Numeric#ticks helpers added\n * Scenes can now define delayed events `after 2.seconds
190
+ do ; end`\n * Labels have more defaults and more font options and size\n * Labels
191
+ and images will default to center of screen\n * Able to define game controls within
192
+ your metro file\n * Implicit animations support color change.\n \n\n ---------------------------------------------------------------------\n"
158
193
  rdoc_options: []
159
194
  require_paths:
160
195
  - lib
@@ -179,7 +214,10 @@ summary: Metro is a 2D Gaming framework built around gosu (game development libr
179
214
  Metro makes it easy to create games by enforcing common conceptual structures and
180
215
  conventions.
181
216
  test_files:
217
+ - spec/core_ext/numeric_spec.rb
182
218
  - spec/core_ext/string_spec.rb
183
219
  - spec/gosu_ext/color_spec.rb
220
+ - spec/metro/models/key_value_coding_spec.rb
221
+ - spec/metro/scene_views/yaml_view_spec.rb
184
222
  - spec/spec_helper.rb
185
223
  has_rdoc: