Define and measure duration for text notifications in milliseconds
During a game notification duration should be the same regardless of game speed. Switch to using wall-clock time defined in milliseconds instead of game ticks. Also use the opportunity to rename the field to "Duration" because "RemoveTime" is not so clear.
This commit is contained in:
committed by
abcdefg30
parent
e280e0f31c
commit
614603089e
@@ -0,0 +1,39 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright 2007-2022 The OpenRA Developers (see AUTHORS)
|
||||||
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
|
* available to you under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation, either version 3 of
|
||||||
|
* the License, or (at your option) any later version. For more
|
||||||
|
* information, see COPYING.
|
||||||
|
*/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.Common.UpdateRules.Rules
|
||||||
|
{
|
||||||
|
public class TextNotificationsDisplayWidgetRemoveTime : UpdateRule
|
||||||
|
{
|
||||||
|
public override string Name => "Change name and unit of RemoveTime field of TextNotificationsDisplayWidget.";
|
||||||
|
|
||||||
|
public override string Description =>
|
||||||
|
"Change the field name from RemoveTime to DisplayDurationMs and convert the value from ticks to milliseconds";
|
||||||
|
|
||||||
|
public override IEnumerable<string> UpdateChromeNode(ModData modData, MiniYamlNode chromeNode)
|
||||||
|
{
|
||||||
|
if (!chromeNode.KeyMatches("TextNotificationsDisplay"))
|
||||||
|
yield break;
|
||||||
|
|
||||||
|
foreach (var field in chromeNode.ChildrenMatching("RemoveTime"))
|
||||||
|
{
|
||||||
|
field.RenameKey("DisplayDurationMs");
|
||||||
|
|
||||||
|
var durationMilliseconds = field.NodeValue<int>() * 40;
|
||||||
|
field.ReplaceValue(FieldSaver.FormatValue(durationMilliseconds));
|
||||||
|
}
|
||||||
|
|
||||||
|
yield break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -72,9 +72,8 @@ namespace OpenRA.Mods.Common.UpdateRules
|
|||||||
new RemoveLaysTerrain(),
|
new RemoveLaysTerrain(),
|
||||||
}),
|
}),
|
||||||
|
|
||||||
new UpdatePath("release-20210321", new UpdateRule[]
|
new UpdatePath("release-20210321", "playtest-20221203", new UpdateRule[]
|
||||||
{
|
{
|
||||||
// Bleed only changes here
|
|
||||||
new RenameMPTraits(),
|
new RenameMPTraits(),
|
||||||
new RemovePlayerHighlightPalette(),
|
new RemovePlayerHighlightPalette(),
|
||||||
new ReplaceWithColoredOverlayPalette(),
|
new ReplaceWithColoredOverlayPalette(),
|
||||||
@@ -97,6 +96,11 @@ namespace OpenRA.Mods.Common.UpdateRules
|
|||||||
new UnhardcodeBaseBuilderBotModule(),
|
new UnhardcodeBaseBuilderBotModule(),
|
||||||
new UnhardcodeVeteranProductionIconOverlay(),
|
new UnhardcodeVeteranProductionIconOverlay(),
|
||||||
new RenameContrailProperties(),
|
new RenameContrailProperties(),
|
||||||
|
}),
|
||||||
|
|
||||||
|
new UpdatePath("playtest-20221203", new UpdateRule[]
|
||||||
|
{
|
||||||
|
new TextNotificationsDisplayWidgetRemoveTime(),
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
{
|
{
|
||||||
public class TextNotificationsDisplayWidget : Widget
|
public class TextNotificationsDisplayWidget : Widget
|
||||||
{
|
{
|
||||||
public readonly int RemoveTime = 0;
|
public readonly int DisplayDurationMs = 0;
|
||||||
public readonly int ItemSpacing = 4;
|
public readonly int ItemSpacing = 4;
|
||||||
public readonly int BottomSpacing = 0;
|
public readonly int BottomSpacing = 0;
|
||||||
public readonly int LogLength = 8;
|
public readonly int LogLength = 8;
|
||||||
@@ -31,7 +31,7 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
public string TransientsTemplate = "TRANSIENT_LINE_TEMPLATE";
|
public string TransientsTemplate = "TRANSIENT_LINE_TEMPLATE";
|
||||||
readonly Dictionary<TextNotificationPool, Widget> templates = new Dictionary<TextNotificationPool, Widget>();
|
readonly Dictionary<TextNotificationPool, Widget> templates = new Dictionary<TextNotificationPool, Widget>();
|
||||||
|
|
||||||
readonly List<int> expirations = new List<int>();
|
readonly List<long> expirations = new List<long>();
|
||||||
|
|
||||||
Rectangle overflowDrawBounds = Rectangle.Empty;
|
Rectangle overflowDrawBounds = Rectangle.Empty;
|
||||||
public override Rectangle EventBounds => Rectangle.Empty;
|
public override Rectangle EventBounds => Rectangle.Empty;
|
||||||
@@ -96,7 +96,7 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
}
|
}
|
||||||
|
|
||||||
AddChild(notificationWidget);
|
AddChild(notificationWidget);
|
||||||
expirations.Add(Game.LocalTick + RemoveTime);
|
expirations.Add(Game.RunTime + DisplayDurationMs);
|
||||||
|
|
||||||
while (Children.Count > LogLength)
|
while (Children.Count > LogLength)
|
||||||
RemoveNotification();
|
RemoveNotification();
|
||||||
@@ -127,11 +127,11 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
|
|
||||||
public override void Tick()
|
public override void Tick()
|
||||||
{
|
{
|
||||||
if (RemoveTime == 0)
|
if (DisplayDurationMs == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// This takes advantage of the fact that recentLines is ordered by expiration, from sooner to later
|
// This takes advantage of the fact that recentLines is ordered by expiration, from sooner to later
|
||||||
while (Children.Count > 0 && Game.LocalTick >= expirations[0])
|
while (Children.Count > 0 && Game.RunTime >= expirations[0])
|
||||||
RemoveNotification();
|
RemoveNotification();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ Container@CHAT_PANEL:
|
|||||||
TextNotificationsDisplay@CHAT_DISPLAY:
|
TextNotificationsDisplay@CHAT_DISPLAY:
|
||||||
Width: PARENT_RIGHT
|
Width: PARENT_RIGHT
|
||||||
Height: PARENT_BOTTOM
|
Height: PARENT_BOTTOM
|
||||||
RemoveTime: 250
|
DisplayDurationMs: 10000
|
||||||
BottomSpacing: 3
|
BottomSpacing: 3
|
||||||
Container@CHAT_CHROME:
|
Container@CHAT_CHROME:
|
||||||
Width: PARENT_RIGHT
|
Width: PARENT_RIGHT
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ Container@CHAT_PANEL:
|
|||||||
TextNotificationsDisplay@CHAT_DISPLAY:
|
TextNotificationsDisplay@CHAT_DISPLAY:
|
||||||
Width: PARENT_RIGHT
|
Width: PARENT_RIGHT
|
||||||
Height: PARENT_BOTTOM
|
Height: PARENT_BOTTOM
|
||||||
RemoveTime: 250
|
DisplayDurationMs: 10000
|
||||||
BottomSpacing: 3
|
BottomSpacing: 3
|
||||||
Container@CHAT_CHROME:
|
Container@CHAT_CHROME:
|
||||||
Width: PARENT_RIGHT
|
Width: PARENT_RIGHT
|
||||||
|
|||||||
@@ -8,6 +8,6 @@ Container@TRANSIENTS_PANEL:
|
|||||||
TextNotificationsDisplay@TRANSIENTS_DISPLAY:
|
TextNotificationsDisplay@TRANSIENTS_DISPLAY:
|
||||||
Width: PARENT_RIGHT
|
Width: PARENT_RIGHT
|
||||||
Height: PARENT_BOTTOM
|
Height: PARENT_BOTTOM
|
||||||
RemoveTime: 100
|
DisplayDurationMs: 4000
|
||||||
LogLength: 5
|
LogLength: 5
|
||||||
HideOverflow: False
|
HideOverflow: False
|
||||||
|
|||||||
@@ -8,6 +8,6 @@ Container@TRANSIENTS_PANEL:
|
|||||||
TextNotificationsDisplay@TRANSIENTS_DISPLAY:
|
TextNotificationsDisplay@TRANSIENTS_DISPLAY:
|
||||||
Width: PARENT_RIGHT
|
Width: PARENT_RIGHT
|
||||||
Height: PARENT_BOTTOM
|
Height: PARENT_BOTTOM
|
||||||
RemoveTime: 100
|
DisplayDurationMs: 4000
|
||||||
LogLength: 5
|
LogLength: 5
|
||||||
HideOverflow: False
|
HideOverflow: False
|
||||||
|
|||||||
Reference in New Issue
Block a user