metro 0.1.6 → 0.2.0
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 +11 -0
- data/lib/assets/missing.png +0 -0
- data/lib/{metro/animation → gosu_ext}/animation.rb +0 -0
- data/lib/gosu_ext/image.rb +35 -2
- data/lib/metro/game.rb +1 -1
- data/lib/metro/models/model.rb +8 -49
- data/lib/metro/models/model_factory.rb +6 -2
- data/lib/metro/models/models/grid_drawer.rb +2 -2
- data/lib/metro/models/models/menu.rb +5 -0
- data/lib/metro/models/properties/animation.rb +8 -18
- data/lib/metro/models/properties/image.rb +33 -17
- data/lib/metro/models/properties/property.rb +2 -0
- data/lib/metro/models/properties/text.rb +3 -3
- data/lib/metro/scene.rb +1 -0
- data/lib/metro/units/dimensions.rb +23 -0
- data/lib/metro/units/point.rb +25 -0
- data/lib/metro/units/scale.rb +23 -0
- data/lib/metro/units/units.rb +3 -0
- data/lib/metro/version.rb +1 -1
- data/lib/metro.rb +10 -8
- data/lib/templates/game/scenes/game_scene.rb +12 -1
- data/lib/templates/model.rb.tt +50 -11
- metadata +14 -11
- data/lib/metro/models/dimensions.rb +0 -21
- data/lib/metro/models/point.rb +0 -23
- data/lib/metro/models/scale.rb +0 -21
data/changelog.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
# Metro
|
2
2
|
|
3
|
+
## 0.2.0 / 2012-11-07
|
4
|
+
|
5
|
+
* Views now use position instead of `x`, `y`, and `z-order`
|
6
|
+
* Point, Scale, and Dimensions is available in model and scenes.
|
7
|
+
* Events are shared from superclasses to subclases.
|
8
|
+
* Templates updated to use GameScene and GameModel for each game.
|
9
|
+
* Models are automatically added to the update loop
|
10
|
+
* Model properties now make it easier to store/retrieve various
|
11
|
+
common numeric, position font, image, and animation properties.
|
12
|
+
|
13
|
+
|
3
14
|
## 0.1.6 / 2012-11-07
|
4
15
|
|
5
16
|
* Events are shared from superclasses to subclases.
|
Binary file
|
File without changes
|
data/lib/gosu_ext/image.rb
CHANGED
@@ -1,5 +1,38 @@
|
|
1
|
-
|
1
|
+
module Metro
|
2
2
|
|
3
|
-
|
3
|
+
#
|
4
|
+
# Image is a wrapper class for a Gosu Image. This allows for additional data to be stored
|
5
|
+
# without relying on monkey-patching on functionality.
|
6
|
+
#
|
7
|
+
class Image < SimpleDelegator
|
4
8
|
|
9
|
+
#
|
10
|
+
# Generate an image given the Gosu window and path. Consider using a model and an image
|
11
|
+
# property instead of using this method.
|
12
|
+
#
|
13
|
+
# @note this goes through the image property because that current performs the caching.
|
14
|
+
#
|
15
|
+
# @example Creating an Image
|
16
|
+
#
|
17
|
+
# Metro::Image.create path: "relative_imagepath.png", window: window
|
18
|
+
#
|
19
|
+
# @see Metro::Model::ImageProperty
|
20
|
+
#
|
21
|
+
def self.create(params = {})
|
22
|
+
Model::ImageProperty.image_for params
|
23
|
+
end
|
24
|
+
|
25
|
+
def initialize(gosu_image,path,tileable)
|
26
|
+
super(gosu_image)
|
27
|
+
@path = path
|
28
|
+
@tileable = tileable
|
29
|
+
end
|
30
|
+
|
31
|
+
# The relative path of the image
|
32
|
+
attr_reader :path
|
33
|
+
|
34
|
+
# The tileability of the image
|
35
|
+
attr_reader :tileable
|
36
|
+
|
37
|
+
end
|
5
38
|
end
|
data/lib/metro/game.rb
CHANGED
data/lib/metro/models/model.rb
CHANGED
@@ -14,6 +14,7 @@ module Metro
|
|
14
14
|
# @see Models::Generic
|
15
15
|
#
|
16
16
|
class Model
|
17
|
+
include Units
|
17
18
|
|
18
19
|
#
|
19
20
|
# This is called every update interval while the actor is in the scene
|
@@ -208,40 +209,13 @@ module Metro
|
|
208
209
|
# with the contents of the view.
|
209
210
|
#
|
210
211
|
def _load(options = {})
|
211
|
-
options = {} unless options
|
212
212
|
|
213
|
-
|
214
|
-
|
215
|
-
key =
|
216
|
-
|
217
|
-
|
218
|
-
unless respond_to? key
|
219
|
-
log.warn "Unknown Property #{key}"
|
220
|
-
self.class.send(:define_method,key) do
|
221
|
-
properties[key]
|
222
|
-
end
|
223
|
-
#raise "Do not know (#{key}) property"
|
224
|
-
end
|
225
|
-
|
226
|
-
unless respond_to? "#{key}="
|
227
|
-
log.warn "Unknown Property #{key}="
|
228
|
-
self.class.send(:define_method,"#{key}=") do |value|
|
229
|
-
properties[key] = value
|
230
|
-
end
|
231
|
-
|
232
|
-
# raise "Do not know (#{key}=) property"
|
233
|
-
end
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
_loaded_options.push key
|
238
|
-
send "#{key}=", value
|
213
|
+
# Clean up and symbolize all the keys then merge that with the existing properties
|
214
|
+
options.keys.each do |key|
|
215
|
+
options[key.to_s.underscore.to_sym] = options.delete(key)
|
239
216
|
end
|
240
217
|
|
241
|
-
|
242
|
-
|
243
|
-
def _loaded_options
|
244
|
-
@_loaded_options ||= []
|
218
|
+
properties.merge! options
|
245
219
|
end
|
246
220
|
|
247
221
|
#
|
@@ -252,29 +226,14 @@ module Metro
|
|
252
226
|
# to another model.
|
253
227
|
#
|
254
228
|
def _save
|
255
|
-
|
256
|
-
Hash[*data_export]
|
229
|
+
properties
|
257
230
|
end
|
258
231
|
|
259
232
|
#
|
260
|
-
# Generate a hash representation of the model.
|
233
|
+
# Generate a hash representation of the model.
|
261
234
|
#
|
262
235
|
def to_hash
|
263
|
-
|
264
|
-
export_with_name = export.reject {|item| item.first == "name" }
|
265
|
-
|
266
|
-
hash = export_with_name.inject({}) {|hash,elem| hash[elem.first] = elem.last ; hash }
|
267
|
-
|
268
|
-
# TODO:: color is a class that cannot be yamlized as it is and needs to be turned into a string.
|
269
|
-
# TODO: Hack to save the Gosu::Color class as a string value (this is
|
270
|
-
# what I hoped that the properties would solve)
|
271
|
-
hash.each do |subkey,subvalue|
|
272
|
-
if subvalue.is_a? Gosu::Color
|
273
|
-
hash[subkey] = subvalue.to_s
|
274
|
-
end
|
275
|
-
end
|
276
|
-
|
277
|
-
{ name => hash }
|
236
|
+
{ name => properties.except(:name) }
|
278
237
|
end
|
279
238
|
|
280
239
|
#
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Metro
|
2
2
|
class ModelFactory
|
3
3
|
|
4
|
-
attr_reader :name
|
4
|
+
attr_reader :name
|
5
5
|
|
6
6
|
def initialize(name,options)
|
7
7
|
@name = name.to_s.downcase
|
@@ -16,7 +16,11 @@ module Metro
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def load_from_previous_scene?
|
19
|
-
options[:from] == :previous_scene
|
19
|
+
@options[:from] == :previous_scene
|
20
|
+
end
|
21
|
+
|
22
|
+
def options
|
23
|
+
@options.except(:from)
|
20
24
|
end
|
21
25
|
|
22
26
|
def model_name
|
@@ -34,14 +34,14 @@ module Metro
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def draw_vertical_lines
|
37
|
-
xs = (width / spacing + 1).times.map {|segment| segment * spacing }
|
37
|
+
xs = (width / spacing + 1).to_i.times.map {|segment| segment * spacing }
|
38
38
|
xs.each do |x|
|
39
39
|
window.draw_line(x, 1, color, x, height, color, 0, :additive)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
43
|
def draw_horizontal_lines
|
44
|
-
ys = (height / spacing + 1).times.map {|segment| segment * spacing }
|
44
|
+
ys = (height / spacing + 1).to_i.times.map {|segment| segment * spacing }
|
45
45
|
ys.each do |y|
|
46
46
|
window.draw_line(1, y, color, width, y, color, 0, :additive)
|
47
47
|
end
|
@@ -19,6 +19,11 @@ module Metro
|
|
19
19
|
property :unselected_color, type: :color, default: "rgba(119,119,119,1.0)"
|
20
20
|
property :selected_color, type: :color, default: "rgba(255,255,255,1.0)"
|
21
21
|
|
22
|
+
# This is a temporary method as there is no options propery yet defined
|
23
|
+
def options
|
24
|
+
properties[:options]
|
25
|
+
end
|
26
|
+
|
22
27
|
def alpha
|
23
28
|
self.unselected_color_alpha
|
24
29
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require_relative '../../animation/animation'
|
2
|
-
|
3
1
|
module Metro
|
4
2
|
class Model
|
5
3
|
|
@@ -25,10 +23,10 @@ module Metro
|
|
25
23
|
# end
|
26
24
|
# end
|
27
25
|
#
|
28
|
-
# @example Defining an animation
|
26
|
+
# @example Defining an animation with a path.
|
29
27
|
#
|
30
28
|
# class Hero < Metro::Model
|
31
|
-
# property :animation,
|
29
|
+
# property :animation, path: "star.png", dimensions: Dimensions.of(25,25)
|
32
30
|
# dimensions: Metro::Dimensions.of(25,25) }
|
33
31
|
#
|
34
32
|
# def draw
|
@@ -39,8 +37,8 @@ module Metro
|
|
39
37
|
# @example Using an animation property with a different property name
|
40
38
|
#
|
41
39
|
# class Hero < Metro::Model
|
42
|
-
# property :walking, type: :animation,
|
43
|
-
# dimensions: Metro::Dimensions.of(25,25)
|
40
|
+
# property :walking, type: :animation, path: "star.png",
|
41
|
+
# dimensions: Metro::Dimensions.of(25,25)
|
44
42
|
#
|
45
43
|
# def draw
|
46
44
|
# walking.image.draw text, x, y, z_order, x_factor, y_factor, color
|
@@ -85,19 +83,11 @@ module Metro
|
|
85
83
|
end
|
86
84
|
|
87
85
|
def default_image_path
|
88
|
-
|
89
|
-
asset_path(options[:default][:path])
|
90
|
-
else
|
91
|
-
metro_asset_path("missing_animation.png")
|
92
|
-
end
|
86
|
+
options[:path] ? options[:path] : metro_asset_path("missing_animation.png")
|
93
87
|
end
|
94
88
|
|
95
89
|
def default_dimensions
|
96
|
-
|
97
|
-
options[:default][:dimensions]
|
98
|
-
else
|
99
|
-
Dimensions.of 16.0, 16.0
|
100
|
-
end
|
90
|
+
options[:dimensions] ? options[:dimensions] : Dimensions.of(16.0,16.0)
|
101
91
|
end
|
102
92
|
|
103
93
|
#
|
@@ -120,7 +110,7 @@ module Metro
|
|
120
110
|
|
121
111
|
animation_images = images[path]
|
122
112
|
unless animation_images
|
123
|
-
animation_images =
|
113
|
+
animation_images = create_images(window,absolute_path,width,height,tileable)
|
124
114
|
images[path] = animation_images
|
125
115
|
end
|
126
116
|
|
@@ -133,7 +123,7 @@ module Metro
|
|
133
123
|
|
134
124
|
private
|
135
125
|
|
136
|
-
def self.
|
126
|
+
def self.create_images(window,path,width,height,tileable)
|
137
127
|
Gosu::Image.load_tiles(window,path,width,height,tileable)
|
138
128
|
end
|
139
129
|
|
@@ -23,16 +23,16 @@ module Metro
|
|
23
23
|
#
|
24
24
|
# end
|
25
25
|
#
|
26
|
-
# @example Defining an image property providing a
|
26
|
+
# @example Defining an image property providing a path
|
27
27
|
#
|
28
28
|
# class Player < Metro::Model
|
29
|
-
# property :image,
|
29
|
+
# property :image, path: "player.png"
|
30
30
|
# end
|
31
31
|
#
|
32
32
|
# @example Using an image property with a different property name
|
33
33
|
#
|
34
34
|
# class Player < Metro::Model
|
35
|
-
# property :disconnected_image, type: :image,
|
35
|
+
# property :disconnected_image, type: :image, path: "disconnected_player.png"
|
36
36
|
#
|
37
37
|
# def draw
|
38
38
|
# disconnected_image.draw x, y, z_order, x_factor, y_factor, color, :add)
|
@@ -41,10 +41,18 @@ module Metro
|
|
41
41
|
#
|
42
42
|
class ImageProperty < Property
|
43
43
|
|
44
|
+
get do
|
45
|
+
default_image
|
46
|
+
end
|
47
|
+
|
44
48
|
# Return the image at the specified path.
|
45
49
|
# @note The path should be the relative path within the game.
|
46
50
|
get String do |path|
|
47
|
-
self.class.
|
51
|
+
self.class.image_for path: path, window: model.window
|
52
|
+
end
|
53
|
+
|
54
|
+
set do
|
55
|
+
default_image.path
|
48
56
|
end
|
49
57
|
|
50
58
|
# Set the image with the specified path.
|
@@ -59,6 +67,15 @@ module Metro
|
|
59
67
|
image.path
|
60
68
|
end
|
61
69
|
|
70
|
+
def default_image
|
71
|
+
self.class.image_for path: default_image_path, window: model.window
|
72
|
+
end
|
73
|
+
|
74
|
+
def default_image_path
|
75
|
+
options[:path] || metro_asset_path("missing.png")
|
76
|
+
end
|
77
|
+
|
78
|
+
|
62
79
|
#
|
63
80
|
# Return an image for the specified path. On first request it will be loaded from
|
64
81
|
# the file-system. On subsequent requests it will be pulled from the cache.
|
@@ -66,18 +83,22 @@ module Metro
|
|
66
83
|
# @param [Hash] options the relative `path` to the image and the window for which it
|
67
84
|
# will be displayed.
|
68
85
|
#
|
69
|
-
def self.
|
86
|
+
def self.image_for(options)
|
70
87
|
options.symbolize_keys!
|
71
|
-
|
88
|
+
|
89
|
+
absolute_path = path = options[:path]
|
90
|
+
absolute_path = asset_path(absolute_path) unless absolute_path.start_with? "/"
|
91
|
+
|
92
|
+
tileable = !!options[:tileable]
|
72
93
|
window = options[:window]
|
73
94
|
|
74
|
-
|
75
|
-
unless
|
76
|
-
|
77
|
-
images[path] =
|
95
|
+
gosu_image = images[path]
|
96
|
+
unless gosu_image
|
97
|
+
gosu_image = create_image(window,absolute_path,tileable)
|
98
|
+
images[path] = gosu_image
|
78
99
|
end
|
79
100
|
|
80
|
-
|
101
|
+
Image.new gosu_image, path, tileable
|
81
102
|
end
|
82
103
|
|
83
104
|
def self.images
|
@@ -86,13 +107,8 @@ module Metro
|
|
86
107
|
|
87
108
|
private
|
88
109
|
|
89
|
-
# @TODO The Gosu::Image creation should automatically perform this operation of saving the path
|
90
|
-
# to the image. This should be monkey-patched onto the image so that images created outside
|
91
|
-
# of this process will also have a specified path.
|
92
110
|
def self.create_image(window,path,tileable)
|
93
|
-
|
94
|
-
image.path = path
|
95
|
-
image
|
111
|
+
Gosu::Image.new(window,path,tileable)
|
96
112
|
end
|
97
113
|
|
98
114
|
end
|
@@ -22,7 +22,7 @@ module Metro
|
|
22
22
|
# @example Defining with a default and text that will be instance evaluated.
|
23
23
|
#
|
24
24
|
# class ScoreBoard < Metro::Model
|
25
|
-
# property :
|
25
|
+
# property :text, default: 'Score is #{player.score}'
|
26
26
|
# end
|
27
27
|
#
|
28
28
|
# @example Using a text property with a different property name
|
@@ -31,7 +31,7 @@ module Metro
|
|
31
31
|
# property :description, type: :text
|
32
32
|
#
|
33
33
|
# def draw
|
34
|
-
# description_font.draw
|
34
|
+
# description_font.draw description, x, y, z_order, x_factor, y_factor, color
|
35
35
|
# end
|
36
36
|
# end
|
37
37
|
#
|
@@ -57,7 +57,7 @@ module Metro
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def default_text
|
60
|
-
options[:default] || '
|
60
|
+
options[:default] || 'TEXT NOT SPECIFIED!'
|
61
61
|
end
|
62
62
|
|
63
63
|
end
|
data/lib/metro/scene.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
module Metro
|
2
|
+
module Units
|
3
|
+
class Dimensions < Struct.new(:width,:height)
|
4
|
+
|
5
|
+
def self.none
|
6
|
+
new 0.0, 0.0
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.of(width,height)
|
10
|
+
new width.to_f, height.to_f
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.parse(string)
|
14
|
+
to *string.split(",",2).map(&:to_f)
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_s
|
18
|
+
"#{width},#{height}"
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Metro
|
2
|
+
module Units
|
3
|
+
class Point < Struct.new(:x,:y,:z)
|
4
|
+
def self.zero
|
5
|
+
new 0.0, 0.0, 0.0
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.at(x,y,z=0.0)
|
9
|
+
new x.to_f, y.to_f, z.to_f
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.parse(string)
|
13
|
+
at *string.split(",",3).map(&:to_f)
|
14
|
+
end
|
15
|
+
|
16
|
+
alias_method :z_order, :z
|
17
|
+
alias_method :z_order=, :z=
|
18
|
+
|
19
|
+
def to_s
|
20
|
+
"#{x},#{y},#{z}"
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Metro
|
2
|
+
module Units
|
3
|
+
class Scale < Struct.new(:x_factor,:y_factor)
|
4
|
+
|
5
|
+
def self.one
|
6
|
+
new 1.0, 1.0
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.to(x,y)
|
10
|
+
new x.to_f, y.to_f
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.parse(string)
|
14
|
+
to *string.split(",",2).map(&:to_f)
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_s
|
18
|
+
"#{x_factor},#{y_factor}"
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/metro/version.rb
CHANGED
data/lib/metro.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
+
require 'delegate'
|
2
|
+
require 'logger'
|
3
|
+
require 'erb'
|
4
|
+
|
1
5
|
require 'gosu'
|
2
|
-
require 'gosu_ext/color'
|
3
|
-
require 'gosu_ext/image'
|
4
|
-
require 'gosu_ext/gosu_constants'
|
5
6
|
require 'i18n'
|
6
7
|
require 'active_support'
|
7
8
|
require 'active_support/dependencies'
|
@@ -9,15 +10,16 @@ require 'active_support/inflector'
|
|
9
10
|
require 'active_support/core_ext/hash'
|
10
11
|
require 'active_support/hash_with_indifferent_access'
|
11
12
|
|
13
|
+
require 'gosu_ext/color'
|
14
|
+
require 'gosu_ext/image'
|
15
|
+
require 'gosu_ext/animation'
|
16
|
+
require 'gosu_ext/gosu_constants'
|
12
17
|
require 'core_ext/numeric'
|
13
|
-
require 'logger'
|
14
|
-
require 'erb'
|
15
18
|
|
16
19
|
require 'locale/locale'
|
20
|
+
|
17
21
|
require 'metro/asset_path'
|
18
|
-
require 'metro/
|
19
|
-
require 'metro/models/scale'
|
20
|
-
require 'metro/models/dimensions'
|
22
|
+
require 'metro/units/units'
|
21
23
|
require 'metro/logging'
|
22
24
|
require 'metro/version'
|
23
25
|
require 'metro/template_message'
|
@@ -12,8 +12,19 @@ class GameScene < Metro::Scene
|
|
12
12
|
event :on_up, KbR do |event|
|
13
13
|
if event.control?
|
14
14
|
Metro.reload!
|
15
|
-
transition_to
|
15
|
+
transition_to scene_name
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
+
#
|
20
|
+
# @example Setting up the ability for all subclassed scenes
|
21
|
+
# to be edited with the 'Ctrl+E' event
|
22
|
+
#
|
23
|
+
event :on_up, KbR do |event|
|
24
|
+
if event.control?
|
25
|
+
transition_to scene_name, with: edit
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
|
19
30
|
end
|
data/lib/templates/model.rb.tt
CHANGED
@@ -1,21 +1,59 @@
|
|
1
1
|
class <%= model_name %> < GameModel
|
2
2
|
|
3
3
|
#
|
4
|
-
#
|
4
|
+
# Properties
|
5
5
|
#
|
6
|
-
#
|
6
|
+
# Models commonly have properties that you want to be able to get, set, and save.
|
7
|
+
# Usually within ruby you would write attr_accessor methods and initialize them.
|
8
|
+
# Metro provides some shorthand class helper methods that allow you to quickly
|
9
|
+
# define these properties with the added benefit that they will be persisted when
|
10
|
+
# the model is saved within the view and the type will be maintained.
|
7
11
|
#
|
8
|
-
#
|
12
|
+
# # @example of adding a `position` property to your model
|
13
|
+
# # Property defines a `position` accessor as well as `x`, `y`, and `z` (or `z_order`)
|
14
|
+
# # accessors.
|
15
|
+
# property :position
|
16
|
+
#
|
17
|
+
# # @example of adding an `image` property to your model
|
18
|
+
# # An image property can be set up with an image path or that can be set later
|
19
|
+
# # through the `image` accessor that is added.
|
20
|
+
#
|
21
|
+
# property :image, path: "player.png"
|
22
|
+
#
|
23
|
+
# # @example of adding an `numeric` property to your model
|
24
|
+
# # A lot of times you want to track some numeric value like score. Here we
|
25
|
+
# # create a `score` accessor and assign a default value.
|
26
|
+
# property :score, type: numeric, default: 0
|
27
|
+
#
|
28
|
+
# # @example of adding an `text` property to your model
|
29
|
+
# # A lot of times you want to track some numeric value like score. Here we
|
30
|
+
# # create a `text` accessor and assign a default value.
|
31
|
+
# property :description, type: text, default: 'Greetings Earthling!'
|
32
|
+
#
|
33
|
+
# For more information see the other defined properties.
|
34
|
+
#
|
35
|
+
# @see Metro::Model::AnimationProperty
|
36
|
+
# @see Metro::Model::ImageProperty
|
37
|
+
# @see Metro::Model::NumericProperty
|
38
|
+
# @see Metro::Model::ScaleProperty
|
39
|
+
# @see Metro::Model::TextProperty
|
40
|
+
# @see Metro::Model::PositionProperty
|
41
|
+
# @see Metro::Model::FontProperty
|
42
|
+
#
|
43
|
+
|
44
|
+
#
|
45
|
+
# Events
|
46
|
+
#
|
47
|
+
# # @example Registering the keyboard down event to execute a block of code
|
48
|
+
# event :on_down, GpLeft, GpUp, do
|
9
49
|
# turn_left
|
10
50
|
# end
|
11
51
|
#
|
12
|
-
# @example Registering the keyboard up key to execute the method `jump`
|
13
|
-
#
|
52
|
+
# # @example Registering the keyboard up key to execute the method `jump`
|
14
53
|
# event :on_up, KbEscape, do: :jump
|
15
54
|
#
|
16
|
-
# @example Registering for button held events that would build the model's acceleration
|
17
|
-
#
|
18
|
-
# event :on_hold, KbRight, Gosu::GpRight do
|
55
|
+
# # @example Registering for button held events that would build the model's acceleration
|
56
|
+
# event :on_hold, KbRight, GpRight do
|
19
57
|
# acceleration += 1
|
20
58
|
# end
|
21
59
|
#
|
@@ -26,8 +64,8 @@ class <%= model_name %> < GameModel
|
|
26
64
|
# @see https://github.com/jlnr/gosu/blob/master/Gosu/ButtonsWin.hpp
|
27
65
|
#
|
28
66
|
#
|
29
|
-
# @example Registering for an event called 'save_complete' event that anyone
|
30
|
-
# can generate and this scene block will execute this code.
|
67
|
+
# # @example Registering for an event called 'save_complete' event that anyone
|
68
|
+
# # can generate and this scene block will execute this code.
|
31
69
|
#
|
32
70
|
# event :notification, :game_over do
|
33
71
|
# puts "Game is Over!"
|
@@ -37,10 +75,11 @@ class <%= model_name %> < GameModel
|
|
37
75
|
# to generate the notification
|
38
76
|
#
|
39
77
|
# def update_score
|
40
|
-
# score = score + 1
|
78
|
+
# @score = score + 1
|
41
79
|
# if score >= winning_score
|
42
80
|
# notification :game_over
|
43
81
|
# end
|
82
|
+
# end
|
44
83
|
#
|
45
84
|
|
46
85
|
#
|
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.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -110,6 +110,7 @@ files:
|
|
110
110
|
- Rakefile
|
111
111
|
- bin/metro
|
112
112
|
- changelog.md
|
113
|
+
- lib/assets/missing.png
|
113
114
|
- lib/assets/missing_animation.png
|
114
115
|
- lib/commands/generate_game.rb
|
115
116
|
- lib/commands/generate_model.rb
|
@@ -117,6 +118,7 @@ files:
|
|
117
118
|
- lib/commands/generate_view.rb
|
118
119
|
- lib/commands/thor.rb
|
119
120
|
- lib/core_ext/numeric.rb
|
121
|
+
- lib/gosu_ext/animation.rb
|
120
122
|
- lib/gosu_ext/color.rb
|
121
123
|
- lib/gosu_ext/gosu_constants.rb
|
122
124
|
- lib/gosu_ext/image.rb
|
@@ -124,7 +126,6 @@ files:
|
|
124
126
|
- lib/locale/locale.rb
|
125
127
|
- lib/metro.rb
|
126
128
|
- lib/metro/animation/after_interval_factory.rb
|
127
|
-
- lib/metro/animation/animation.rb
|
128
129
|
- lib/metro/animation/animation_factory.rb
|
129
130
|
- lib/metro/animation/easing.rb
|
130
131
|
- lib/metro/animation/has_animations.rb
|
@@ -145,7 +146,6 @@ files:
|
|
145
146
|
- lib/metro/game/dsl.rb
|
146
147
|
- lib/metro/logging.rb
|
147
148
|
- lib/metro/missing_scene.rb
|
148
|
-
- lib/metro/models/dimensions.rb
|
149
149
|
- lib/metro/models/draws.rb
|
150
150
|
- lib/metro/models/key_value_coding.rb
|
151
151
|
- lib/metro/models/model.rb
|
@@ -156,7 +156,6 @@ files:
|
|
156
156
|
- lib/metro/models/models/label.rb
|
157
157
|
- lib/metro/models/models/menu.rb
|
158
158
|
- lib/metro/models/models/rectangle.rb
|
159
|
-
- lib/metro/models/point.rb
|
160
159
|
- lib/metro/models/properties/angle.rb
|
161
160
|
- lib/metro/models/properties/animation.rb
|
162
161
|
- lib/metro/models/properties/color.rb
|
@@ -170,7 +169,6 @@ files:
|
|
170
169
|
- lib/metro/models/properties/text.rb
|
171
170
|
- lib/metro/models/properties/velocity.rb
|
172
171
|
- lib/metro/models/rectangle_bounds.rb
|
173
|
-
- lib/metro/models/scale.rb
|
174
172
|
- lib/metro/scene.rb
|
175
173
|
- lib/metro/scenes.rb
|
176
174
|
- lib/metro/template_message.rb
|
@@ -178,6 +176,10 @@ files:
|
|
178
176
|
- lib/metro/transitions/fade_transition_scene.rb
|
179
177
|
- lib/metro/transitions/scene_transitions.rb
|
180
178
|
- lib/metro/transitions/transition_scene.rb
|
179
|
+
- lib/metro/units/dimensions.rb
|
180
|
+
- lib/metro/units/point.rb
|
181
|
+
- lib/metro/units/scale.rb
|
182
|
+
- lib/metro/units/units.rb
|
181
183
|
- lib/metro/version.rb
|
182
184
|
- lib/metro/views/json_view.rb
|
183
185
|
- lib/metro/views/no_view.rb
|
@@ -223,12 +225,13 @@ licenses: []
|
|
223
225
|
post_install_message: ! " ______ ___ _____\n ___ |/ /_____ __ /_______________\n
|
224
226
|
\ __ /|_/ / _ _ \\_ __/__ ___/_ __ \\\n _ / / / / __// /_ _ / /
|
225
227
|
/_/ /\n /_/ /_/ \\___/ \\__/ /_/ \\____/\n\n Thank you for installing
|
226
|
-
metro 0.
|
227
|
-
\ Changes:\n \n *
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
\
|
228
|
+
metro 0.2.0 / 2012-11-07.\n ---------------------------------------------------------------------\n
|
229
|
+
\ Changes:\n \n * Views now use position instead of `x`, `y`, and `z-order`\n
|
230
|
+
\ * Point, Scale, and Dimensions is available in model and scenes.\n * Events are
|
231
|
+
shared from superclasses to subclases.\n * Templates updated to use GameScene and
|
232
|
+
GameModel for each game.\n * Models are automatically added to the update loop\n
|
233
|
+
\ * Model properties now make it easier to store/retrieve various\n common numeric,
|
234
|
+
position font, image, and animation properties.\n \n \n\n ---------------------------------------------------------------------\n"
|
232
235
|
rdoc_options: []
|
233
236
|
require_paths:
|
234
237
|
- lib
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module Metro
|
2
|
-
class Dimensions < Struct.new(:width,:height)
|
3
|
-
|
4
|
-
def self.none
|
5
|
-
new 0.0, 0.0
|
6
|
-
end
|
7
|
-
|
8
|
-
def self.of(width,height)
|
9
|
-
new width.to_f, height.to_f
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.parse(string)
|
13
|
-
to *string.split(",",2).map(&:to_f)
|
14
|
-
end
|
15
|
-
|
16
|
-
def to_s
|
17
|
-
"#{width},#{height}"
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|
data/lib/metro/models/point.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
module Metro
|
2
|
-
class Point < Struct.new(:x,:y,:z)
|
3
|
-
def self.zero
|
4
|
-
new 0.0, 0.0, 0.0
|
5
|
-
end
|
6
|
-
|
7
|
-
def self.at(x,y,z=0.0)
|
8
|
-
new x.to_f, y.to_f, z.to_f
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.parse(string)
|
12
|
-
at *string.split(",",3).map(&:to_f)
|
13
|
-
end
|
14
|
-
|
15
|
-
alias_method :z_order, :z
|
16
|
-
alias_method :z_order=, :z=
|
17
|
-
|
18
|
-
def to_s
|
19
|
-
"#{x},#{y},#{z}"
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
data/lib/metro/models/scale.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
module Metro
|
2
|
-
class Scale < Struct.new(:x_factor,:y_factor)
|
3
|
-
|
4
|
-
def self.one
|
5
|
-
new 1.0, 1.0
|
6
|
-
end
|
7
|
-
|
8
|
-
def self.to(x,y)
|
9
|
-
new x.to_f, y.to_f
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.parse(string)
|
13
|
-
to *string.split(",",2).map(&:to_f)
|
14
|
-
end
|
15
|
-
|
16
|
-
def to_s
|
17
|
-
"#{x_factor},#{y_factor}"
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|