class Table

Public Class Methods

_load(obj) click to toggle source
# File lib/rmxp_extractor/classnames.rb, line 105
def self._load(obj)
  data = obj.unpack("VVVVVv*")
  @num_of_dimensions, @xsize, @ysize, @zsize, @num_of_elements, *@elements = *data
  s_hash = {
    dimensions: @num_of_dimensions,
    width: @xsize,
    height: @ysize,
    depth: @zsize,
    size: @num_of_elements,
    elements: [],
  }
  hash = {}
  s_hash.each do |key, value|
    hash[key.to_s] = value
  end
  hash["elements"] = *@elements

  Table.new(hash)
end
new(hash, resize = true) click to toggle source
# File lib/rmxp_extractor/classnames.rb, line 41
def initialize(hash, resize = true)
  @num_of_dimensions = hash["dimensions"]
  @xsize = hash["width"]
  @ysize = hash["height"]
  @zsize = hash["depth"]
  @num_of_elements = hash["size"]
  @elements = []
  if @num_of_dimensions > 1 && !resize
    hash["elements"].each_with_index do |value, uindex|
      @elements << []
      value.each_with_index do |value, index|
        @elements[uindex] << eval(value) #!Yep, you can do this to turn strings back into arrays
      end
    end
  else
    @elements = hash["elements"]
  end

  if resize
    if @num_of_dimensions > 1
      if @xsize > 1
        @elements = @elements.each_slice(@xsize).to_a
      else
        @elements = @elements.map { |element| [element] }
      end
    end
    if @num_of_dimensions > 2
      if @ysize > 1
        @elements = @elements.each_slice(@ysize).to_a
      else
        @elements = @elements.map { |element| [element] }
      end
    end
  end
end

Public Instance Methods

_dump(limit) click to toggle source
# File lib/rmxp_extractor/classnames.rb, line 101
def _dump(limit)
  [@num_of_dimensions, @xsize, @ysize, @zsize, @num_of_elements, *@elements.flatten].pack("VVVVVv*")
end
hash() click to toggle source
# File lib/rmxp_extractor/classnames.rb, line 77
def hash
  dump = {
    dimensions: @num_of_dimensions,
    width: @xsize,
    height: @ysize,
    depth: @zsize,
    size: @num_of_elements,
    elements: [],
  } #.pack("VVVVVv*")

  if @num_of_dimensions > 1
    @elements.each_with_index do |value, uindex|
      dump[:elements] << []
      value.each_with_index do |value, index|
        dump[:elements][uindex] << value.to_s
      end
    end
  else
    dump[:elements] = *@elements
  end

  dump
end