示例#1
0
        private static bool onKevinMoveVCheck(On.Celeste.CrushBlock.orig_MoveVCheck 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.MoveVCollideSolidsAndBounds(self.Scene as Level, amount, thruDashBlocks: true, (a, b, collidedPlatform) => {
                    if (collidedPlatform is KevinBarrier barrier)
                    {
                        barrier.hitByKevin();
                    }
                }, checkBottom: false);
            }

            foreach (KevinBarrier barrier in kevinBarriers)
            {
                barrier.Collidable = false;
            }
            return(isHit);
        }
示例#2
0
        private static bool CrushBlock_MoveVCheck(On.Celeste.CrushBlock.orig_MoveVCheck orig, CrushBlock self, float amount)
        {
            float target = self.Position.Y + amount;

            bool chainStop = false;

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

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

                return(self.MoveVCollideSolidsAndBounds(self.SceneAs <Level>(), amount, thruDashBlocks: true, null, checkBottom: false) || chainStop);
            }
            else
            {
                return(orig(self, amount));
            }
        }
 private static bool OnCrushBlockMoveVCheck(On.Celeste.CrushBlock.orig_MoveVCheck orig, CrushBlock self, float amount)
 {
     CrushBlockCollideCheckGroupedFallingBlock(self, amount * Vector2.UnitY);
     return(orig(self, amount));
 }