Ejemplo n.º 1
0
        private static bool onKevinMoveHCheck(On.Celeste.CrushBlock.orig_MoveHCheck orig, CrushBlock self, float amount)
        {
            IEnumerable <KevinBarrier> kevinBarriers = self.Scene.Tracker.GetEntities <KevinBarrier>().OfType <KevinBarrier>();

            foreach (KevinBarrier barrier in kevinBarriers)
            {
                barrier.Collidable = true;
            }

            bool isHit = orig(self, amount);

            if (isHit)
            {
                self.MoveHCollideSolidsAndBounds(self.Scene as Level, amount, thruDashBlocks: true, (a, b, collidedPlatform) => {
                    if (collidedPlatform is KevinBarrier barrier)
                    {
                        barrier.hitByKevin();
                    }
                });
            }

            foreach (KevinBarrier barrier in kevinBarriers)
            {
                barrier.Collidable = false;
            }
            return(isHit);
        }
Ejemplo n.º 2
0
        private static bool CrushBlock_MoveHCheck(On.Celeste.CrushBlock.orig_MoveHCheck orig, CrushBlock self, float amount)
        {
            float target = self.Position.X + amount;

            bool chainStop = false;

            if (self is ChainedKevin chainedKevin)
            {
                if (chainedKevin.direction == Directions.Left && target <= chainedKevin.start.X - chainedKevin.chainLength)
                {
                    chainStop = true;
                    amount    = chainedKevin.start.X - chainedKevin.chainLength - self.X;
                }
                else if (chainedKevin.direction == Directions.Right && target >= chainedKevin.start.X + chainedKevin.chainLength)
                {
                    chainStop = true;
                    amount    = chainedKevin.start.X + chainedKevin.chainLength - self.X;
                }

                if (chainStop)
                {
                    Audio.Play(CustomSFX.game_chainedFallingBlock_chain_tighten_block, chainedKevin.Center);
                }

                return(self.MoveHCollideSolidsAndBounds(self.SceneAs <Level>(), amount, thruDashBlocks: true) || chainStop);
            }
            else
            {
                return(orig(self, amount));
            }
        }