forked from nikita/muzika-gromche
Fix multiple Light components per animator
Add them all to the allPoweredLights list, not just the whatever first one was found.
This commit is contained in:
parent
0eb02698eb
commit
4d84a2d001
|
@ -3,6 +3,7 @@
|
|||
## MuzikaGromche 13.37.9001
|
||||
|
||||
- Fixed more missing flickering behaviours for some animators controllers.
|
||||
- Fixed some powered lights not fully turning off or flickering when there are multiple Light components per container.
|
||||
|
||||
## MuzikaGromche 13.37.1337 - Photosensitivity Warning Edition
|
||||
|
||||
|
|
|
@ -543,6 +543,7 @@ namespace MuzikaGromche
|
|||
harmony.PatchAll(typeof(JesterPatch));
|
||||
harmony.PatchAll(typeof(EnemyAIPatch));
|
||||
harmony.PatchAll(typeof(PoweredLightsAnimatorsPatch));
|
||||
harmony.PatchAll(typeof(AllPoweredLightsPatch));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -144,4 +144,54 @@ namespace MuzikaGromche
|
|||
PoweredLightsAnimators.Patch(__instance);
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(RoundManager))]
|
||||
static class AllPoweredLightsPatch
|
||||
{
|
||||
// Vanilla method assumes that GameObjects with tag "PoweredLight" only contain a single Light component each.
|
||||
// This is, however, not true for certains double-light setups, such as:
|
||||
// - double PointLight (even though one of them is 'Point' another is 'Spot') inside CeilingFanAnimContainer in BedroomTile/BedroomTileB;
|
||||
// - MineshaftSpotlight when it has not only `Point Light` but also `IndirectLight` in BirthdayRoomTile;
|
||||
// - (maybe more?)
|
||||
// In order to fix that, replace singular GetComponentInChildren<Light> with plural GetComponentsInChildren<Light> version.
|
||||
[HarmonyPatch(nameof(RoundManager.RefreshLightsList))]
|
||||
[HarmonyPrefix]
|
||||
private static bool OnRefreshLightsList(RoundManager __instance)
|
||||
{
|
||||
RefreshLightsListPatched(__instance);
|
||||
// Skip the original method
|
||||
return false;
|
||||
}
|
||||
|
||||
private static void RefreshLightsListPatched(RoundManager self)
|
||||
{
|
||||
// Reusable list to reduce allocations
|
||||
List<Light> lights = [];
|
||||
|
||||
self.allPoweredLights.Clear();
|
||||
self.allPoweredLightsAnimators.Clear();
|
||||
|
||||
GameObject[] gameObjects = GameObject.FindGameObjectsWithTag("PoweredLight");
|
||||
if (gameObjects == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var gameObject in gameObjects)
|
||||
{
|
||||
Animator animator = gameObject.GetComponentInChildren<Animator>();
|
||||
if (!(animator == null))
|
||||
{
|
||||
self.allPoweredLightsAnimators.Add(animator);
|
||||
// Patched section: Use list instead of singular GetComponentInChildren<Light>
|
||||
gameObject.GetComponentsInChildren(includeInactive: true, lights);
|
||||
self.allPoweredLights.AddRange(lights);
|
||||
}
|
||||
}
|
||||
foreach (var animator in self.allPoweredLightsAnimators)
|
||||
{
|
||||
animator.SetFloat("flickerSpeed", UnityEngine.Random.Range(0.6f, 1.4f));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue