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