public override void SceneEnd(Scene scene)
        {
            base.SceneEnd(scene);

            // leaving level: forget about all controllers and clean up the hook if present.
            spinnerControllerOnScreen = null;
            nextSpinnerController     = null;
            if (rainbowSpinnerHueHooked)
            {
                On.Celeste.CrystalStaticSpinner.GetHue -= getRainbowSpinnerHue;
                rainbowSpinnerHueHooked = false;
            }
            ;
        }
        public override void Awake(Scene scene)
        {
            base.Awake(scene);

            // this is the controller for the next screen.
            nextSpinnerController = this;

            // enable the hook on rainbow spinner hue.
            if (!rainbowSpinnerHueHooked)
            {
                On.Celeste.CrystalStaticSpinner.GetHue += getRainbowSpinnerHue;
                rainbowSpinnerHueHooked = true;
            }
        }
Esempio n. 3
0
        private static Color getRainbowSpinnerHue(On.Celeste.CrystalStaticSpinner.orig_GetHue orig, CrystalStaticSpinner self, Vector2 position)
        {
            RainbowSpinnerColorAreaController controller = self.CollideFirst <RainbowSpinnerColorAreaController>();

            if (controller != null)
            {
                // apply the color from the controller we are in.
                return(RainbowSpinnerColorController.getModHue(controller.colors, controller.gradientSize, self.Scene, position));
            }
            else
            {
                // we are not in a controller; apply the vanilla color.
                return(orig(self, position));
            }
        }
        public override void Removed(Scene scene)
        {
            base.Removed(scene);

            // the "current" spinner controller is now the one from the next screen.
            spinnerControllerOnScreen = nextSpinnerController;
            nextSpinnerController     = null;

            // the transition (if any) is over.
            transitionProgress = -1f;

            // if there is none, clean up the hook on the spinner hue.
            if (spinnerControllerOnScreen == null && rainbowSpinnerHueHooked)
            {
                On.Celeste.CrystalStaticSpinner.GetHue -= getRainbowSpinnerHue;
                rainbowSpinnerHueHooked = false;
            }
        }
        private static Color getRainbowSpinnerHue(On.Celeste.CrystalStaticSpinner.orig_GetHue orig, CrystalStaticSpinner self, Vector2 position)
        {
            if (transitionProgress == -1f)
            {
                // no transition is ongoing.
                // if only nextSpinnerController is defined, move it into spinnerControllerOnScreen.
                if (spinnerControllerOnScreen == null)
                {
                    spinnerControllerOnScreen = nextSpinnerController;
                    nextSpinnerController     = null;
                }

                return(getModHue(spinnerControllerOnScreen.colors, spinnerControllerOnScreen.gradientSize, self.Scene, self.Position));
            }
            else
            {
                // get the spinner color in the room we're coming from.
                Color fromRoomColor;
                if (spinnerControllerOnScreen != null)
                {
                    fromRoomColor = getModHue(spinnerControllerOnScreen.colors, spinnerControllerOnScreen.gradientSize, self.Scene, self.Position);
                }
                else
                {
                    fromRoomColor = orig(self, position);
                }

                // get the spinner color in the room we're going to.
                Color toRoomColor;
                if (nextSpinnerController != null)
                {
                    toRoomColor = getModHue(nextSpinnerController.colors, nextSpinnerController.gradientSize, self.Scene, self.Position);
                }
                else
                {
                    toRoomColor = orig(self, position);
                }

                // transition smoothly between both.
                return(Color.Lerp(fromRoomColor, toRoomColor, transitionProgress));
            }
        }