impress/app/models/zone.rb

52 lines
1.3 KiB
Ruby
Raw Normal View History

class Zone < StaticResource
AttributeNames = ['id', 'label', 'depth', 'type_id']
ItemZoneSets = {}
attr_reader *AttributeNames
2010-09-08 19:49:39 -07:00
# When selecting zones that an asset occupies, we allow the zone to set
# whether or not the zone is "sometimes" occupied. This is false by default.
attr_writer :sometimes
def initialize(attributes)
AttributeNames.each do |name|
instance_variable_set "@#{name}", attributes[name]
end
end
2010-09-08 19:49:39 -07:00
def uncertain_label
@sometimes ? "#{label} sometimes" : label
end
2012-10-08 19:20:18 -07:00
def self.find_set(name)
ItemZoneSets[plain(name)]
end
def self.plain(name)
name.delete('\- /').downcase
end
n = 0
@objects = YAML.load_file(Rails.root.join('config', 'zones.yml')).map do |a|
a['id'] = (n += 1)
obj = new(a)
if obj.type_id == 2 || obj.type_id == 3
2012-10-08 19:20:18 -07:00
plain_name = plain(obj.label)
ItemZoneSets[plain_name] ||= []
ItemZoneSets[plain_name] << obj
end
obj
end
n = nil
2012-10-08 19:20:18 -07:00
# Add aliases to keys like "lowerforegrounditem" to "lowerforeground"
# ...unless there's already such a key, like "backgrounditem" to "background",
# in which case we don't, because that'd be silly.
ItemZoneSets.keys.each do |name|
if name.end_with?('item')
stripped_name = name[0..-5]
ItemZoneSets[stripped_name] ||= ItemZoneSets[name]
end
end
end