internal static void Prefix(MenuInstaller __instance, FireworkItemController ____fireworkItemControllerPrefab) { var mib = __instance as MonoInstallerBase; var container = Accessors.GetDiContainer(ref mib); var vs = container.ParentContainers[0].TryResolve <VolumeSettings>(); if (!(vs is null)) { GetFireworkControllerAudioSource(ref ____fireworkItemControllerPrefab).volume = 0.6f * vs.Fireworks; } }
//internal static void Prefix(FireworkItemController __instance) //{ // var particles = __instance.GetField<FireworkItemController.FireworkItemParticleSystem[], FireworkItemController>("_particleSystems"); // Plugin.Log.Debug($"length : {particles.Length}"); // while (particles.Length < 3) { // particles = particles.Union(particles).ToArray(); // } // __instance.SetField("_particleSystems", particles); //} internal static void Postfix(FireworkItemController __instance) { try { var sparkColor = randomSparkColorPicker.PickRandomObject(); var lightColor = randomLightColorPicker.PickRandomObject(); __instance.GetField <AudioSource, FireworkItemController>("_audioSource").bypassReverbZones = true; __instance.GetField <AudioSource, FireworkItemController>("_audioSource").minDistance = 200f; __instance.GetField <AudioSource, FireworkItemController>("_audioSource").volume = 1.0f; __instance.GetField <AudioSource, FireworkItemController>("_audioSource").reverbZoneMix = 1.1f; __instance.SetField("_lightsColor", lightColor); __instance.SetField("_randomizeColor", false); __instance.SetField("_randomizeSpeed", true); var particles = __instance.GetField <FireworkItemController.FireworkItemParticleSystem[], FireworkItemController>("_particleSystems"); foreach (var particleSystem in particles) { if (particleSystem._isSubemitter) { continue; } var particle = particleSystem._particleSystem; particle.transform.localScale = new Vector3(PluginConfig.Instance.Scale, PluginConfig.Instance.Scale, PluginConfig.Instance.Scale); var limit = particle.limitVelocityOverLifetime; limit.enabled = true; limit.dampen = 0.05f; limit.separateAxes = false; limit.multiplyDragByParticleSize = false; limit.multiplyDragByParticleVelocity = true; limit.limitX = new ParticleSystem.MinMaxCurve(1f, 0f); limit.limitY = new ParticleSystem.MinMaxCurve(1f, 0f); limit.limitZ = new ParticleSystem.MinMaxCurve(1f, 0f); var emmistion = particle.emission; if (emmistion.enabled) { var rateOverTime = emmistion.rateOverTime; emmistion.rateOverTime = 3000f; } var renderer = particle.GetComponent <ParticleSystemRenderer>(); if (PluginConfig.Instance.FireEnable) { renderer.renderMode = ParticleSystemRenderMode.Billboard; } else { renderer.renderMode = ParticleSystemRenderMode.None; } var trail = particle.trails; if (PluginConfig.Instance.TraileEnable) { trail.enabled = true; trail.lifetime = new ParticleSystem.MinMaxCurve(0.1f, 2f); renderer.trailMaterial = Default; } else { trail.enabled = false; } var rotationOverLifetime = particle.rotationOverLifetime; rotationOverLifetime.separateAxes = true; var orbital = particle.velocityOverLifetime; if (0 < PluginConfig.Instance.Radial) { orbital.enabled = true; orbital.space = ParticleSystemSimulationSpace.World; orbital.orbitalY = 10f; orbital.radial = PluginConfig.Instance.Radial; } else { orbital.enabled = false; } var main = particle.main; var color = main.startColor; color.color = sparkColor; color.colorMax = sparkColor; main.startColor = color; main.gravityModifierMultiplier = PluginConfig.Instance.GravityModifierMultiplier; main.simulationSpace = ParticleSystemSimulationSpace.Local; main.scalingMode = ParticleSystemScalingMode.Local; main.maxParticles = 850; main.ringBufferMode = ParticleSystemRingBufferMode.Disabled; var colision = particle.collision; if (PluginConfig.Instance.Refrect) { colision.enabled = true; colision.type = ParticleSystemCollisionType.World; } else { colision.enabled = false; } } } catch (Exception e) { Plugin.Log.Error(e); } }