Beispiel #1
0
        void DoLightning()
        {
            var go = Fsm.GetOwnerDefaultTarget(gameObject);

            if (go == null)
            {
                return;
            }

            if (go != previousGo)
            {
                lrender    = go.GetComponent <LightningRenderer>();
                previousGo = go;
            }

            if (lrender == null)
            {
                return;
            }


            if (Emitter.Value != null)
            {
                lrender.emitterTransform = Emitter.Value.transform;
            }
            else
            {
                lrender.emitterPosition = EmitterPosition.Value;
            }

            if (Receiver.Value != null)
            {
                lrender.receiverTransform = Receiver.Value.transform;
            }
            else
            {
                lrender.receiverPosition = ReceiverPosition.Value;
            }



            lrender.throttle         = throttle.Value;
            lrender.pulseInterval    = pulse.Value;
            lrender.boltLength       = boltLength.Value;
            lrender.lengthRandomness = lengthRandom.Value;
            lrender.noiseAmplitude   = noiseAmplitude.Value;
            lrender.noiseFrequency   = noiseFrequency.Value;
            lrender.noiseMotion      = noiseMotion.Value;
            lrender.color            = color.Value;
            lrender.enabled          = enabled.Value;
        }
        public static void ChangeLightningColor(LightningRenderer renderer, Color[] colors)
        {
            LightningRenderer_electricityColors.SetValue(renderer, colors);
            var           bolts = LightningRenderer_bolts.GetValue(renderer);
            List <object> objs  = ((IEnumerable <object>)bolts).Cast <object>().ToList();

            for (int i = 0; i < objs.Count; i++)
            {
                object obj = objs[i];
                if (Bolt_color == null)
                {
                    Bolt_color = obj.GetType().GetField("color", BindingFlags.Instance | BindingFlags.NonPublic);
                }
                Bolt_color.SetValue(obj, colors[i % 2]);
            }
        }
 public IEnumerator RainbowElectricityRoutine(LightningRenderer renderer, Color[] colors)
 {
     colors = new Color[]
     {
         Calc.HexToColor("400000"),
         Calc.HexToColor("900000")
     };
     while (renderer != null)
     {
         // rainbow
         for (int i = 0; i < colors.Length; i++)
         {
             if (colors[i].R > 0 && colors[i].B == 0)
             {
                 colors[i].R -= 1;
                 colors[i].G += 1;
             }
             if (colors[i].G > 0 && colors[i].R == 0)
             {
                 colors[i].G -= 1;
                 colors[i].B += 1;
             }
             if (colors[i].B > 0 && colors[i].G == 0)
             {
                 colors[i].R += 1;
                 colors[i].B -= 1;
             }
         }
         var           bolts = LightningRenderer_bolts.GetValue(renderer);
         List <object> objs  = ((IEnumerable <object>)bolts).Cast <object>().ToList();
         for (int i = 0; i < objs.Count; i++)
         {
             object obj = objs[i];
             if (Bolt_color == null)
             {
                 Bolt_color = obj.GetType().GetField("color", BindingFlags.Instance | BindingFlags.NonPublic);
             }
             Bolt_color.SetValue(obj, colors[i % 2]);
         }
         LightningRenderer_electricityColors.SetValue(renderer, colors);
         yield return(null);
     }
     yield break;
 }
        public override void OnEnter(Player player)
        {
            base.OnEnter(player);
            LightningRenderer r = player.Scene.Tracker.GetEntity <LightningRenderer>();

            ChangeLightningColor(r, electricityColors);
            if (persistent)
            {
                var session = SceneAs <Level>().Session;
                SessionHelper.WriteColorToSession(session, "fh.lightningColorA", electricityColors[0]);
                SessionHelper.WriteColorToSession(session, "fh.lightningColorB", electricityColors[1]);
            }
            if (rainbow)
            {
                Coroutine c = r.Get <Coroutine>();
                if (c != null)
                {
                    r.Remove(c);
                }
                r.Add(new Coroutine(RainbowElectricityRoutine(r, electricityColors)));
            }
        }
 private void LightningRenderer_Render(On.Celeste.LightningRenderer.orig_Render orig, LightningRenderer self)
 {
     self.DrawEdges = !Settings.SimplifiedGraphics;
     orig.Invoke(self);
 }
 private static void LightningRenderer_Reset(On.Celeste.LightningRenderer.orig_Reset orig, LightningRenderer self)
 {
     if (self.Scene is Level)
     {
         var     session = (self.Scene as Level).Session;
         Color[] colors  = new Color[2]
         {
             SessionHelper.ReadColorFromSession(session, "fh.lightningColorA", Color.White),
             SessionHelper.ReadColorFromSession(session, "fh.lightningColorB", Color.White)
         };
         if (colors[0] != Color.White)
         {
             ChangeLightningColor(self, colors);
         }
     }
     orig(self);
 }
 private static void LightningRenderer_Update(On.Celeste.LightningRenderer.orig_Update orig, LightningRenderer self)
 {
     orig(self);
     // Update any coroutines
     foreach (Component c in self.Components)
     {
         c.Update();
     }
 }