Don't replace sectors inside details if the sector is in that detail

This commit is contained in:
Nick 2023-08-04 22:04:22 -04:00
parent 6c18dd2797
commit 963c67210c
2 changed files with 13 additions and 7 deletions

View File

@ -112,6 +112,8 @@ namespace NewHorizons.Builder.Props
// Could check this in the for loop but I'm not sure what order we need to know about this in // Could check this in the for loop but I'm not sure what order we need to know about this in
isItem = false; isItem = false;
var existingSectors = new HashSet<Sector>(prop.GetComponentsInChildren<Sector>());
foreach (var component in prop.GetComponentsInChildren<Component>(true)) foreach (var component in prop.GetComponentsInChildren<Component>(true))
{ {
// Components can come through as null here (yes, really), // Components can come through as null here (yes, really),
@ -127,7 +129,10 @@ namespace NewHorizons.Builder.Props
{ {
if (FixUnsectoredComponent(component)) continue; if (FixUnsectoredComponent(component)) continue;
} }
else FixSectoredComponent(component, sector, detail.keepLoaded); else
{
FixSectoredComponent(component, sector, existingSectors, detail.keepLoaded);
}
FixComponent(component, go, detail.ignoreSun); FixComponent(component, go, detail.ignoreSun);
} }
@ -235,7 +240,7 @@ namespace NewHorizons.Builder.Props
/// <summary> /// <summary>
/// Fix components that have sectors. Has a specific fix if there is a VisionTorchItem on the object. /// Fix components that have sectors. Has a specific fix if there is a VisionTorchItem on the object.
/// </summary> /// </summary>
private static void FixSectoredComponent(Component component, Sector sector, bool keepLoaded) private static void FixSectoredComponent(Component component, Sector sector, HashSet<Sector> existingSectors, bool keepLoaded)
{ {
// keepLoaded should remove existing groups // keepLoaded should remove existing groups
// renderers/colliders get enabled later so we dont have to do that here // renderers/colliders get enabled later so we dont have to do that here
@ -246,14 +251,14 @@ namespace NewHorizons.Builder.Props
} }
// fix Sector stuff, eg SectorCullGroup (without this, props that have a SectorCullGroup component will become invisible inappropriately) // fix Sector stuff, eg SectorCullGroup (without this, props that have a SectorCullGroup component will become invisible inappropriately)
if (component is ISectorGroup sectorGroup) if (component is ISectorGroup sectorGroup && !existingSectors.Contains(sectorGroup.GetSector()))
{ {
sectorGroup.SetSector(sector); sectorGroup.SetSector(sector);
} }
// Not doing else if here because idk if any of the classes below implement ISectorGroup // Not doing else if here because idk if any of the classes below implement ISectorGroup
if (component is Sector s) if (component is Sector s && existingSectors.Contains(s.GetParentSector()))
{ {
s.SetParentSector(sector); s.SetParentSector(sector);
} }
@ -269,14 +274,14 @@ namespace NewHorizons.Builder.Props
sectorCullGroup.SetVisible(sectorCullGroup.ShouldBeVisible(), true, false); sectorCullGroup.SetVisible(sectorCullGroup.ShouldBeVisible(), true, false);
} }
else if(component is SectoredMonoBehaviour behaviour) else if(component is SectoredMonoBehaviour behaviour && !existingSectors.Contains(behaviour._sector))
{ {
// not using SetSector here because it registers the events twice // not using SetSector here because it registers the events twice
// perhaps this happens with ISectorGroup.SetSector or Sector.SetParentSector too? idk and nothing seems to break because of it yet // perhaps this happens with ISectorGroup.SetSector or Sector.SetParentSector too? idk and nothing seems to break because of it yet
behaviour._sector = sector; behaviour._sector = sector;
} }
else if(component is OWItemSocket socket) else if(component is OWItemSocket socket && !existingSectors.Contains(socket._sector))
{ {
socket._sector = sector; socket._sector = sector;
} }
@ -287,7 +292,7 @@ namespace NewHorizons.Builder.Props
} }
else if(component is NomaiRemoteCameraPlatform remoteCameraPlatform) else if(component is NomaiRemoteCameraPlatform remoteCameraPlatform && !existingSectors.Contains(remoteCameraPlatform._visualSector))
{ {
remoteCameraPlatform._visualSector = sector; remoteCameraPlatform._visualSector = sector;
} }

View File

@ -25,6 +25,7 @@ namespace NewHorizons.Builder.Props
.Rename("Prefab_GravityCannon") .Rename("Prefab_GravityCannon")
.DontDestroyOnLoad(); .DontDestroyOnLoad();
} }
if (_detailedPlatformPrefab == null) if (_detailedPlatformPrefab == null)
{ {
// Creating it in the original position so we can instantiate the other parts in the right relative positions // Creating it in the original position so we can instantiate the other parts in the right relative positions