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); }
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)); }