metro 0.1.4 → 0.1.5
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.
- data/changelog.md +9 -0
- data/lib/commands/generate_model.rb +2 -2
- data/lib/commands/generate_scene.rb +2 -2
- data/lib/commands/generate_view.rb +1 -1
- data/lib/gosu_ext/color.rb +16 -2
- data/lib/metro.rb +50 -10
- data/lib/metro/events/event_data.rb +61 -0
- data/lib/metro/events/event_relay.rb +10 -3
- data/lib/metro/events/hit_list.rb +77 -0
- data/lib/metro/models/draws.rb +6 -1
- data/lib/metro/models/grid_drawer.rb +57 -0
- data/lib/metro/models/image.rb +18 -2
- data/lib/metro/models/label.rb +22 -6
- data/lib/metro/models/menu.rb +20 -0
- data/lib/metro/models/model.rb +47 -6
- data/lib/metro/models/model_factory.rb +2 -2
- data/lib/metro/models/rectangle_bounds.rb +28 -0
- data/lib/metro/scene.rb +46 -11
- data/lib/metro/scenes.rb +10 -9
- data/lib/metro/transitions/edit_transition_scene.rb +73 -0
- data/lib/metro/transitions/scene_transitions.rb +8 -2
- data/lib/metro/transitions/transition_scene.rb +2 -1
- data/lib/metro/version.rb +1 -1
- data/lib/metro/views/json_view.rb +60 -0
- data/lib/metro/{scene_view → views}/no_view.rb +12 -4
- data/lib/metro/views/parsers.rb +26 -0
- data/lib/metro/views/scene_view.rb +107 -0
- data/lib/metro/views/view.rb +125 -0
- data/lib/metro/views/writers.rb +28 -0
- data/lib/metro/views/yaml_view.rb +94 -0
- data/lib/metro/window.rb +19 -0
- data/metro.gemspec +1 -0
- data/spec/core_ext/string_spec.rb +13 -13
- data/spec/metro/scene_spec.rb +15 -0
- data/spec/metro/scene_views/json_view_spec.rb +27 -0
- data/spec/metro/scene_views/yaml_view_spec.rb +1 -1
- data/spec/metro/views/view_spec.rb +53 -0
- metadata +41 -11
- data/lib/core_ext/string.rb +0 -15
- data/lib/metro/scene_view/json_view.rb +0 -41
- data/lib/metro/scene_view/scene_view.rb +0 -83
- data/lib/metro/scene_view/yaml_view.rb +0 -45
data/lib/metro/window.rb
CHANGED
@@ -60,5 +60,24 @@ module Metro
|
|
60
60
|
scene.button_down(id)
|
61
61
|
end
|
62
62
|
|
63
|
+
#
|
64
|
+
# Define an acessor that enables/disables the use of a cursor
|
65
|
+
# within the window. The value should be truthy/falsy.
|
66
|
+
#
|
67
|
+
attr_accessor :cursor
|
68
|
+
|
69
|
+
#
|
70
|
+
# Gosu uses this method to determine if the cursor should be shown.
|
71
|
+
#
|
72
|
+
alias_method :needs_cursor?, :cursor
|
73
|
+
|
74
|
+
def show_cursor
|
75
|
+
self.cursor = true
|
76
|
+
end
|
77
|
+
|
78
|
+
def hide_cursor
|
79
|
+
self.cursor = false
|
80
|
+
end
|
81
|
+
|
63
82
|
end
|
64
83
|
end
|
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 'i18n', '~> 0.6.1'
|
30
|
+
gem.add_dependency 'active_support', '~> 3.0.0'
|
30
31
|
gem.add_development_dependency 'rspec', '~> 2.11'
|
31
32
|
|
32
33
|
gem.files = `git ls-files`.split($/)
|
@@ -2,52 +2,52 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe String do
|
4
4
|
|
5
|
-
describe "#
|
5
|
+
describe "#underscore" do
|
6
6
|
context "when given a regular string" do
|
7
7
|
subject { "String" }
|
8
8
|
let(:expected_value) { "string" }
|
9
9
|
|
10
|
-
its(:
|
10
|
+
its(:underscore) { should eq expected_value }
|
11
11
|
end
|
12
12
|
|
13
13
|
context "when given an already snake cased string" do
|
14
|
-
subject { "
|
15
|
-
let(:expected_value) { "
|
14
|
+
subject { "underscored" }
|
15
|
+
let(:expected_value) { "underscored" }
|
16
16
|
|
17
|
-
its(:
|
17
|
+
its(:underscore) { should eq expected_value }
|
18
18
|
end
|
19
19
|
|
20
20
|
context "when given a camelCased string" do
|
21
21
|
subject { "SnakeCased" }
|
22
22
|
let(:expected_value) { "snake_cased" }
|
23
23
|
|
24
|
-
its(:
|
24
|
+
its(:underscore) { should eq expected_value }
|
25
25
|
end
|
26
26
|
|
27
27
|
context "when given a partial camel_Cased string" do
|
28
28
|
subject { "snake_Cased" }
|
29
29
|
let(:expected_value) { "snake_cased" }
|
30
|
-
its(:
|
30
|
+
its(:underscore) { should eq expected_value }
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
describe "#
|
34
|
+
describe "#classify" do
|
35
35
|
context "when given a regular string" do
|
36
36
|
subject { "string" }
|
37
37
|
let(:expected_value) { "String" }
|
38
|
-
its(:
|
38
|
+
its(:classify) { should eq expected_value }
|
39
39
|
end
|
40
40
|
|
41
|
-
context "when given a
|
41
|
+
context "when given a underscored string" do
|
42
42
|
subject { "camel_cased" }
|
43
43
|
let(:expected_value) { "CamelCased" }
|
44
|
-
its(:
|
44
|
+
its(:classify) { should eq expected_value }
|
45
45
|
end
|
46
46
|
|
47
47
|
context "when given a partial camel_CasedString" do
|
48
48
|
subject { "camel_CasedString" }
|
49
|
-
let(:expected_value) { "
|
50
|
-
its(:
|
49
|
+
let(:expected_value) { "CamelCasedString" }
|
50
|
+
its(:classify) { should eq expected_value }
|
51
51
|
end
|
52
52
|
end
|
53
53
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Metro::Scene do
|
4
|
+
|
5
|
+
class SpecScene < Metro::Scene ; end
|
6
|
+
|
7
|
+
subject { SpecScene.new }
|
8
|
+
|
9
|
+
let(:expected_view_name) { "spec" }
|
10
|
+
its(:view_name) { should eq expected_view_name }
|
11
|
+
|
12
|
+
let(:expected_scene_name) { "spec" }
|
13
|
+
its(:scene_name) { should eq expected_scene_name }
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Metro::Views::JSONView 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 JSON" 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}.json" }
|
19
|
+
|
20
|
+
it "should return true" do
|
21
|
+
subject.exists?(view_name).should be_true
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Metro::View do
|
4
|
+
before do
|
5
|
+
subject.name = "spec"
|
6
|
+
end
|
7
|
+
|
8
|
+
let(:expected_view_path) { "views/spec" }
|
9
|
+
its(:view_path) { should eq expected_view_path }
|
10
|
+
|
11
|
+
describe "#parser" do
|
12
|
+
before do
|
13
|
+
subject.stub(:supported_parsers) { [ mock(exists?: false), expected_parser ] }
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:expected_parser) { mock(exists?: true) }
|
17
|
+
|
18
|
+
it "should return the first parser which has a existing view" do
|
19
|
+
subject.parser.should eq expected_parser
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#writer" do
|
24
|
+
|
25
|
+
context "when the parser has a format that matches a writer" do
|
26
|
+
before do
|
27
|
+
subject.stub(:parser) { mock(format: :json) }
|
28
|
+
subject.stub(:supported_writers) { [ mock(format: :yaml), expected_writer ] }
|
29
|
+
end
|
30
|
+
|
31
|
+
let(:expected_writer) { mock(format: :json) }
|
32
|
+
|
33
|
+
it "should match the parser format" do
|
34
|
+
subject.writer.format.should eq :json
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context "when the format has been specified" do
|
39
|
+
before do
|
40
|
+
subject.stub(:parser) { mock(format: :json) }
|
41
|
+
subject.stub(:supported_writers) { [ expected_writer, mock(format: :json) ] }
|
42
|
+
end
|
43
|
+
|
44
|
+
let(:expected_writer) { mock(format: :yaml) }
|
45
|
+
|
46
|
+
it "should match the format (ignoring the parser format)" do
|
47
|
+
subject.format = :yaml
|
48
|
+
subject.writer.format.should eq :yaml
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
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.
|
4
|
+
version: 0.1.5
|
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-
|
12
|
+
date: 2012-11-02 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: 0.6.1
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: active_support
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 3.0.0
|
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: 3.0.0
|
62
78
|
- !ruby/object:Gem::Dependency
|
63
79
|
name: rspec
|
64
80
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,7 +116,6 @@ files:
|
|
100
116
|
- lib/commands/generate_view.rb
|
101
117
|
- lib/commands/thor.rb
|
102
118
|
- lib/core_ext/numeric.rb
|
103
|
-
- lib/core_ext/string.rb
|
104
119
|
- lib/gosu_ext/color.rb
|
105
120
|
- lib/gosu_ext/gosu_constants.rb
|
106
121
|
- lib/locale/en.yml
|
@@ -116,9 +131,11 @@ files:
|
|
116
131
|
- lib/metro/asset_path.rb
|
117
132
|
- lib/metro/events/control_definition.rb
|
118
133
|
- lib/metro/events/controls.rb
|
134
|
+
- lib/metro/events/event_data.rb
|
119
135
|
- lib/metro/events/event_factory.rb
|
120
136
|
- lib/metro/events/event_relay.rb
|
121
137
|
- lib/metro/events/has_events.rb
|
138
|
+
- lib/metro/events/hit_list.rb
|
122
139
|
- lib/metro/events/unknown_sender.rb
|
123
140
|
- lib/metro/game.rb
|
124
141
|
- lib/metro/game/dsl.rb
|
@@ -126,6 +143,7 @@ files:
|
|
126
143
|
- lib/metro/missing_scene.rb
|
127
144
|
- lib/metro/models/draws.rb
|
128
145
|
- lib/metro/models/generic.rb
|
146
|
+
- lib/metro/models/grid_drawer.rb
|
129
147
|
- lib/metro/models/image.rb
|
130
148
|
- lib/metro/models/key_value_coding.rb
|
131
149
|
- lib/metro/models/label.rb
|
@@ -133,17 +151,22 @@ files:
|
|
133
151
|
- lib/metro/models/model.rb
|
134
152
|
- lib/metro/models/model_factory.rb
|
135
153
|
- lib/metro/models/rectangle.rb
|
154
|
+
- lib/metro/models/rectangle_bounds.rb
|
136
155
|
- lib/metro/scene.rb
|
137
|
-
- lib/metro/scene_view/json_view.rb
|
138
|
-
- lib/metro/scene_view/no_view.rb
|
139
|
-
- lib/metro/scene_view/scene_view.rb
|
140
|
-
- lib/metro/scene_view/yaml_view.rb
|
141
156
|
- lib/metro/scenes.rb
|
142
157
|
- lib/metro/template_message.rb
|
158
|
+
- lib/metro/transitions/edit_transition_scene.rb
|
143
159
|
- lib/metro/transitions/fade_transition_scene.rb
|
144
160
|
- lib/metro/transitions/scene_transitions.rb
|
145
161
|
- lib/metro/transitions/transition_scene.rb
|
146
162
|
- lib/metro/version.rb
|
163
|
+
- lib/metro/views/json_view.rb
|
164
|
+
- lib/metro/views/no_view.rb
|
165
|
+
- lib/metro/views/parsers.rb
|
166
|
+
- lib/metro/views/scene_view.rb
|
167
|
+
- lib/metro/views/view.rb
|
168
|
+
- lib/metro/views/writers.rb
|
169
|
+
- lib/metro/views/yaml_view.rb
|
147
170
|
- lib/metro/window.rb
|
148
171
|
- lib/templates/game/README.md.tt
|
149
172
|
- lib/templates/game/assets/brand.jpg
|
@@ -163,16 +186,21 @@ files:
|
|
163
186
|
- spec/core_ext/string_spec.rb
|
164
187
|
- spec/gosu_ext/color_spec.rb
|
165
188
|
- spec/metro/models/key_value_coding_spec.rb
|
189
|
+
- spec/metro/scene_spec.rb
|
190
|
+
- spec/metro/scene_views/json_view_spec.rb
|
166
191
|
- spec/metro/scene_views/yaml_view_spec.rb
|
192
|
+
- spec/metro/views/view_spec.rb
|
167
193
|
- spec/spec_helper.rb
|
168
194
|
homepage: https://github.com/burtlo/metro
|
169
195
|
licenses: []
|
170
196
|
post_install_message: ! " ______ ___ _____\n ___ |/ /_____ __ /_______________\n
|
171
197
|
\ __ /|_/ / _ _ \\_ __/__ ___/_ __ \\\n _ / / / / __// /_ _ / /
|
172
198
|
/_/ /\n /_/ /_/ \\___/ \\__/ /_/ \\____/\n\n Thank you for installing
|
173
|
-
metro 0.1.
|
174
|
-
\ Changes:\n \n *
|
175
|
-
|
199
|
+
metro 0.1.5 / 2012-11-01.\n ---------------------------------------------------------------------\n
|
200
|
+
\ Changes:\n \n * Metro.reload! will reload all game classes\n * Scenes can
|
201
|
+
now an editable state where the position of items can be\n updated and saved.\n
|
202
|
+
\ * Event blocks can optionally receive an event object. The event object\n includes
|
203
|
+
modifier key information.\n \n \n\n ---------------------------------------------------------------------\n"
|
176
204
|
rdoc_options: []
|
177
205
|
require_paths:
|
178
206
|
- lib
|
@@ -201,6 +229,8 @@ test_files:
|
|
201
229
|
- spec/core_ext/string_spec.rb
|
202
230
|
- spec/gosu_ext/color_spec.rb
|
203
231
|
- spec/metro/models/key_value_coding_spec.rb
|
232
|
+
- spec/metro/scene_spec.rb
|
233
|
+
- spec/metro/scene_views/json_view_spec.rb
|
204
234
|
- spec/metro/scene_views/yaml_view_spec.rb
|
235
|
+
- spec/metro/views/view_spec.rb
|
205
236
|
- spec/spec_helper.rb
|
206
|
-
has_rdoc:
|
data/lib/core_ext/string.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
class String
|
2
|
-
|
3
|
-
def snake_case
|
4
|
-
snaked_string = self.gsub(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
|
5
|
-
snaked_string.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
|
6
|
-
snaked_string.downcase
|
7
|
-
end
|
8
|
-
|
9
|
-
def camel_case
|
10
|
-
camel_string = self.to_s.gsub(/Scene$/i,'')
|
11
|
-
camel_string = camel_string.sub(/^[a-z\d]*/) { $&.capitalize }
|
12
|
-
camel_string = camel_string.gsub(/(?:_|(\/))([a-z\d]*)/i) { "#{$1}#{$2.capitalize}" }.gsub('/', '::')
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
|
3
|
-
module Metro
|
4
|
-
module SceneView
|
5
|
-
|
6
|
-
#
|
7
|
-
# Provides support for a JSON Representation of a view.
|
8
|
-
#
|
9
|
-
class JSONView
|
10
|
-
|
11
|
-
#
|
12
|
-
# Determine if a view exists for this specified format
|
13
|
-
#
|
14
|
-
# @param [String] view_name the name of the view to find
|
15
|
-
# @return a true if the json view exists and false if it does not exist.
|
16
|
-
#
|
17
|
-
def self.exists?(view_name)
|
18
|
-
File.exists? json_view_name(view_name)
|
19
|
-
end
|
20
|
-
|
21
|
-
#
|
22
|
-
# Parse the contents of the view given the name.
|
23
|
-
#
|
24
|
-
# @param [String] view_name the name of the view to read
|
25
|
-
# @return a Hash that contains the contents of the view.
|
26
|
-
#
|
27
|
-
def self.parse(view_name)
|
28
|
-
JSON.parse File.read json_view_name(view_name)
|
29
|
-
end
|
30
|
-
|
31
|
-
#
|
32
|
-
# A helper method to generate the name of the json view file. In this case
|
33
|
-
# it is the view name with the suffix .json.
|
34
|
-
#
|
35
|
-
def self.json_view_name(view_name)
|
36
|
-
File.extname(view_name) == "" ? "#{view_name}.json" : view_name
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
41
|
-
end
|
@@ -1,83 +0,0 @@
|
|
1
|
-
require_relative 'yaml_view'
|
2
|
-
require_relative 'json_view'
|
3
|
-
require_relative 'no_view'
|
4
|
-
|
5
|
-
module Metro
|
6
|
-
|
7
|
-
#
|
8
|
-
# SceneView provides support for a Scene to have a view as well as giving
|
9
|
-
# additional tools to also help draw that view.
|
10
|
-
#
|
11
|
-
module SceneView
|
12
|
-
|
13
|
-
#
|
14
|
-
# When the module is included insure that all the class helper methods are added
|
15
|
-
# at the same time.
|
16
|
-
#
|
17
|
-
def self.included(base)
|
18
|
-
base.extend ClassMethods
|
19
|
-
end
|
20
|
-
|
21
|
-
#
|
22
|
-
# Supported view formats
|
23
|
-
#
|
24
|
-
def _view_parsers
|
25
|
-
self.class._view_parsers
|
26
|
-
end
|
27
|
-
|
28
|
-
#
|
29
|
-
# Loads and caches the view content based on the avilable view parsers and
|
30
|
-
# the view files defined.
|
31
|
-
#
|
32
|
-
# @return a Hash of view content.
|
33
|
-
#
|
34
|
-
def view
|
35
|
-
self.class.view
|
36
|
-
end
|
37
|
-
|
38
|
-
module ClassMethods
|
39
|
-
|
40
|
-
#
|
41
|
-
# A Scene by default uses the name of the Scene to find it's associated
|
42
|
-
# view.
|
43
|
-
#
|
44
|
-
# @example Custom View Name
|
45
|
-
#
|
46
|
-
# class ClosingScene < Metro::Scene
|
47
|
-
# view_name 'alternative'
|
48
|
-
# end
|
49
|
-
#
|
50
|
-
# ClosingScene.view_name # => views/alternative
|
51
|
-
#
|
52
|
-
def view_name(filename = nil)
|
53
|
-
if filename
|
54
|
-
@view_name = File.join "views", filename.to_s
|
55
|
-
else
|
56
|
-
@view_name ||= File.join "views", scene_name
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
#
|
61
|
-
# Supported view formats
|
62
|
-
#
|
63
|
-
def _view_parsers
|
64
|
-
[ YAMLView, JSONView, NoView ]
|
65
|
-
end
|
66
|
-
|
67
|
-
#
|
68
|
-
# Loads and caches the view content based on the avilable view parsers and
|
69
|
-
# the view files defined.
|
70
|
-
#
|
71
|
-
# @return a Hash of view content.
|
72
|
-
#
|
73
|
-
def view
|
74
|
-
@view ||= begin
|
75
|
-
parser = _view_parsers.find { |parser| parser.exists? view_name }
|
76
|
-
parser.parse view_name
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|
81
|
-
|
82
|
-
end
|
83
|
-
end
|