Skip to content

Commit f3e5840

Browse files
committed
feat: Slideshow messages in MessageBanner
1 parent a369dbf commit f3e5840

File tree

1 file changed

+82
-1
lines changed

1 file changed

+82
-1
lines changed

Editor/MessageBanner.cs

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public bool ShowMessageTypeCount
3434
public object Source { get; private set; }
3535
public string SourceName { get; private set; }
3636
public IList<Message> Messages { get; private set; }
37+
public int CurrentMessageIndex { get; private set; }
3738

3839

3940
public MessageBanner(object source, string sourceName, bool showMessageTypeCount = true)
@@ -79,6 +80,18 @@ public MessageBanner(IList<Message> messages, object source, string sourceName,
7980
overflow = Overflow.Hidden,
8081
unityTextAlign = TextAnchor.MiddleLeft,
8182
unityFontDefinition = new StyleFontDefinition(ResCache.GetMonospaceFontAsset()),
83+
//transitionDuration = new List<TimeValue>
84+
//{
85+
// new TimeValue(_messageContentTransitionDuration, TimeUnit.Millisecond)
86+
//},
87+
//transitionTimingFunction = new List<EasingFunction>
88+
//{
89+
// new EasingFunction(EasingMode.EaseInOut)
90+
//},
91+
//transitionProperty = new List<StylePropertyName>
92+
//{
93+
// new StylePropertyName("scale"),
94+
//},
8295
}
8396
};
8497
Add(ContentLabel);
@@ -104,6 +117,7 @@ public MessageBanner(IList<Message> messages, object source, string sourceName,
104117
RegisterCallback<ClickEvent>(OnClick);
105118
RegisterCallback<ContextClickEvent>(OnContextClick);
106119

120+
InitializeMessageSwitch();
107121
}
108122

109123
private Image CreateMessageTypeImage(Texture defaultIcon, float iconSize)
@@ -154,7 +168,9 @@ public void SetMessages(IList<Message> messages)
154168

155169
public void Refresh()
156170
{
157-
Message message = (Messages?.Count ?? 0) > 0 ? Messages[Messages.Count - 1] : null;
171+
CurrentMessageIndex = (Messages?.Count ?? 0) - 1;
172+
173+
Message message = CurrentMessageIndex > -1 ? Messages[CurrentMessageIndex] : null;
158174
SetMessage(message);
159175

160176
Messages.CountByType(out int infoCount, out int warningCount, out int errorCount);
@@ -222,5 +238,70 @@ private void OnContextClick(ContextClickEvent evt)
222238

223239
menu.ShowAsContext();
224240
}
241+
242+
243+
#region Message Transition
244+
245+
private uint _messageSwitchInterval = 3000;
246+
/// <summary>
247+
/// 消息轮播时的切换间隔(毫秒)。
248+
/// 若为0,则不自动切换消息。
249+
/// </summary>
250+
public uint MessageSwitchInterval
251+
{
252+
get => _messageSwitchInterval;
253+
set
254+
{
255+
if (_messageSwitchInterval == value)
256+
{
257+
return;
258+
}
259+
260+
bool prevDisabled = IsMessageSwitchDisabled();
261+
_messageSwitchInterval = value;
262+
if (!IsMessageSwitchDisabled() && prevDisabled)
263+
{
264+
InitializeMessageSwitch();
265+
}
266+
}
267+
}
268+
269+
public bool IsMessageSwitchDisabled()
270+
{
271+
return MessageSwitchInterval < 1;
272+
}
273+
274+
275+
private void InitializeMessageSwitch()
276+
{
277+
if (IsMessageSwitchDisabled())
278+
{
279+
return;
280+
}
281+
282+
schedule.Execute(SwitchToNextMessage)
283+
.Every(MessageSwitchInterval)
284+
.StartingIn(MessageSwitchInterval)
285+
.Until(IsMessageSwitchDisabled);
286+
}
287+
288+
private void SwitchToNextMessage()
289+
{
290+
if ((Messages?.Count ?? 0) < 1)
291+
{
292+
CurrentMessageIndex = -1;
293+
return;
294+
}
295+
296+
CurrentMessageIndex++;
297+
if (CurrentMessageIndex == Messages.Count)
298+
{
299+
CurrentMessageIndex = 0;
300+
}
301+
302+
SetMessage(Messages[CurrentMessageIndex]);
303+
}
304+
305+
#endregion
225306
}
226307
}

0 commit comments

Comments
 (0)