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