gss/obj2d.rb
2013-11-17 15:42:39 -05:00

43 lines
1.1 KiB
Ruby

#!/usr/bin/env ruby
require "erb"
TEMPLATE = <<EOF
float[2][] vertices = [
<%= vertices.map {|v| v[0, 2].inspect}.join(",\n ") %>
];
<% objects.each_pair do |obj_name, obj_array| %>
int[][][] <%= obj_name %> = [
<%= obj_array.map {|oa| "[" + oa.map {|o| o.inspect}.join(",\n ") + "]"}.join(",\n ") %>
];
<% end %>
EOF
def main(obj_fname, d_fname)
objects = {}
vertices = []
cur_obj = nil
File.read(obj_fname).each_line do |line|
if line =~ /^v\s+(\S+)\s+(\S+)/
vertices << [$1.to_f, $2.to_f]
elsif line =~ /^o\s+(..)-(\d+)/
obj_class, obj_class_index = $1, $2.to_i
objects[obj_class] ||= []
objects[obj_class][obj_class_index] ||= []
cur_obj = objects[obj_class][obj_class_index]
elsif line =~ /^o\s+(.*)/
raise "Do not know how to handle object #{$1.inspect}"
elsif line =~ /^f\s+(\d+)\s+(\d+)\s+(\d+)/
cur_obj << [$1, $2, $3].map(&:to_i)
elsif line =~ /^l\s+(\d+)\s+(\d+)/
cur_obj << [$1, $2].map(&:to_i)
end
end
File.open(d_fname, "w") do |fh|
fh.puts ERB.new(TEMPLATE, nil, "<>").result(binding)
end
end
main(*ARGV)