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