Module: Quake::EntityParser

Defined in:
lib/quake/entity.rb

Overview

Parses the BSP entity string into an array of Entity objects.

Class Method Summary collapse

Class Method Details

.build_target_map(entities) ⇒ Object

Build a lookup table: targetname -> [Entity]



108
109
110
111
112
113
114
# File 'lib/quake/entity.rb', line 108

def self.build_target_map(entities)
  map = Hash.new { |h, k| h[k] = [] }
  entities.each do |ent|
    map[ent.targetname] << ent if ent.targetname
  end
  map
end

.parse(entity_string) ⇒ Object



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/quake/entity.rb', line 85

def self.parse(entity_string)
  entities = []
  current = nil

  entity_string.each_line do |line|
    line = line.strip
    case line
    when "{"
      current = {}
    when "}"
      entities << Entity.new(current) if current
      current = nil
    else
      if current && line =~ /\A"([^"]+)"\s+"([^"]*)"\z/
        current[$1] = $2
      end
    end
  end

  entities
end