mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
91 lines
2.5 KiB
Ruby
91 lines
2.5 KiB
Ruby
class Data
|
|
|
|
class Ability
|
|
attr_reader :id
|
|
attr_reader :id_number
|
|
attr_reader :real_name
|
|
attr_reader :real_description
|
|
|
|
DATA = {}
|
|
|
|
def initialize(hash)
|
|
validate hash => Hash, hash[:id] => Symbol
|
|
@id = hash[:id]
|
|
@id_number = hash[:id_number] || -1
|
|
@real_name = hash[:name] || "Unnamed"
|
|
@real_description = hash[:description] || "???"
|
|
end
|
|
|
|
# @return [String] the translated name of this ability
|
|
def name
|
|
return pbGetMessage(MessageTypes::Abilities, @id_number)
|
|
end
|
|
|
|
# @return [String] the translated description of this ability
|
|
def description
|
|
return pbGetMessage(MessageTypes::AbilityDescs, @id_number)
|
|
end
|
|
|
|
# @param other [Symbol, Ability, Integer]
|
|
# @return [Boolean] whether other is the same as this ability
|
|
def ==(other)
|
|
return false if other.nil?
|
|
validate other => [Symbol, Ability, Integer]
|
|
if other.is_a?(Symbol)
|
|
return @id == other
|
|
elsif other.is_a?(Ability)
|
|
return @id == other.id
|
|
elsif other.is_a?(Integer)
|
|
return @id_number == other
|
|
end
|
|
return false
|
|
end
|
|
|
|
# @param ability_id [Symbol, Ability, Integer]
|
|
# @return [Boolean] whether the given ability_id is defined as an Ability
|
|
def self.exists?(ability_id)
|
|
return false if ability_id.nil?
|
|
validate ability_id => [Symbol, Ability, Integer]
|
|
ability_id = ability_id.id if ability_id.is_a?(Ability)
|
|
return !DATA[ability_id].nil?
|
|
end
|
|
|
|
# @param ability_id [Symbol, Ability, Integer]
|
|
# @return [Ability]
|
|
def self.get(ability_id)
|
|
validate ability_id => [Symbol, Ability, Integer]
|
|
return ability_id if ability_id.is_a?(Ability)
|
|
# if ability_id.is_a?(Integer)
|
|
# p "Please switch to symbols, thanks."
|
|
# end
|
|
raise "Unknown ability ID #{ability_id}." unless DATA.has_key?(ability_id)
|
|
return DATA[ability_id]
|
|
end
|
|
|
|
def self.try_get(ability_id)
|
|
return nil if ability_id.nil?
|
|
validate ability_id => [Symbol, Ability, Integer]
|
|
return ability_id if ability_id.is_a?(Ability)
|
|
# if ability_id.is_a?(Integer)
|
|
# p "Please switch to symbols, thanks."
|
|
# end
|
|
return (DATA.has_key?(ability_id)) ? DATA[ability_id] : nil
|
|
end
|
|
|
|
def self.each
|
|
DATA.keys.sort.each do |key|
|
|
yield DATA[key] if key.is_a?(Symbol)
|
|
end
|
|
end
|
|
|
|
def self.load
|
|
const_set(:DATA, load_data("Data/abilities.dat"))
|
|
end
|
|
|
|
def self.save
|
|
save_data(DATA, "Data/abilities.dat")
|
|
end
|
|
end
|
|
|
|
end
|