module NWN::Gff::List

Public Instance Methods

add_struct(struct_id_or_struct = 0) { |struct| ... } click to toggle source

Add a new struct member to this list. You can either add an existing struct to this list (which will reparent it by setting .element), or specify a new struct with a block, or both:

root = Gff::Struct.new 0xffffffff, "UTI", "V3.2"
list = root.add_list 'test', []
list.add_struct 1 do |l|
  l.add_byte 'inner_test', 5
  l.add_cexolocstr 'exolocstr', { 0 => 'Hello', 4 => 'Hallo' }
end
y root

results in:

--- !nwn-lib.elv.es,2008-12/struct
__data_type: UTI
__struct_id: 4294967295
test:
type: :list
  value:
  - !nwn-lib.elv.es,2008-12/struct
    __data_type: UTI/test
    __struct_id: 1
    exolocstr:
      type: :cexolocstr
      value:
        0: Hello
        4: Hallo
    inner_test: {type: :byte, value: 5}}
# File lib/nwn/gff/list.rb, line 32
def add_struct struct_id_or_struct = 0, &block
  struct = case struct_id_or_struct
    when Integer
      s = NWN::Gff::Struct.new
      s.struct_id = struct_id_or_struct
      s

    when NWN::Gff::Struct
      struct_id_or_struct

    else
      raise ArgumentError, "specify either a struct_id or an existing struct"
  end

  struct.element = self

  yield(struct) if block_given?

  self.v << struct
  struct
end