Class: Metro::Model
- Inherits:
-
Object
- Object
- Metro::Model
- Includes:
- HasEvents, KeyValueCoding, PropertyOwner, Units
- Defined in:
- lib/metro/models/model.rb,
lib/metro/models/properties/property.rb,
lib/metro/models/properties/font_property.rb,
lib/metro/models/properties/song_property.rb,
lib/metro/models/properties/text_property.rb,
lib/metro/models/properties/array_property.rb,
lib/metro/models/properties/color_property.rb,
lib/metro/models/properties/image_property.rb,
lib/metro/models/properties/model_property.rb,
lib/metro/models/properties/scale_property.rb,
lib/metro/models/properties/sample_property.rb,
lib/metro/models/properties/boolean_property.rb,
lib/metro/models/properties/numeric_property.rb,
lib/metro/models/properties/position_property.rb,
lib/metro/models/properties/animation_property.rb,
lib/metro/models/properties/dimensions_property.rb,
lib/metro/models/properties/options_property/options.rb,
lib/metro/models/properties/options_property/no_option.rb,
lib/metro/models/properties/options_property/options_property.rb
Overview
The Model is a basic, generic representation of a game object that has a visual representation within the scene’s window.
Model is designed to be an abstract class, to be subclassed by other models.
Direct Known Subclasses
Audio::Song, UI::AnimatedSprite, UI::Border, UI::FPS, UI::Generic, UI::GridDrawer, UI::Image, UI::Label, UI::Menu, UI::ModelLabel, UI::ModelLabeler, UI::Rectangle, UI::Sprite, UI::TileLayer, UI::TileMap
Defined Under Namespace
Classes: AnimationProperty, ArrayProperty, BooleanProperty, ColorProperty, DimensionsProperty, FontProperty, ImageProperty, ModelProperty, NumericProperty, OptionsProperty, PositionProperty, Property, SampleProperty, ScaleProperty, SongProperty, TextProperty
Constant Summary
Constants included from Units
Instance Attribute Summary collapse
-
#scene ⇒ Object
The scene that this model is currently being displayed.
-
#window ⇒ Object
The window that this model that this window is currently being displayed.
Class Method Summary collapse
-
.hierarchy ⇒ Object
An array of all ancestor models by name.
-
.inherited(base) ⇒ Object
Captures all classes that subclass Model.
-
.metro_name ⇒ Object
A common name that can be used through the system as a common identifier.
- .model_name(model_name = nil) ⇒ Object
-
.models ⇒ Object
All subclasses of Model, this should be all the defined.
Instance Method Summary collapse
-
#_load(options = {}) ⇒ Object
Loads a hash of content into the model.
-
#_save ⇒ Object
Generate a hash export of all the fields that were previously stored within the model.
-
#after_initialize ⇒ Object
This is an entry point for customization.
-
#bounds ⇒ Object
By default a model has no bounds.
-
#completed? ⇒ Boolean
This is called after an update.
-
#create(model_name, options = {}) ⇒ Metro::Model
A helper method that allows the current model to generate another model.
-
#draw ⇒ Object
This is called after every #update and when the OS wants the window to repaint itself.
-
#initialize(options = {}) ⇒ Model
constructor
Create an instance of a model.
-
#model ⇒ String
The name of the model class.
-
#name ⇒ String
The name of model as it is used within the view or the scene.
-
#notification(event) ⇒ Object
Generate a custom notification event with the given name.
-
#saveable_to_view ⇒ TrueClass, FalseClass
True if the model should be saved to the view file, false when the model should not be savedable to the view file.
-
#show ⇒ Object
This is an entry point for customization.
-
#to_hash ⇒ Object
Generate a hash representation of the model.
-
#update ⇒ Object
This is called every update interval while the actor is in the scene.
Methods included from HasEvents
Methods included from KeyValueCoding
Methods included from PropertyOwner
Constructor Details
#initialize(options = {}) ⇒ Model
Overridding initialize method should be avoided, using the {#aftter_initialize)
Create an instance of a model.
method or done with care to ensure that functionality is preserved.
159 160 161 162 |
# File 'lib/metro/models/model.rb', line 159 def initialize( = {}) _load() after_initialize end |
Instance Attribute Details
#scene ⇒ Object
The scene that this model is currently being displayed.
The current value of scene is managed by the scene as this is set when the scene is created.
110 111 112 |
# File 'lib/metro/models/model.rb', line 110 def scene @scene end |
#window ⇒ Object
The window that this model that this window is currently being displayed.
The current value of window is managed by the scene as this is set when the Scene is added to the window. All the models gain access to the window.
101 102 103 |
# File 'lib/metro/models/model.rb', line 101 def window @window end |
Class Method Details
.hierarchy ⇒ Object
Returns an array of all ancestor models by name.
213 214 215 |
# File 'lib/metro/models/model.rb', line 213 def self.hierarchy ancestors.find_all {|a| a.respond_to? :metro_name }.map(&:metro_name) end |
.inherited(base) ⇒ Object
Captures all classes that subclass Model.
220 221 222 223 |
# File 'lib/metro/models/model.rb', line 220 def self.inherited(base) models << base.to_s Models.add(base) end |
.metro_name ⇒ Object
Returns a common name that can be used through the system as a common identifier.
206 207 208 |
# File 'lib/metro/models/model.rb', line 206 def self.metro_name name.underscore end |
.model_name(model_name = nil) ⇒ Object
68 69 70 71 |
# File 'lib/metro/models/model.rb', line 68 def self.model_name(model_name=nil) @model_name ||= to_s.underscore model_name ? @model_name = model_name.to_s : @model_name end |
.models ⇒ Object
All subclasses of Model, this should be all the defined
228 229 230 |
# File 'lib/metro/models/model.rb', line 228 def self.models @models ||= [] end |
Instance Method Details
#_load(options = {}) ⇒ Object
Loads a hash of content into the model. This process will convert the hash of content into setter and getter methods with appropriate ruby style names.
This is used internally when the model is created for the Scene. It is loaded with the contents of the view.
171 172 173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/metro/models/model.rb', line 171 def _load( = {}) # Clean up and symbolize all the keys then merge that with the existing properties .keys.each do |key| property_name = key.to_s.underscore.to_sym if respond_to? "#{property_name}=" send("#{property_name}=",.delete(key)) else [property_name] = .delete(key) end end properties.merge! end |
#_save ⇒ Object
Generate a hash export of all the fields that were previously stored within the model.
This is used internally within the scene to transfer the data from one model to another model.
192 193 194 |
# File 'lib/metro/models/model.rb', line 192 def _save properties end |
#after_initialize ⇒ Object
This method should be implemented in the Model subclass.
This is an entry point for customization. As the model’s #initialize method performs may perform some initialization that may be necessary.
At this point the model has been created. However, the window and scene of the model will not have been defined and defined properties rely on the window or scene will return nil values. Other properties also will likely not be set.
31 |
# File 'lib/metro/models/model.rb', line 31 def after_initialize ; end |
#bounds ⇒ Object
By default a model has no bounds. Each subclass of model will have to define how their bounds are defined.
149 150 151 |
# File 'lib/metro/models/model.rb', line 149 def bounds Bounds.none end |
#completed? ⇒ Boolean
This method should be implemented in the Model sublclass if you are interested in having the model be removed from the scene.
This is called after an update. A model normally is not removed after an update, however if the model responds true to #completed? then it will be removed.
58 |
# File 'lib/metro/models/model.rb', line 58 def completed? ; false ; end |
#create(model_name, options = {}) ⇒ Metro::Model
A helper method that allows the current model to generate another model. This is useful as it allows for the current model to pass window and scene state to the created model.
136 137 138 139 140 141 142 143 |
# File 'lib/metro/models/model.rb', line 136 def create(model_name,={}) # @TODO: this is another path that parallels the ModelFactory model_class = Metro::Models.find(model_name) mc = model_class.new mc.scene = scene mc.window = window mc end |
#draw ⇒ Object
This method should be implemented in the Model subclass.
This is called after every #update and when the OS wants the window to repaint itself.
66 |
# File 'lib/metro/models/model.rb', line 66 def draw ; end |
#model ⇒ String
Returns the name of the model class.
76 |
# File 'lib/metro/models/model.rb', line 76 property :model, type: :text |
#name ⇒ String
Returns the name of model as it is used within the view or the scene. This is the common name, the key within the view file, or the name symbol name specified in the scene.
83 |
# File 'lib/metro/models/model.rb', line 83 property :name, type: :text |
#notification(event) ⇒ Object
Generate a custom notification event with the given name.
119 120 121 |
# File 'lib/metro/models/model.rb', line 119 def notification(event) scene.notification(event.to_sym,self) end |
#saveable_to_view ⇒ TrueClass, FalseClass
Returns true if the model should be saved to the view file, false when the model should not be savedable to the view file.
89 |
# File 'lib/metro/models/model.rb', line 89 property :saveable_to_view, type: :boolean, default: true |
#show ⇒ Object
This method may be implemented in the Model subclass.
This is an entry point for customization. After the model’s properties have been set and the model has been assigned to the window and scene this method is called. Here is where customization of properties or final positioning can be performed.
41 |
# File 'lib/metro/models/model.rb', line 41 def show ; end |
#to_hash ⇒ Object
Generate a hash representation of the model.
199 200 201 |
# File 'lib/metro/models/model.rb', line 199 def to_hash { name => properties.except(:name) } end |
#update ⇒ Object
This method should be implemented in the Model subclass
This is called every update interval while the actor is in the scene
48 |
# File 'lib/metro/models/model.rb', line 48 def update ; end |