metro 0.2.7 → 0.3.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 CHANGED
@@ -1,5 +1,14 @@
1
1
  # Metro
2
2
 
3
+ ## 0.3.0 / 2012-11-25
4
+
5
+ * FIX lots of typos in the documentation
6
+ * Removed `up_action_missing` and `down_ation_missing` event handling
7
+ * Notification events now have block support for 0, 1 and 2 parameters
8
+ * FIX Registration of custom defined custom view parsers
9
+ * FIX Grid Layer layout for Edit Mode
10
+
11
+
3
12
  ## 0.2.7 / 2012/11-20
4
13
 
5
14
  * FIX to the new game template
data/lib/commands/thor.rb CHANGED
@@ -81,3 +81,5 @@ require_relative 'generate_game'
81
81
  require_relative 'generate_model'
82
82
  require_relative 'generate_scene'
83
83
  require_relative 'generate_view'
84
+ require_relative 'build_windows'
85
+ require_relative 'build_mac'
@@ -2,14 +2,14 @@ class Numeric
2
2
 
3
3
  #
4
4
  # Set the tick interval which is used in conversion of seconds to
5
- # ticks. By default
5
+ # ticks.
6
6
  #
7
7
  def self.tick_interval=(value)
8
8
  @tick_interval = value.to_f
9
9
  end
10
10
 
11
11
  #
12
- # @return the game tick interval.
12
+ # @return the game tick interval. By default the tick interval is 16.66666
13
13
  #
14
14
  def self.tick_interval
15
15
  @tick_interval.to_f == 0 ? 16.666666 : @tick_interval.to_f
@@ -22,7 +22,7 @@ class Numeric
22
22
  # game ticks. This is to allow for a number of seconds to be expressed
23
23
  # in situations where game ticks are used (e.g. animations).
24
24
  #
25
- # @example Expressing an animation that takes place over 3 seconds (180 ticks)
25
+ # @example Expressing an animation that takes place over 3 seconds (~180 ticks)
26
26
  #
27
27
  # class ExampleScene < Metro::Scene
28
28
  # draws :title
@@ -8,8 +8,24 @@ module Metro
8
8
  end
9
9
 
10
10
  #
11
- # A simplier syntax to enqueue an animation. At the moment this animation is going
12
- # to be an implicit animation.
11
+ # Define an animation from within another animation block, an event block
12
+ # or a method.
13
+ #
14
+ # @example Defining an animation that fades out the hero when they have
15
+ # died.
16
+ #
17
+ # class HellScene
18
+ # draws :hero
19
+ #
20
+ # def update
21
+ # if hero.dead?
22
+ # animate :hero, to: { alpha: 0 }, interval: 60.ticks do
23
+ # transition_to :game_over
24
+ # end
25
+ # end
26
+ # end
27
+ #
28
+ # end
13
29
  #
14
30
  def animate(actor_or_actor_name,options,&block)
15
31
  options[:actor] = actor(actor_or_actor_name)
@@ -29,7 +45,7 @@ module Metro
29
45
  # @example Defining an animation that fades in and moves a logo when it is
30
46
  # done, transition to the title scene.
31
47
  #
32
- # animate :logo, to: { y: 80, alpha: 50 }, interval: 120 do
48
+ # animate :logo, to: { y: 80, alpha: 50 }, interval: 120.ticks do
33
49
  # transition_to :title
34
50
  # end
35
51
  #
@@ -18,29 +18,6 @@ module Metro
18
18
  # @see #on_down
19
19
  # @see #on_hold
20
20
  #
21
- # A target can also receive events when 'button_up' and 'button_down' events
22
- # have been fired but did not map to any specified actions. This is similar to
23
- # Ruby's {#method_missing}.
24
- #
25
- # To receive unampped 'button_up' events define a method
26
- # named `up_action_missing(id)` within your target.
27
- #
28
- # To receive unampped 'button_down' events define a method
29
- # named `down_action_missing(id)` within your target.
30
- #
31
- # @example Scene that receives all the 'button_up' and 'button_down' events that
32
- # are not mapped to actions.
33
- #
34
- # class ExampleScene
35
- # def up_action_missing(id)
36
- # puts "No up action found for #{id}"
37
- # end
38
- #
39
- # def down_action_missing(id)
40
- # puts "No down action found for #{id}"
41
- # end
42
- # end
43
- #
44
21
  class EventRelay
45
22
 
46
23
  #
@@ -276,22 +253,20 @@ module Metro
276
253
  execute_block_for_target(&action) if window and window.button_down?(key)
277
254
  end
278
255
  end
279
-
256
+
280
257
  def execute_block_for_target(&block)
281
258
  event_data = EventData.new(window)
282
259
  target.instance_exec(event_data,&block)
283
260
  end
284
261
 
285
- # @return a block of code that is mapped for the 'button_up' id or a block that will attempt to call out
286
- # to the action missing method.
262
+ # @return a block of code that is mapped for the 'button_up' id
287
263
  def up_action(id)
288
- up_actions[id] || lambda {|instance| send(:up_action_missing,id) if respond_to?(:up_action_missing) }
264
+ up_actions[id] || lambda {|no_op| }
289
265
  end
290
266
 
291
- # @return a block of code that is mapped for the 'button_down' id or a block that will attempt to call out
292
- # to the action missing method.
267
+ # @return a block of code that is mapped for the 'button_down' id
293
268
  def down_action(id)
294
- down_actions[id] || lambda {|instance| send(:down_action_missing,id) if respond_to?(:down_action_missing) }
269
+ down_actions[id] || lambda {|no_op| }
295
270
  end
296
271
 
297
272
  #
@@ -311,14 +286,11 @@ module Metro
311
286
  # of the target. If there are two parameters we will simply execute the action and
312
287
  # pass it both the target and the sender.
313
288
  #
314
- # @TODO: Allow for the blocks to be specified with one parameter: source (and executed
315
- # within the context of the target)
316
- #
317
- # @TODO: Allow for the blocks to be specified with three parameters: source, target, event
318
- #
319
289
  def _fire_event_for_notification(event,sender,action)
320
290
  if action.arity == 2
321
- action.call(target,sender)
291
+ target.instance_exec(sender,event,&action)
292
+ elsif action.arity == 1
293
+ target.instance_exec(sender,&action)
322
294
  else
323
295
  target.instance_eval(&action)
324
296
  end
@@ -25,15 +25,15 @@ module Metro
25
25
  # @example Registering for button held events
26
26
  #
27
27
  # class ExampleScene
28
- # event :on_hold KbLeft, Gosu::GpLeft do
28
+ # event :on_hold KbLeft, GpLeft do
29
29
  # player.turn_left
30
30
  # end
31
31
  #
32
- # event :on_hold, KbRight, Gosu::GpRight do
32
+ # event :on_hold, KbRight, GpRight do
33
33
  # player.turn_right
34
34
  # end
35
35
  #
36
- # event :on_hold, KbUp, Gosu::GpButton0, do: :calculate_accleration
36
+ # event :on_hold, KbUp, GpButton0, do: :calculate_accleration
37
37
  #
38
38
  # def calculate_acceleration
39
39
  # long_complicated_calculated_result = 0
@@ -66,7 +66,7 @@ module Metro
66
66
  # @example Registering for a button down event to call a method named 'previous_option'
67
67
  #
68
68
  # class ExampleScene
69
- # event :on_down, Gosu::GpLeft, Gosu::GpUp, do: :previous_option
69
+ # event :on_down, GpLeft, GpUp, do: :previous_option
70
70
  #
71
71
  # def previous_option
72
72
  # @selected_index = @selected_index - 1
@@ -81,7 +81,7 @@ module Metro
81
81
  # @example Registering for a button down event with a block of code to execute
82
82
  #
83
83
  # class ExampleScene
84
- # event :on_down, Gosu::GpLeft, Gosu::GpUp do
84
+ # event :on_down, GpLeft, GpUp do
85
85
  # @selected_index = @selected_index - 1
86
86
  # @selected_index = options.length - 1 if @selected_index <= -1
87
87
  # end
@@ -18,11 +18,11 @@ module Metro
18
18
  # @example Defining a title label within a scene
19
19
  #
20
20
  # class ExampleScene
21
- # draw :title, text: Title Screen',
22
- # 'model' => 'metro::ui::label'
23
- # position: "20,20,0",
24
- # scale: "3,3",
25
- # color: "rgba(255,255,255,1.0)"
21
+ # draw :title, text: 'Title Screen',
22
+ # model: 'metro::ui::label'
23
+ # position: '20,20,0',
24
+ # scale: '3,3',
25
+ # color: 'rgba(255,255,255,1.0)'
26
26
  #
27
27
  # def show
28
28
  # puts "Where is my title? #{title.x},#{title.y}"
@@ -2,8 +2,8 @@ module Metro
2
2
  class Model
3
3
 
4
4
  #
5
- # A animation property manages an Animation, which is an array of Gosu::Images,
6
- # and some metadata.
5
+ # An animation property manages an Animation, which is an array of
6
+ # Gosu::Images and some metadata.
7
7
  #
8
8
  # @see Animation
9
9
  #
@@ -75,7 +75,7 @@ module Metro
75
75
  end
76
76
 
77
77
  private
78
-
78
+
79
79
  def create_animation(properties)
80
80
  self.class.animation_for properties
81
81
  end
@@ -20,13 +20,13 @@ module Metro
20
20
  # @example Defining a dimensions providing a default
21
21
  #
22
22
  # class Hero < Metro::Model
23
- # property :dimensions, default: Dimensions.of 100.0, 100.0
23
+ # property :dimensions, default: Dimensions.of(100.0, 100.0)
24
24
  # end
25
25
  #
26
26
  # @example Using a dimensions property with a different property name
27
27
  #
28
28
  # class Hero < Metro::Model
29
- # property :box, type: dimensions, default: Dimensions.of 100.0, 100.0
29
+ # property :box, type: dimensions, default: Dimensions.of(100.0, 100.0)
30
30
  # # box_width, box_height
31
31
  # end
32
32
  #
@@ -2,58 +2,56 @@ module Metro
2
2
  class Model
3
3
 
4
4
  #
5
- # A scale property maintains an x and y scaling factor. This scale is not applied to any
5
+ # A scale property maintains an x and y scaling factor.
6
6
  #
7
- # A font property also defines a `font_size` property and a `font_name` property which allows a
8
- # more direct interface. Changing these values will update the font the next time that it is drawn.
7
+ # A scale property also defines a `x_factor` property and a `y_factor`
8
+ # property which allows a more direct interface. Changing these values will
9
+ # update the scale the next time that it is used.
9
10
  #
10
- # A font is stored in the properties as a hash representation and is converted into
11
- # a Gosu::Font when it is retrieved within the system. When retrieving a font the Font
12
- # Property will attempt to use a font that already exists that meets that criteria.
11
+ # A scale is stored in the properties as a string representation and is
12
+ # converted into a Scale when it is retrieved within the system.
13
13
  #
14
- # The fonts are cached within the font property to help performance by reducing the unncessary
15
- # creation of similar fonts.
16
- #
17
- # @example Defining a font property
14
+ # @example Defining a scale property
18
15
  #
19
16
  # class Scoreboard < Metro::Model
20
17
  # property :font
18
+ # property :color
19
+ # property :scale
21
20
  #
22
21
  # def draw
23
- # font.draw text, x, y, z_order, x_factor, y_factor, color
22
+ # image.draw text, x, y, z_order, x_factor, y_factor, color
24
23
  # end
25
24
  #
26
25
  # end
27
26
  #
28
- # @example Defining a font property providing a default
29
- #
30
- # class Hero < Metro::Model
31
- # property :font, default: { name: 'Comic Sans', size: 80 }
32
- # end
33
- #
34
- # @example Using the `font_size` and `font_name` properties
27
+ # @example Defining a scale property providing a default
35
28
  #
36
29
  # class Hero < Metro::Model
37
- # property :color, default: "rgba(255,0,0,1.0)"
38
- #
39
- # def dignified
40
- # self.font_size = 45
41
- # self.font_name = 'Helvetica'
42
- # end
30
+ # property :image, path: 'hero.jpg'
31
+ # property :scale, default: "1.0,1.0"
43
32
  # end
44
33
  #
45
- # @example Using a font property with a different property name
34
+ # @example Using a scale property with a different property name
46
35
  #
47
36
  # class Hero < Metro::Model
48
- # property :alt_font, type: :font, default: "rgba(255,0,255,1.0)"
37
+ # property :image, path: 'hero.jpg'
38
+ # property :enraged_scale, type: :scale, default: "4.0,4.0"
39
+ # property :angle
40
+ # property :color
49
41
  #
50
42
  # def draw
51
- # puts "Font: #{alt_font_name}:#{alt_font_size}"
52
- # alt_font.draw text, x, y, z_order, x_factor, y_factor, color
43
+ # image.draw_rot x, y, z_order, angle.to_f, 0.5, 0.5,
44
+ # enraged_scale_factor_x, enraged_scale_factor_y, color
53
45
  # end
54
46
  # end
55
47
  #
56
48
  class ScaleProperty < Property
49
+ void drawRot(double x, double y, ZPos z,
50
+ double angle, double centerX = 0.5, double centerY = 0.5,
51
+ double factorX = 1, double factorY = 1,
52
+ Color c = Color::WHITE,
53
+ AlphaMode mode = amDefault) const;
54
+
57
55
 
58
56
  define_property :x_factor
59
57
 
@@ -11,6 +11,10 @@ module Metro
11
11
  # @example Defining a text property
12
12
  #
13
13
  # class Scoreboard < Metro::Model
14
+ # property :font
15
+ # property :position
16
+ # property :color
17
+ # property :scale
14
18
  # property :text
15
19
  #
16
20
  # def draw
@@ -22,16 +26,21 @@ module Metro
22
26
  # @example Defining with a default and text that will be instance evaluated.
23
27
  #
24
28
  # class ScoreBoard < Metro::Model
25
- # property :text, default: 'Score is #{player.score}'
29
+ # property :score
30
+ # property :text, default: 'Score is #{score}'
26
31
  # end
27
32
  #
28
33
  # @example Using a text property with a different property name
29
34
  #
30
35
  # class Hero < Metro::Model
36
+ # proeprty :font
37
+ # property :position
38
+ # property :color
39
+ # property :scale
31
40
  # property :description, type: :text
32
41
  #
33
42
  # def draw
34
- # description_font.draw description, x, y, z_order, x_factor, y_factor, color
43
+ # font.draw description, x, y, z_order, x_factor, y_factor, color
35
44
  # end
36
45
  # end
37
46
  #
data/lib/metro/scene.rb CHANGED
@@ -61,8 +61,8 @@ module Metro
61
61
  def draw ; end
62
62
 
63
63
  #
64
- # Before a scene is transisitioned away from to a new scene, this method is called
65
- # to allow for the scene to complete any taskss, stop any actions, or pass any
64
+ # Before a scene is transitioned away from to a new scene, this method is called
65
+ # to allow for the scene to complete any tasks, stop any actions, or pass any
66
66
  # information from the existing scene to the scene that is about to replace it.
67
67
  #
68
68
  # @note This method should be implemented in the Scene subclass.
@@ -73,8 +73,8 @@ module Metro
73
73
  def prepare_transition_to(new_scene) ; end
74
74
 
75
75
  #
76
- # Before a scene is transisitioned to it is called with the previous scene. This
77
- # allows for the new scene to rerieve any data from the previous scene to assist
76
+ # Before a scene is transitioned to it is called with the previous scene. This
77
+ # allows for the new scene to retrieve any data from the previous scene to assist
78
78
  # with the layout of the current scene.
79
79
  #
80
80
  # @note This method should be implemented in the Scene subclass.
data/lib/metro/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Metro
2
- VERSION = "0.2.7"
2
+ VERSION = "0.3.0"
3
3
  WEBSITE = "https://github.com/burtlo/metro"
4
4
  CONTACT_EMAILS = ["franklin.webber@gmail.com"]
5
5
 
@@ -7,7 +7,7 @@ module Metro
7
7
  # A NoView is a last resort view which means this is will always will exist.
8
8
  #
9
9
  # @param [String] view_path the name of the view to find
10
- # @return a true if the json view exists and false if it does not exist.
10
+ # @return a true all the time as this is the last resort format.
11
11
  #
12
12
  def self.exists?(view_path)
13
13
  true
@@ -8,18 +8,34 @@ module Metro
8
8
  module Parsers
9
9
  extend self
10
10
 
11
+ #
12
+ # Register a view parser.
13
+ #
14
+ # A parser is any class or instance that responds to #exists?(view_path),
15
+ # #parse(view_path) and #format.
16
+ #
17
+ # @param [Parser] parser the parser to add to the list of available parsers.
18
+ #
11
19
  def register(parser)
12
20
  parsers.push parser
13
21
  end
14
22
 
23
+ #
24
+ # @return [Array<Parsers>] an array of all the registered view parsers. The
25
+ # last parser is the NoView parser.
26
+ #
15
27
  def parsers
16
28
  @parsers ||= []
17
29
  end
30
+
31
+ def parsers_with_no_view_fallback
32
+ parsers + [ NoView ]
33
+ end
34
+
18
35
  end
19
36
 
20
37
  Parsers.register YAMLView
21
38
  Parsers.register JSONView
22
- Parsers.register NoView
23
39
 
24
40
  end
25
41
  end
@@ -80,7 +80,7 @@ module Metro
80
80
  # Supported view formats
81
81
  #
82
82
  def supported_parsers
83
- Views::Parsers.parsers
83
+ Views::Parsers.parsers_with_no_view_fallback
84
84
  end
85
85
 
86
86
  #
@@ -7,14 +7,29 @@ module Metro
7
7
  module Writers
8
8
  extend self
9
9
 
10
+ #
11
+ # Register a view writer
12
+ #
13
+ # A writer is any class or instance that responds to #write(view_path,content),
14
+ # and #format.
15
+ #
16
+ # @param [Writer] writer the writer to add to the list of available writers..
17
+ #
10
18
  def register(writer)
11
19
  writers.push writer
12
20
  end
13
21
 
22
+ #
23
+ # @return [Array<Writers>] an array of all the registered view writers.
24
+ #
14
25
  def writers
15
26
  @writers ||= []
16
27
  end
17
28
 
29
+ #
30
+ # The default view writer, this is the one that will be used if no view
31
+ # can be found by the writers.
32
+ #
18
33
  attr_accessor :default_writer
19
34
 
20
35
  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.2.7
4
+ version: 0.3.0
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-11-21 00:00:00.000000000 Z
12
+ date: 2012-11-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: gosu
@@ -250,10 +250,11 @@ licenses: []
250
250
  post_install_message: ! " ______ ___ _____\n ___ |/ /_____ __ /_______________\n
251
251
  \ __ /|_/ / _ _ \\_ __/__ ___/_ __ \\\n _ / / / / __// /_ _ / /
252
252
  /_/ /\n /_/ /_/ \\___/ \\__/ /_/ \\____/\n\n Thank you for installing
253
- metro 0.2.7 / 2012/11-20.\n ---------------------------------------------------------------------\n
254
- \ Changes:\n \n * FIX to the new game template\n * Updated the game template
255
- to give more movement to the hero in the first scene\n * Added the fade-in, fade-out
256
- helper to show all the instructions\n \n\n ---------------------------------------------------------------------\n"
253
+ metro 0.3.0 / 2012-11-25.\n ---------------------------------------------------------------------\n
254
+ \ Changes:\n \n * FIX lots of typos in the documentation\n * Removed `up_action_missing`
255
+ and `down_ation_missing` event handling\n * Notification events now have block
256
+ support for 0, 1 and 2 parameters\n * FIX Registration of custom defined custom
257
+ view parsers\n * FIX Grid Layer layout for Edit Mode\n \n \n\n ---------------------------------------------------------------------\n"
257
258
  rdoc_options: []
258
259
  require_paths:
259
260
  - lib