Advertisement
robn

Untitled

Mar 27th, 2011
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.37 KB | None | 0 0
  1. #!/usr/bin/env perl
  2.  
  3. use 5.010;
  4. use warnings;
  5. use strict;
  6. use autodie;
  7.  
  8. my %systems;
  9.  
  10. my $cdata = do { local $/; <> };
  11.  
  12. for my $record ($cdata =~ m{\G.*?{ (.*?) }, //}smgc) {
  13.     $record =~ s/[\r\n]//smg;
  14.  
  15.     my ($name, $startype, $x, $y, $v) = $record =~ m{"(.*?)", 0, ({.*?}), ([+\-\d]+), ([+\-\d]+), vector3f\(([\-\d\.,]+)\)};
  16.  
  17.     $startype =~ s/SBody::TYPE_/Body.Type./g;
  18.  
  19.     my $def = sprintf q{CustomSystem:new("%s",%s):add_to_sector(%d,%d,v(%s))}, $name, $startype, $x, $y, $v;
  20.  
  21.     push @{$systems{$x}{$y}}, [ $name, $def ];
  22. }
  23.  
  24. for my $x (keys %systems) {
  25.     for my $y (keys %{$systems{$x}}) {
  26.         my $dir = sprintf "%s%02d%s%02d", $x < 0 ? 'n' : 'p', abs $x, $y < 0 ? 'n' : 'p', abs $y;
  27.  
  28.         my $next = 0;
  29.         if (-d $dir) {
  30.             opendir my $dh, $dir;
  31.             $next = grep { m/^\d\d_/ } readdir $dh;
  32.             closedir $dh;
  33.         }
  34.         else {
  35.             mkdir $dir, 0755;
  36.         }
  37.  
  38.         for my $sys (@{$systems{$x}{$y}}) {
  39.             my ($name, $def) = @$sys;
  40.  
  41.             $name = lc $name;
  42.             $name =~ s/ +/_/g;
  43.             $name =~ s{/}{_}g;
  44.  
  45.             my $filename = sprintf q{%02d_%s.lua}, $next, $name;
  46.  
  47.             print "$dir/$filename\n";
  48.  
  49.             open my $out, '>', "$dir/$filename";
  50.             print $out $def;
  51.             close $out;
  52.  
  53.             $next++;
  54.         }
  55.     }
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement