metro 0.1.3 → 0.1.4
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 +4 -0
- data/lib/commands/thor.rb +1 -1
- data/lib/metro.rb +21 -28
- data/lib/metro/asset_path.rb +22 -0
- data/lib/metro/events/event_relay.rb +1 -1
- data/lib/metro/logging.rb +33 -0
- data/lib/metro/models/model.rb +3 -8
- data/lib/metro/scene.rb +3 -14
- data/lib/metro/version.rb +1 -1
- data/lib/templates/game/scenes/brand_to_title_scene.rb +1 -1
- data/lib/templates/scene.rb.erb +4 -4
- data/metro.gemspec +0 -1
- metadata +7 -24
data/changelog.md
CHANGED
data/lib/commands/thor.rb
CHANGED
data/lib/metro.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'gosu'
|
2
2
|
require 'gosu_ext/color'
|
3
3
|
require 'gosu_ext/gosu_constants'
|
4
|
-
require 'sender'
|
5
4
|
require 'i18n'
|
6
5
|
|
7
6
|
|
@@ -11,6 +10,8 @@ require 'logger'
|
|
11
10
|
require 'erb'
|
12
11
|
|
13
12
|
require 'locale/locale'
|
13
|
+
require 'metro/asset_path'
|
14
|
+
require 'metro/logging'
|
14
15
|
require 'metro/version'
|
15
16
|
require 'metro/template_message'
|
16
17
|
require 'metro/window'
|
@@ -28,28 +29,6 @@ require_relative 'metro/missing_scene'
|
|
28
29
|
#
|
29
30
|
Game = Metro::Game
|
30
31
|
|
31
|
-
def asset_path(name)
|
32
|
-
File.join Dir.pwd, "assets", name
|
33
|
-
end
|
34
|
-
|
35
|
-
def log
|
36
|
-
@log ||= begin
|
37
|
-
logger = Logger.new(STDOUT)
|
38
|
-
logger.level = Logger::DEBUG
|
39
|
-
logger
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def error(messages, details = {})
|
44
|
-
details = { show: true }.merge details
|
45
|
-
|
46
|
-
message = TemplateMessage.new messages: messages, details: details,
|
47
|
-
website: Game.website, contact: Game.contact
|
48
|
-
|
49
|
-
warn message if details[:show]
|
50
|
-
exit 1
|
51
|
-
end
|
52
|
-
|
53
32
|
module Metro
|
54
33
|
extend self
|
55
34
|
extend GosuConstants
|
@@ -71,6 +50,7 @@ module Metro
|
|
71
50
|
#
|
72
51
|
def run(filename=default_game_filename)
|
73
52
|
load_game_files
|
53
|
+
change_into_game_directory(filename)
|
74
54
|
load_game_configuration(filename)
|
75
55
|
configure_controls!
|
76
56
|
start_game
|
@@ -80,13 +60,26 @@ module Metro
|
|
80
60
|
|
81
61
|
def load_game_files
|
82
62
|
$LOAD_PATH.unshift(Dir.pwd) unless $LOAD_PATH.include?(Dir.pwd)
|
83
|
-
|
84
|
-
|
63
|
+
load_paths 'models', 'scenes', 'lib'
|
64
|
+
end
|
65
|
+
|
66
|
+
def change_into_game_directory(filename)
|
67
|
+
game_directory = File.dirname(filename)
|
68
|
+
Dir.chdir game_directory
|
69
|
+
end
|
70
|
+
|
71
|
+
def load_paths(*paths)
|
72
|
+
paths.flatten.compact.each {|path| load_path path }
|
73
|
+
end
|
74
|
+
|
75
|
+
def load_path(path)
|
76
|
+
Dir["#{path}/**/*.rb"].each {|model| require model }
|
85
77
|
end
|
86
78
|
|
87
79
|
def load_game_configuration(filename)
|
88
|
-
|
89
|
-
|
80
|
+
gamefile = File.basename(filename)
|
81
|
+
game_files_exist!(gamefile)
|
82
|
+
game_contents = File.read(gamefile)
|
90
83
|
game_block = lambda {|instance| eval(game_contents) }
|
91
84
|
game = Game::DSL.parse(&game_block)
|
92
85
|
Game.setup game
|
@@ -110,7 +103,7 @@ module Metro
|
|
110
103
|
|
111
104
|
def game_file_exists?(file)
|
112
105
|
unless File.exists? file
|
113
|
-
error "error.missing_metro_file", file: file
|
106
|
+
error! "error.missing_metro_file", file: file
|
114
107
|
end
|
115
108
|
end
|
116
109
|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#
|
2
|
+
# The asset_path is a helper which will generate a filepath based on the current working
|
3
|
+
# directory of the game. This allows for game author's to specify a path relative within
|
4
|
+
# the assets directory of their game.
|
5
|
+
#
|
6
|
+
# @note Paths that are defined within views use this helper and are assumed to be paths
|
7
|
+
# relative within the assets directory of the game.
|
8
|
+
#
|
9
|
+
# @example Loading the branding image for the player model.
|
10
|
+
#
|
11
|
+
# class Player < Metro::Model
|
12
|
+
# def image
|
13
|
+
# @image ||= Gosu::Image.new( window, asset_path("player.png"), false )
|
14
|
+
# end
|
15
|
+
# def draw
|
16
|
+
# image.draw_rot(x,y,2,angle)
|
17
|
+
# end
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
def asset_path(name)
|
21
|
+
File.join Dir.pwd, "assets", name
|
22
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
|
2
|
+
#
|
3
|
+
# Generates a default logger to standard out that can be used within Metro or the game.
|
4
|
+
#
|
5
|
+
# @example Outputting information at the debug level
|
6
|
+
#
|
7
|
+
# log.debug "The the screen resolution is #{Game.width},#{Game.height}"
|
8
|
+
#
|
9
|
+
def log
|
10
|
+
@log ||= begin
|
11
|
+
logger = Logger.new(STDOUT)
|
12
|
+
logger.level = Logger::DEBUG
|
13
|
+
logger
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
#
|
18
|
+
# Display an error message defined within the localization file. A game error displays
|
19
|
+
# a error title, message, and actions that can be taken to possibly address this issue.
|
20
|
+
#
|
21
|
+
# @param [String] message the I18n string found in the locale file.
|
22
|
+
# @param [Hash] details contains all the possible key-value pairs that might be needed
|
23
|
+
# for the localized error messages.
|
24
|
+
#
|
25
|
+
def error!(messages, details = {})
|
26
|
+
details = { show: true }.merge details
|
27
|
+
|
28
|
+
message = TemplateMessage.new messages: messages, details: details,
|
29
|
+
website: Game.website, contact: Game.contact
|
30
|
+
|
31
|
+
warn message if details[:show]
|
32
|
+
exit 1
|
33
|
+
end
|
data/lib/metro/models/model.rb
CHANGED
@@ -50,7 +50,7 @@ module Metro
|
|
50
50
|
# @param [Symbol] event the name of the notification to generate.
|
51
51
|
#
|
52
52
|
def notification(event)
|
53
|
-
scene.notification(event.to_sym)
|
53
|
+
scene.notification(event.to_sym,self)
|
54
54
|
end
|
55
55
|
|
56
56
|
#
|
@@ -121,9 +121,7 @@ module Metro
|
|
121
121
|
options.each do |raw_key,value|
|
122
122
|
|
123
123
|
key = raw_key.to_s.dup
|
124
|
-
key.gsub
|
125
|
-
key.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
|
126
|
-
key.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
|
124
|
+
key = key.gsub(/-/,'_').snake_case
|
127
125
|
|
128
126
|
unless respond_to? key
|
129
127
|
self.class.send :define_method, key do
|
@@ -187,10 +185,7 @@ module Metro
|
|
187
185
|
hash = Hash.new(Models::Generic)
|
188
186
|
|
189
187
|
models.each do |model|
|
190
|
-
common_name = model.to_s.
|
191
|
-
common_name.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
|
192
|
-
common_name.downcase!
|
193
|
-
|
188
|
+
common_name = model.to_s.snake_case
|
194
189
|
hash[common_name] = model
|
195
190
|
end
|
196
191
|
hash
|
data/lib/metro/scene.rb
CHANGED
@@ -104,16 +104,9 @@ module Metro
|
|
104
104
|
# Post a custom notification event. This will trigger any objects that are listening
|
105
105
|
# for custom events.
|
106
106
|
#
|
107
|
-
def notification(event)
|
107
|
+
def notification(event,sender=nil)
|
108
108
|
|
109
|
-
|
110
|
-
# the api call to generate a notification simply `#notification`. Freeing the caller
|
111
|
-
# from having to include themself in the execution.
|
112
|
-
#
|
113
|
-
# @note if the sender functionality proves troublesome across platforms this can
|
114
|
-
# be dropped and simply require the sender to be included.
|
115
|
-
#
|
116
|
-
sender = __sender__ rescue UnknownSender
|
109
|
+
sender = sender || UnknownSender
|
117
110
|
|
118
111
|
event_relays.each do |relay|
|
119
112
|
relay.fire_events_for_notification(event,sender)
|
@@ -287,11 +280,7 @@ module Metro
|
|
287
280
|
#
|
288
281
|
def self.scene_name(scene_name=nil)
|
289
282
|
@scene_name ||= begin
|
290
|
-
|
291
|
-
root_name.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
|
292
|
-
root_name.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
|
293
|
-
root_name.downcase!
|
294
|
-
root_name
|
283
|
+
to_s.gsub(/_?Scene$/i,'').snake_case
|
295
284
|
end
|
296
285
|
|
297
286
|
scene_name ? @scene_name = scene_name.to_s : @scene_name
|
data/lib/metro/version.rb
CHANGED
data/lib/templates/scene.rb.erb
CHANGED
@@ -10,8 +10,8 @@ class <%= scene_class_name %> < Metro::Scene
|
|
10
10
|
#
|
11
11
|
# draw :title, 'text' => 'Title Screen',
|
12
12
|
# 'x' => 20, 'y' => 20, 'z-order' => 0,
|
13
|
-
# '
|
14
|
-
# 'color' =>
|
13
|
+
# 'size' => 40,
|
14
|
+
# 'color' => 'rgb(255,255,255)',
|
15
15
|
# 'model' => 'metro::models::label'
|
16
16
|
#
|
17
17
|
# The draw method can be simplier for models that have content defined
|
@@ -39,7 +39,7 @@ class <%= scene_class_name %> < Metro::Scene
|
|
39
39
|
#
|
40
40
|
# @example Registering the keyboard down event to execute a block of code
|
41
41
|
#
|
42
|
-
# event :on_down,
|
42
|
+
# event :on_down, GpLeft, GpUp, do
|
43
43
|
# transition_to :next_scene
|
44
44
|
# end
|
45
45
|
#
|
@@ -49,7 +49,7 @@ class <%= scene_class_name %> < Metro::Scene
|
|
49
49
|
#
|
50
50
|
# @example Registering for button held events that would move an actor named `player`
|
51
51
|
#
|
52
|
-
# event :on_hold, KbRight,
|
52
|
+
# event :on_hold, KbRight, GpRight do
|
53
53
|
# title.alpha = title.alpha - 1
|
54
54
|
# end
|
55
55
|
# Keystroke and Game Event Reference
|
data/metro.gemspec
CHANGED
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.4
|
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-
|
12
|
+
date: 2012-10-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: gosu
|
@@ -43,22 +43,6 @@ dependencies:
|
|
43
43
|
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: 0.16.0
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: sender
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ~>
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: 1.5.10
|
54
|
-
type: :runtime
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 1.5.10
|
62
46
|
- !ruby/object:Gem::Dependency
|
63
47
|
name: i18n
|
64
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,6 +113,7 @@ files:
|
|
129
113
|
- lib/metro/animation/implicit_animation.rb
|
130
114
|
- lib/metro/animation/on_update_operation.rb
|
131
115
|
- lib/metro/animation/scene_animation.rb
|
116
|
+
- lib/metro/asset_path.rb
|
132
117
|
- lib/metro/events/control_definition.rb
|
133
118
|
- lib/metro/events/controls.rb
|
134
119
|
- lib/metro/events/event_factory.rb
|
@@ -137,6 +122,7 @@ files:
|
|
137
122
|
- lib/metro/events/unknown_sender.rb
|
138
123
|
- lib/metro/game.rb
|
139
124
|
- lib/metro/game/dsl.rb
|
125
|
+
- lib/metro/logging.rb
|
140
126
|
- lib/metro/missing_scene.rb
|
141
127
|
- lib/metro/models/draws.rb
|
142
128
|
- lib/metro/models/generic.rb
|
@@ -184,12 +170,9 @@ licenses: []
|
|
184
170
|
post_install_message: ! " ______ ___ _____\n ___ |/ /_____ __ /_______________\n
|
185
171
|
\ __ /|_/ / _ _ \\_ __/__ ___/_ __ \\\n _ / / / / __// /_ _ / /
|
186
172
|
/_/ /\n /_/ /_/ \\___/ \\__/ /_/ \\____/\n\n Thank you for installing
|
187
|
-
metro 0.1.
|
188
|
-
\ Changes:\n \n *
|
189
|
-
|
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"
|
173
|
+
metro 0.1.4 / 2012-10-28.\n ---------------------------------------------------------------------\n
|
174
|
+
\ Changes:\n \n * Removed dependency on the sender gem so metro is playable
|
175
|
+
on Windows\n \n\n ---------------------------------------------------------------------\n"
|
193
176
|
rdoc_options: []
|
194
177
|
require_paths:
|
195
178
|
- lib
|