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