Example #1
0
        private static IEnumerator RumbleTrigger_RumbleRoutine(On.Celeste.RumbleTrigger.orig_RumbleRoutine orig, RumbleTrigger self, float delay)
        {
            DynData <RumbleTrigger> triggerData = new DynData <RumbleTrigger>(self);

            yield return(new SwapImmediately(orig(self, delay)));

            foreach (DreamCrumbleWallOnRumble crumble in triggerData.Get <List <DreamCrumbleWallOnRumble> >(RUMBLETRIGGER_DREAMCRUMBLES))
            {
                crumble.Break();
                yield return(0.05f);
            }
        }
Example #2
0
        private static void RumbleTrigger_Awake(On.Celeste.RumbleTrigger.orig_Awake orig, RumbleTrigger self, Scene scene)
        {
            orig(self, scene);

            DynData <RumbleTrigger> triggerData = new DynData <RumbleTrigger>(self);
            bool constrainHeight = triggerData.Get <bool>("constrainHeight");

            // Reflection is slow
            float top    = constrainHeight ? triggerData.Get <float>("top") : 0;
            float bottom = constrainHeight ? triggerData.Get <float>("bottom") : 0;
            float left   = triggerData.Get <float>("left");
            float right  = triggerData.Get <float>("right");

            bool triggered = triggerData.Get <bool>("persistent") && (scene as Level).Session.GetFlag(triggerData.Get <EntityID>("id").ToString());

            List <DreamCrumbleWallOnRumble> crumbles = new List <DreamCrumbleWallOnRumble>();

            foreach (Entity entity in scene.Tracker.GetEntities <DreamCrumbleWallOnRumble>())
            {
                DreamCrumbleWallOnRumble crumble = (DreamCrumbleWallOnRumble)entity;
                if ((!constrainHeight || (crumble.Y >= top && crumble.Y <= bottom)) && crumble.X >= left && crumble.X <= right)
                {
                    if (triggered)
                    {
                        crumble.RemoveSelf();
                    }
                    else
                    {
                        crumbles.Add(crumble);
                    }
                }
            }
            // Slightly unsafe, but only if someone else does some weird stuff with RumbleTriggers
            if (!triggered)
            {
                triggerData[RUMBLETRIGGER_DREAMCRUMBLES] = crumbles;
            }
        }
        private void onRumbleTriggerRenderDisplacement(On.Celeste.RumbleTrigger.orig_RenderDisplacement orig, RumbleTrigger self)
        {
            if (Settings.ScreenShakeIntensity == 10)
            {
                orig(self);
                return;
            }

            float tempRumble = (float)rumbleInfo.GetValue(self);

            rumbleInfo.SetValue(self, tempRumble * Settings.ScreenShakeIntensity / 10f);
            orig(self);
            rumbleInfo.SetValue(self, tempRumble);
        }