r5369 - trunk/misc
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Thu Jan 1 12:12:18 EST 2009
Author: div0
Date: 2009-01-01 12:12:18 -0500 (Thu, 01 Jan 2009)
New Revision: 5369
Modified:
trunk/misc/entmerge.pl
Log:
better keeplights handling
Modified: trunk/misc/entmerge.pl
===================================================================
--- trunk/misc/entmerge.pl 2009-01-01 13:05:55 UTC (rev 5368)
+++ trunk/misc/entmerge.pl 2009-01-01 17:12:18 UTC (rev 5369)
@@ -427,6 +427,9 @@
# THIS part is always an .ent file now
my @entities_entfile = ();
$first = 1;
+
+ my $clear_all_worldlights;
+
for(;;)
{
my ($ent, $brushes) = ParseEntity $fh;
@@ -448,6 +451,13 @@
{
$ent->{classname} = "worldspawn_renamed";
}
+
+ if(!$keeplights && $ent->{classname} =~ /^light/)
+ {
+ # light entity detected!
+ # so let's replace all light entities
+ $clear_all_worldlights = 1;
+ }
}
if(defined $ent->{model} and $ent->{model} =~ /^\*(\d+)$/)
@@ -467,6 +477,39 @@
}
close $fh;
+ if($keeplights && !$entities_entfile[0]->{keeplights})
+ {
+ # PROBLEM:
+ # the .ent file was made without keeplights
+ # merging it with the .map would delete all lights
+ # so insert all light entities here!
+ @entities_skipped = (@entities_skipped,
+ map
+ {
+ my $submodel = undef;
+ if(defined $_->{model} and $_->{model} =~ /^\*(\d+)$/)
+ {
+ $submodel = $submodels[$1];
+ }
+ [ $_, $submodel ]
+ }
+ grep
+ {
+ $_->{classname} =~ /^light/
+ }
+ @entities
+ );
+ }
+
+ if($clear_all_worldlights)
+ {
+ # PROBLEM:
+ # the .ent file was made with keeplights
+ # the .map did not indicate so!
+ # so we must delete all lights from the skipped entity list
+ @entities_skipped = grep { $_->[0]->{classname} !~ /^light/ } @entities_skipped;
+ }
+
if($first)
{
push @entities_entfile, { classname => "worldspawn" };
@@ -478,16 +521,22 @@
my %e = %$_;
my $submodel = undef;
- $e{gridsize} = "64 64 128" if not exists $e{gridsize};
+ $e{gridsize} = "64 64 128" if not exists $e{gridsize} and $first;
$e{lip} /= $scale if exists $e{lip};
- $e{origin} = join ' ', map { $_ / $scale } split /\s+/, $e{origin} if exists $e{origin};
- $e{gridsize} = join ' ', map { $_ / $scale } split /\s+/, $e{gridsize} if exists $e{gridsize} and $first;
+ $e{origin} = sprintf '%.6f %.6f %.6f', map { $_ / $scale } split /\s+/, $e{origin} if exists $e{origin};
+ $e{gridsize} = sprintf '%.6f %.6f %.6f', map { $_ / $scale } split /\s+/, $e{gridsize} if exists $e{gridsize} and $first;
if($first)
{
$submodel = $submodels[0];
- $e{_keeplights} = 1
- if $keeplights;
+ if($keeplights)
+ {
+ $e{_keeplights} = 1;
+ }
+ else
+ {
+ delete $e{_keeplights};
+ }
}
elsif(defined $e{model} and $e{model} =~ /^\*(\d+)$/)
{
@@ -511,6 +560,18 @@
{
my %e = %$_;
+ if($first)
+ {
+ if($keeplights)
+ {
+ $e{_keeplights} = 1;
+ }
+ else
+ {
+ delete $e{_keeplights};
+ }
+ }
+
if(defined $e{model} and $e{model} =~ /^\*(\d+)$/)
{
my $oldorigin = [ split /\s+/, ($e{origin} || "0 0 0") ];
@@ -523,10 +584,10 @@
}
}
- $e{gridsize} = "64 64 128" if not exists $e{gridsize};
+ $e{gridsize} = "64 64 128" if not exists $e{gridsize} and $first;
$e{lip} *= $scale if exists $e{lip};
- $e{origin} = join ' ', map { $_ * $scale } split /\s+/, $e{origin} if exists $e{origin};
- $e{gridsize} = join ' ', map { $_ * $scale } split /\s+/, $e{gridsize} if exists $e{gridsize} and $first;
+ $e{origin} = sprintf '%.6f %.6f %.6f', map { $_ * $scale } split /\s+/, $e{origin} if exists $e{origin};
+ $e{gridsize} = sprintf '%.6f %.6f %.6f', map { $_ * $scale } split /\s+/, $e{gridsize} if exists $e{gridsize} and $first;
print UnparseEntity \%e, undef;
$first = 0;
More information about the nexuiz-commits
mailing list