lib/mikunyan/asset.rb in mikunyan-3.9.5 vs lib/mikunyan/asset.rb in mikunyan-3.9.6
- old
+ new
@@ -8,11 +8,11 @@
# @attr_reader [Array<Mikunyan::Asset::Klass>] klasses defined classes
# @attr_reader [Array<Mikunyan::Asset::ObjectData>] objects included objects
# @attr_reader [Array<Integer>] add_ids ?
# @attr_reader [Array<Mikunyan::Asset::Reference>] references reference data
class Asset
- attr_reader :name, :format, :generator_version, :target_platform, :endian, :klasses, :objects, :add_ids, :references
+ attr_reader :name, :format, :generator_version, :target_platform, :endian, :klasses, :objects, :add_ids, :references, :res_s
# Struct for representing Asset class definition
# @attr [Integer] class_id class ID
# @attr [Integer,nil] script_id script ID
# @attr [String] hash hash value (16 or 32 bytes)
@@ -38,13 +38,14 @@
Reference = Struct.new(:path, :guid, :type, :file_path)
# Load Asset from binary string
# @param [String] bin binary data
# @param [String] name Asset name
+ # @param [String] res_s resS data
# @return [Mikunyan::Asset] deserialized Asset object
- def self.load(bin, name)
- r = Asset.new(name)
+ def self.load(bin, name, res_s = nil)
+ r = Asset.new(name, res_s)
r.send(:load, bin)
r
end
# Load Asset from file
@@ -121,13 +122,14 @@
end
end
private
- def initialize(name)
+ def initialize(name, res_s = nil)
@name = name
@endian = :big
+ @res_s = res_s
end
def load(bin)
br = BinaryReader.new(bin)
metadata_size = br.i32u
@@ -243,9 +245,12 @@
r.value = br.read(size * children[0][:children].find{|e| e[:name] == 'data'}[:node].size).force_encoding("utf-8")
br.align(4) if children[0][:node].flags & 0x4000 != 0
else
r.value = parse_object_private(br, children[0]).value
end
+ elsif node.type == 'StreamingInfo'
+ children.each{|child| r[child[:name]] = parse_object_private(br, child)}
+ r.value = @res_s.byteslice(r['offset'].value, r['size'].value) if r['path'].value == "archive:/#{name}/#{name}.resS"
else
children.each do |child|
r[child[:name]] = parse_object_private(br, child)
end
end