#!/usr/bin/env perl
use 5.010;
use warnings;
use strict;
use autodie;
my %systems;
my $cdata = do { local $/; <> };
for my $record ($cdata =~ m{\G.*?{ (.*?) }, //}smgc) {
$record =~ s/[\r\n]//smg;
my ($name, $startype, $x, $y, $v) = $record =~ m{"(.*?)", 0, ({.*?}), ([+\-\d]+), ([+\-\d]+), vector3f\(([\-\d\.,]+)\)};
$startype =~ s/SBody::TYPE_/Body.Type./g;
my $def = sprintf q{CustomSystem:new("%s",%s):add_to_sector(%d,%d,v(%s))}, $name, $startype, $x, $y, $v;
push @{$systems{$x}{$y}}, [ $name, $def ];
}
for my $x (keys %systems) {
for my $y (keys %{$systems{$x}}) {
my $dir = sprintf "%s%02d%s%02d", $x < 0 ? 'n' : 'p', abs $x, $y < 0 ? 'n' : 'p', abs $y;
my $next = 0;
if (-d $dir) {
opendir my $dh, $dir;
$next = grep { m/^\d\d_/ } readdir $dh;
closedir $dh;
}
else {
mkdir $dir, 0755;
}
for my $sys (@{$systems{$x}{$y}}) {
my ($name, $def) = @$sys;
$name = lc $name;
$name =~ s/ +/_/g;
$name =~ s{/}{_}g;
my $filename = sprintf q{%02d_%s.lua}, $next, $name;
print "$dir/$filename\n";
open my $out, '>', "$dir/$filename";
print $out $def;
close $out;
$next++;
}
}
}