public void UpdateCopiedPrefab(GameObject Prefab)
        {
            this.Prefab = Prefab;

            Piece piece = Prefab.GetComponent <Piece>();

            piece.m_name        = "$piece_seed_totem_name";
            piece.m_description = "$piece_seed_totem_description";
            piece.m_clipGround  = true;
            piece.m_groundPiece = true;
            piece.m_groundOnly  = true;
            piece.m_noInWater   = true;
            foreach (GuidePoint guidePoint in Prefab.GetComponentsInChildren <GuidePoint>())
            {
                guidePoint.m_text.m_key   = localizationName;
                guidePoint.m_text.m_topic = ravenTopic;
                guidePoint.m_text.m_text  = ravenText;
                guidePoint.m_text.m_label = ravenLabel;
            }

            prefabSeedTotem = Prefab.AddComponent <SeedTotem>();
            PrivateArea privateArea = Prefab.GetComponent <PrivateArea>();

            if (privateArea != null)
            {
                logger.LogDebug("Converting PrivateArea to SeedTotem");
                SeedTotem.CopyPrivateArea(prefabSeedTotem, privateArea);
                logger.LogDebug("Destroying redundant PrivateArea: " + privateArea);
                Object.DestroyImmediate(privateArea);
            }

            RegisterPiece();
        }
        internal static void CopyPrivateArea(SeedTotem seedTotem, PrivateArea privateArea)
        {
            seedTotem.m_areaMarker = privateArea.m_areaMarker;

            seedTotem.m_enabledEffect = privateArea.m_enabledEffect;

            seedTotem.m_model = privateArea.m_model;

            seedTotem.m_areaMarker.gameObject.SetActive(value: false);
            seedTotem.m_areaMarker.m_radius       = configRadius.Value;
            seedTotem.m_areaMarker.m_nrOfSegments = 10;
            UpdateGlowColor(seedTotem);
        }
            static bool Prefix(WearNTear __instance, HitData hit)
            {
                if (hit.GetTotalDamage() > 0)
                {
                    SeedTotem seedTotem = __instance.GetComponent <SeedTotem>();
                    if (seedTotem)
                    {
                        seedTotem.OnDamaged(hit.GetAttacker() as Player);
                        return(false);
                    }
                }

                return(true);
            }
        public static void UpdateGlowColor(SeedTotem seedTotem)
        {
            logger.LogDebug("Updating color of SeedTotem at " + seedTotem.transform.position);
            Material[] materials = seedTotem.m_model.materials;
            Color      color     = configGlowColor.Value;

            foreach (Material material in materials)
            {
                string lookFor = "Guardstone_OdenGlow_mat";
                if (material.name.StartsWith(lookFor))
                {
                    logger.LogInfo("Updating color");
                    material.SetColor("_EmissionColor", color);
                }
            }

            foreach (EffectList.EffectData effectData in m_disperseEffects.m_effectPrefabs)
            {
                ParticleSystem            particleSystem = effectData.m_prefab.GetComponent <ParticleSystem>();
                ParticleSystem.MainModule psMain         = particleSystem.main;

                ParticleSystem.ColorOverLifetimeModule colorOverLifetime = particleSystem.colorOverLifetime;
                Gradient gradient = new Gradient();
                gradient.SetKeys(
                    new GradientColorKey[] {
                    new GradientColorKey(color, 0f),
                    new GradientColorKey(Color.clear, 0.6f)
                },
                    new GradientAlphaKey[] {
                    new GradientAlphaKey(1f, 0f),
                    new GradientAlphaKey(0f, 0.6f)
                });
                colorOverLifetime.color = gradient;
            }

            GameObject     wayEffectGameObject = seedTotem.transform.Find("WayEffect").gameObject;
            GameObject     sparcsGameObject    = wayEffectGameObject.transform.Find("sparcs").gameObject;
            ParticleSystem sparcs = sparcsGameObject.GetComponent <ParticleSystem>();

            ParticleSystem.ShapeModule sparcsShape = sparcs.shape;
            Vector3 sparcsScale = sparcsShape.scale;

            sparcsScale.x = configRadius.Value;
            sparcsScale.z = configRadius.Value;
            sparcsScale.y = 0.5f;
            ParticleSystem.MainModule sparcsMain = sparcs.main;
            sparcsMain.startColor = new ParticleSystem.MinMaxGradient(color, color * 0.2f);

            GameObject pointLightObject = wayEffectGameObject.transform.Find("Point light").gameObject;
            Light      light            = pointLightObject.GetComponent <Light>();

            light.color     = configLightColor.Value;
            light.intensity = configLightIntensity.Value;
            light.range     = configRadius.Value;

            GameObject     flareGameObject = wayEffectGameObject.transform.Find("flare").gameObject;
            ParticleSystem flare           = flareGameObject.GetComponent <ParticleSystem>();

            ParticleSystem.MainModule flareMain = flare.main;
            flareMain.startColor = new ParticleSystem.MinMaxGradient(configFlareColor.Value);
            flareMain.startSize  = new ParticleSystem.MinMaxCurve(configFlareSize.Value);
        }
 private void SettingsChanged(object sender, EventArgs e)
 {
     SeedTotem.SettingsUpdated();
 }