class Table

Constants

MAX_ROW_LENGTH

Public Class Methods

_load(bytes) click to toggle source
# File lib/RGSS.rb, line 69
def self._load(bytes)
  Table.new(bytes)
  end
new(bytes) click to toggle source
# File lib/RGSS.rb, line 24
def initialize(bytes)
  @dim, @x, @y, @z, items, *@data = bytes.unpack('L5 S*')
  raise "Size mismatch loading Table from data" unless items == @data.length
  raise "Size mismatch loading Table from data" unless @x * @y * @z == items
end

Public Instance Methods

_dump(*ignored) click to toggle source
# File lib/RGSS.rb, line 65
def _dump(*ignored)
  return [@dim, @x, @y, @z, @x * @y * @z, *@data].pack('L5 S*')
end
encode_with(coder) click to toggle source
# File lib/RGSS.rb, line 32
def encode_with(coder)
  coder.style = Psych::Nodes::Mapping::BLOCK

  coder['dim'] = @dim
  coder['x'] = @x
  coder['y'] = @y
  coder['z'] = @z

  if @x * @y * @z > 0
    stride = @x < 2 ? (@y < 2 ? @z : @y) : @x
    rows = @data.each_slice(stride).to_a
    if MAX_ROW_LENGTH != -1 && stride > MAX_ROW_LENGTH
      block_length = (stride + MAX_ROW_LENGTH - 1) / MAX_ROW_LENGTH
      row_length = (stride + block_length - 1) / block_length
      rows = rows.collect{|x| x.each_slice(row_length).to_a}.flatten(1)
    end
    rows = rows.collect{|x| x.collect{|y| "%04x" % y}.join(" ")}
      coder['data'] = rows
  else
    coder['data'] = []
    end
end
init_with(coder) click to toggle source
# File lib/RGSS.rb, line 55
def init_with(coder)
  @dim = coder['dim']
  @x = coder['x']
  @y = coder['y']
  @z = coder['z']
  @data = coder['data'].collect{|x| x.split(" ").collect{|y| y.hex}}.flatten
  items = @x * @y * @z
  raise "Size mismatch loading Table from YAML" unless items == @data.length
end