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