From c20d1113c1fb02109b82e57a4f6c5fbd4e50ac1e Mon Sep 17 00:00:00 2001 From: lumpn Date: Thu, 20 Apr 2023 13:43:17 +0800 Subject: [PATCH] Implemented fallback to lesser terminators for line splitting --- .../Private/StevesUI/TypewriterTextWidget.cpp | 20 +++++++++++++++++-- .../Public/StevesUI/TypewriterTextWidget.h | 1 + 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Source/StevesUEHelpers/Private/StevesUI/TypewriterTextWidget.cpp b/Source/StevesUEHelpers/Private/StevesUI/TypewriterTextWidget.cpp index 1cf2522..fe5bbe0 100644 --- a/Source/StevesUEHelpers/Private/StevesUI/TypewriterTextWidget.cpp +++ b/Source/StevesUEHelpers/Private/StevesUI/TypewriterTextWidget.cpp @@ -208,16 +208,32 @@ bool UTypewriterTextWidget::IsSentenceTerminator(TCHAR Letter) return Letter == '.' || Letter == '!' || Letter == '?'; } +bool UTypewriterTextWidget::IsClauseTerminator(TCHAR Letter) +{ + return Letter == ',' || Letter == ';'; +} + int UTypewriterTextWidget::FindLastTerminator(const FString& CurrentLineString, int Count) { - // TODO Jonas: Find lesser terminators like commas or spaces if no sentence terminator can be found. int TerminatorIndex = CurrentLineString.FindLastCharByPredicate(IsSentenceTerminator, Count); if (TerminatorIndex != INDEX_NONE) { return TerminatorIndex; } - return Count; + TerminatorIndex = CurrentLineString.FindLastCharByPredicate(IsClauseTerminator, Count); + if (TerminatorIndex != INDEX_NONE) + { + return TerminatorIndex; + } + + TerminatorIndex = CurrentLineString.FindLastCharByPredicate(FText::IsWhitespace, Count); + if (TerminatorIndex != INDEX_NONE) + { + return TerminatorIndex; + } + + return (Count - 1); } int UTypewriterTextWidget::CalculateMaxLength(int MaxNumberOfLines) diff --git a/Source/StevesUEHelpers/Public/StevesUI/TypewriterTextWidget.h b/Source/StevesUEHelpers/Public/StevesUI/TypewriterTextWidget.h index 70e54e3..d75ac50 100644 --- a/Source/StevesUEHelpers/Public/StevesUI/TypewriterTextWidget.h +++ b/Source/StevesUEHelpers/Public/StevesUI/TypewriterTextWidget.h @@ -131,6 +131,7 @@ protected: private: void PlayNextLetter(); static bool IsSentenceTerminator(TCHAR Letter); + static bool IsClauseTerminator(TCHAR Letter); static int FindLastTerminator(const FString& CurrentLineString, int Count); int CalculateMaxLength(int MaxNumberOfLines);