@Override
 public boolean Update() {
   if (bIsFalling == 1) {
     final float YDelta = -FallSpeed * Globals.secondsSinceLastFrame;
     final float SpikeBottom = CD.Bottom + YDelta;
     final float FloorHeight =
         Globals.mGameGraph.FindFloorIntersectionHeight(CD.Left, CD.Right, SpikeBottom);
     if (SpikeBottom < FloorHeight) {
       Globals.mGameGraph.AddExplosion(X, Y, Explosion.SmokeExplosion, bFlip);
       SoundSystem.PlaySound(Explosion.SmokeExplosion_SoundID);
       Remove();
       return false;
     } else {
       Y += YDelta;
       CD.Translate(0.0f, YDelta);
     }
   } else {
     final float PlayerX = Globals.mGameGraph.mPlayer.X;
     if (PlayerX > CD.Left && PlayerX < CD.Right) {
       bIsFalling = 1;
     }
   }
   return true;
 }