public override void StartTouch(Entity other)
        {
            base.StartTouch(other);

            WaterController.StartTouch(other);

            Action task = async() =>
            {
                await Task.DelaySeconds(2);

                if (!other.IsValid())
                {
                    return;
                }

                // TODO: check if other is still in water

                using (Prediction.Off())
                {
                    if (other is GolfBall ball)
                    {
                        (Game.Current as GolfGame).BallOutOfBounds(ball, GolfGame.OutOfBoundsType.Water);
                    }
                }
            };

            task.Invoke();
        }