module RBStarbound::SBAsset6

Attributes

file_count[R]
index[R]
index_offset[R]
metadata[R]
metadata_offset[R]
verbose[RW]

Public Class Methods

get(path) click to toggle source
# File lib/rbstarbound/sbasset6.rb, line 14
def self.get(path)
  raise SBAsset6Error, 'No package file given' if @package.nil?
  offset, length = @index[path]
  rewind_to(offset)
  @package.read(length)
end
meta_header() click to toggle source
# File lib/rbstarbound/sbasset6.rb, line 52
def self.meta_header
  @package.read(5)
end
package(io) click to toggle source
# File lib/rbstarbound/sbasset6.rb, line 7
def self.package(io)
  @package = io
  raise SBAsset6Error, 'No package file given' if @package.nil?
  read_header
  read_index
end

Private Class Methods

read_header() click to toggle source
# File lib/rbstarbound/sbasset6.rb, line 21
def self.read_header
  rewind_to(0)
  header, @metadata_offset = @package.read(16).unpack('A8Q>')
  raise SBAsset6Error, 'Invalid header' unless header == 'SBAsset6'
  read_metadata
end
read_index() click to toggle source
# File lib/rbstarbound/sbasset6.rb, line 28
def self.read_index
  puts 'Loading index...' if @verbose
  rewind_to(@index_offset)
  @index = {}
  @file_count.times do
    path = RBStarbound::SBON.read_string(@package)
    offset, length = @package.read(16).unpack('Q>Q>')
    @index[path] = [offset, length]
  end
  puts 'Index loaded.' if @verbose
end
read_metadata() click to toggle source
# File lib/rbstarbound/sbasset6.rb, line 40
def self.read_metadata
  rewind_to(@metadata_offset)
  raise SBAsset6Error, 'Invalid index data' unless meta_header == 'INDEX'
  @metadata = RBStarbound::SBON.read_map(@package)
  @file_count = RBStarbound::SBON.read_varint(@package)
  @index_offset = @package.pos
end
rewind_to(pos) click to toggle source
# File lib/rbstarbound/sbasset6.rb, line 48
def self.rewind_to(pos)
  @package.seek(pos, IO::SEEK_SET)
end