private void HandleSolidBlockCollision(Block collidingBlock) { _hasLandedOnBlock = true; _isSmashingSmashBlocks = false; if (collidingBlock.HasBeenLandedOnSquarely(WorldPosition)) { _motionEngine.PlayerIsOnGround = true; _didNotLandSafely = false; if (_motionEngine.Delta.Y > 0) { WorldPosition -= new Vector2(0.0f, WorldPosition.Y - (collidingBlock.TopSurfaceY - Body_Collision_Radius)); bool specialBlock = false; SpringBlock launcher = collidingBlock as SpringBlock; if (launcher != null) { HandleSpringBlockLaunch(launcher); specialBlock = true; } if (!specialBlock) { IceBlock ice = collidingBlock as IceBlock; if (ice != null) { HandleIceBlockImpact(); specialBlock = true; } } if (!specialBlock) { BombBlock bomb = collidingBlock as BombBlock; if (bomb != null) { HandleBombBlockImpact(bomb); } } } } else if ((CornerHasBeenClipped(collidingBlock.LeftSurfaceX, collidingBlock.TopSurfaceY)) || (CornerHasBeenClipped(collidingBlock.RightSurfaceX, collidingBlock.TopSurfaceY))) { _hasLandedOnBlock = false; } else if ((FacingAwayFromBlock(collidingBlock)) && (WorldPosition.Y < collidingBlock.WorldPosition.Y)) { if (Math.Abs(WorldPosition.X - (collidingBlock.WorldPosition.X + (collidingBlock.CollisionBoundingBox.Width / 2.0f))) < Rear_Edge_Clip_Tolerance) { _motionEngine.PlayerIsOnGround = true; } _didNotLandSafely = false; } }
public void WireUpBombBlockBlastColliders(Scene.ObjectRegistrationHandler registerObject) { for (int x = 0; x < MapDimensions.X; x++) { for (int y = 0; y < MapDimensions.Y; y++) { BombBlock block = GetTile(x, y) as BombBlock; if (block != null) { _bombBlocks.Add(block); registerObject(block.BlastCollider); } } } }
private void HandleBombBlockImpact(BombBlock bomb) { bomb.TriggerByImpact(); }