Skip to content

Commit d5f87f8

Browse files
committed
some cleanup
1 parent b6c1755 commit d5f87f8

File tree

4 files changed

+52
-24
lines changed

4 files changed

+52
-24
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<engine:UXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:engine="UnityEngine.UIElements" xmlns:editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="False">
22
<Style src="project://database/Assets/Prefabs/UI/UIToolkit/USS/MessageFeed.uss?fileID=7433441132597879392&amp;guid=daa8504d262853748b8d7c2a377261a3&amp;type=3#MessageFeed" />
33
<engine:VisualElement name="messageFeed" style="flex-grow: 1;">
4-
<engine:ListView item-template="project://database/Assets/Prefabs/UI/UIToolkit/UXML/MessageItem.uxml?fileID=9197481963319205126&amp;guid=67ec44aea0b0f484c86c6489932cfcad&amp;type=3#MessageItem" name="messageList" virtualization-method="DynamicHeight" binding-source-selection-mode="AutoAssign" class="messageList" />
4+
<engine:ListView item-template="project://database/Assets/Prefabs/UI/UIToolkit/UXML/MessageItem.uxml?fileID=9197481963319205126&amp;guid=67ec44aea0b0f484c86c6489932cfcad&amp;type=3#MessageItem" name="messageList" virtualization-method="FixedHeight" binding-source-selection-mode="AutoAssign" selection-type="None" show-bound-collection-size="true" allow-remove="true" class="messageList" />
55
</engine:VisualElement>
66
</engine:UXML>

Assets/Prefabs/UI/UIToolkit/UXML/PostGameUICanvas.uxml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,7 @@
1010
<engine:Button text="return to menu" name="menuBtn" class="menuButton" style="left: 32%; top: 75%; position: absolute;" />
1111
<engine:Button text="Waiting on host &#10;to play again" name="waitOnHostBtn" class="menuButton" style="position: absolute; top: 60%; left: 32%;" />
1212
</engine:VisualElement>
13-
<engine:Instance template="MessageFeed" />
13+
<engine:Instance template="MessageFeed">
14+
<AttributeOverrides element-name="messageList" virtualization-method="FixedHeight" selection-type="None" />
15+
</engine:Instance>
1416
</engine:UXML>

Assets/Scenes/PostGame.unity

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:d4922459db3aadee573dac2532598f347248110584472a86efc56e0358e372f6
3-
size 32047
2+
oid sha256:6652ec01ec8e557093767b7c46051175c94fae8bebb2d43674b8c462c5916beb
3+
size 31632

Assets/Scripts/Gameplay/UI/MessageFeed.cs

Lines changed: 46 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,16 @@
1212

1313
public class MessageFeed : MonoBehaviour
1414
{
15+
private const string k_MessageBoxMovementClassName = "messageBoxMove";
16+
private const string k_FadeOutClassName = "messageBoxFadeOut";
17+
private const string k_MessageBoxClassName = "messageBox";
18+
private const string k_MessageClassName = "message";
19+
1520
[SerializeField]
1621
UIDocument doc;
1722

1823
List<MessageViewModel> m_Messages;
19-
List<MessageViewModel> _messagesToRemove = new List<MessageViewModel>();
24+
List<MessageViewModel> m_MessagesToRemove = new List<MessageViewModel>();
2025

2126
ListView m_MessageContainer;
2227

@@ -118,19 +123,19 @@ void Start()
118123
{
119124
// Create a new message if no reusable messages are available
120125
var newBox = new VisualElement();
121-
newBox.AddToClassList("messageBox");
126+
newBox.AddToClassList(k_MessageBoxClassName);
122127

123128
var newLabel = new Label();
124-
newLabel.AddToClassList("message");
129+
newLabel.AddToClassList(k_MessageClassName);
125130
newBox.Add(newLabel);
126131

127132
// the event when the control get's added to the "UI Canvas"
128133
newBox.RegisterCallback<AttachToPanelEvent>((e) =>
129134
{
130135
if (e.target is VisualElement element)
131136
{
132-
element.RemoveFromClassList("messageBoxMove");
133-
StartCoroutine(ToggleClassWithDelay(element, "messageBoxMove", TimeSpan.FromSeconds(0.02)));
137+
element.RemoveFromClassList(k_MessageBoxMovementClassName);
138+
StartCoroutine(ToggleClassWithDelay(element, k_MessageBoxMovementClassName, TimeSpan.FromSeconds(0.02)));
134139
}
135140
});
136141

@@ -143,8 +148,6 @@ void Start()
143148
return newBox;
144149
};
145150

146-
listView.destroyItem += (element) => { };
147-
148151
// use this to set bindings / values on your view components
149152
listView.bindItem += (element, i) =>
150153
{
@@ -172,28 +175,51 @@ void Update()
172175

173176
foreach (var m in m_Messages)
174177
{
175-
if (m.ShouldDispose() && !_messagesToRemove.Contains(m))
178+
if (m.ShouldDispose() && !m_MessagesToRemove.Contains(m))
176179
{
177-
_messagesToRemove.Add(m);
180+
m_MessagesToRemove.Add(m);
178181
}
179182
}
180183

181-
foreach (var m in _messagesToRemove)
184+
foreach (var message in m_MessagesToRemove)
182185
{
183-
var fadeOutClassName = "messageBoxFadeOut";
186+
var childQuery = m_MessageContainer.Query<VisualElement>().Class(k_MessageBoxClassName);
187+
var child = childQuery.AtIndex(m_Messages.IndexOf(message));
184188

185-
var child = m_MessageContainer.Query<VisualElement>().Class("messageBox")
186-
.AtIndex(m_Messages.IndexOf(m));
189+
if (!child.ClassListContains(k_FadeOutClassName))
190+
{
191+
child.AddToClassList(k_FadeOutClassName);
192+
child.RegisterCallback<TransitionEndEvent>(OnTransitionEndEvent);
193+
child.RegisterCallback<TransitionCancelEvent>(OnTransitionCancelEvent);
194+
}
187195

188-
if (!child.ClassListContains(fadeOutClassName))
196+
void OnTransitionCancelEvent(TransitionCancelEvent e)
197+
{
198+
m_Messages.Remove(message);
199+
m_MessagesToRemove.Remove(message);
200+
if (e.target is VisualElement element)
201+
{
202+
element.RemoveFromClassList(k_FadeOutClassName);
203+
}
204+
}
205+
206+
// local event handler function
207+
void OnTransitionEndEvent(TransitionEndEvent e)
189208
{
190-
child.AddToClassList(fadeOutClassName);
191-
child.RegisterCallback<TransitionEndEvent>((e) =>
209+
if (e.target is VisualElement element)
192210
{
193-
m_Messages.Remove(m);
194-
_messagesToRemove.Remove(m);
195-
child.RemoveFromClassList(fadeOutClassName);
196-
});
211+
// remove subscription
212+
element.UnregisterCallback<TransitionEndEvent>(OnTransitionEndEvent);
213+
214+
element.RemoveFromClassList(k_FadeOutClassName);
215+
216+
// moving the message to be the last visualized in the container
217+
// effectively stopping the list view virtualization caused animation issues
218+
m_MessageContainer.viewController.Move(m_Messages.IndexOf(message), m_Messages.Count - 1);
219+
220+
m_Messages.Remove(message);
221+
m_MessagesToRemove.Remove(message);
222+
}
197223
}
198224
}
199225
}

0 commit comments

Comments
 (0)