示例#1
0
        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);
            }
        }