Skip to content

Commit d75a01f

Browse files
committed
WIP: adjustments for MessageFeed (functionality within one new script) and trying to get injection of PostGameUI to work
1 parent a51b164 commit d75a01f

File tree

8 files changed

+160
-163
lines changed

8 files changed

+160
-163
lines changed
Lines changed: 2 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,5 @@
11
%YAML 1.1
22
%TAG !u! tag:unity3d.com,2011:
3-
--- !u!1 &1236025437569684182
4-
GameObject:
5-
m_ObjectHideFlags: 0
6-
m_CorrespondingSourceObject: {fileID: 0}
7-
m_PrefabInstance: {fileID: 0}
8-
m_PrefabAsset: {fileID: 0}
9-
serializedVersion: 6
10-
m_Component:
11-
- component: {fileID: 3862586538753465930}
12-
- component: {fileID: 6115990281850835497}
13-
- component: {fileID: 745328928250476419}
14-
m_Layer: 5
15-
m_Name: MessageFeed
16-
m_TagString: Untagged
17-
m_Icon: {fileID: 0}
18-
m_NavMeshLayer: 0
19-
m_StaticEditorFlags: 0
20-
m_IsActive: 1
21-
--- !u!4 &3862586538753465930
22-
Transform:
23-
m_ObjectHideFlags: 0
24-
m_CorrespondingSourceObject: {fileID: 0}
25-
m_PrefabInstance: {fileID: 0}
26-
m_PrefabAsset: {fileID: 0}
27-
m_GameObject: {fileID: 1236025437569684182}
28-
serializedVersion: 2
29-
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
30-
m_LocalPosition: {x: 0, y: 0, z: 0}
31-
m_LocalScale: {x: 1, y: 1, z: 1}
32-
m_ConstrainProportionsScale: 0
33-
m_Children:
34-
- {fileID: 4136078092350221922}
35-
m_Father: {fileID: 7855837178462082302}
36-
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
37-
--- !u!114 &6115990281850835497
38-
MonoBehaviour:
39-
m_ObjectHideFlags: 0
40-
m_CorrespondingSourceObject: {fileID: 0}
41-
m_PrefabInstance: {fileID: 0}
42-
m_PrefabAsset: {fileID: 0}
43-
m_GameObject: {fileID: 1236025437569684182}
44-
m_Enabled: 1
45-
m_EditorHideFlags: 0
46-
m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0}
47-
m_Name:
48-
m_EditorClassIdentifier:
49-
m_PanelSettings: {fileID: 11400000, guid: 30704bc49d34869449e8bfdb3ab57841, type: 2}
50-
m_ParentUI: {fileID: 2063287831439623020}
51-
sourceAsset: {fileID: 9197481963319205126, guid: 79e0526232b7b2246a02c77f935c2b2a, type: 3}
52-
m_SortingOrder: 0
53-
m_WorldSpaceSizeMode: 1
54-
m_WorldSpaceWidth: 1920
55-
m_WorldSpaceHeight: 1080
56-
--- !u!114 &745328928250476419
57-
MonoBehaviour:
58-
m_ObjectHideFlags: 0
59-
m_CorrespondingSourceObject: {fileID: 0}
60-
m_PrefabInstance: {fileID: 0}
61-
m_PrefabAsset: {fileID: 0}
62-
m_GameObject: {fileID: 1236025437569684182}
63-
m_Enabled: 1
64-
m_EditorHideFlags: 0
65-
m_Script: {fileID: 11500000, guid: 6bbd6ae5366e6194abac070183b555d3, type: 3}
66-
m_Name:
67-
m_EditorClassIdentifier:
68-
uiDocument: {fileID: 6115990281850835497}
69-
messageItemAsset: {fileID: 9197481963319205126, guid: 67ec44aea0b0f484c86c6489932cfcad, type: 3}
703
--- !u!1 &1443245446169138580
714
GameObject:
725
m_ObjectHideFlags: 0
@@ -97,8 +30,7 @@ Transform:
9730
m_LocalPosition: {x: 0, y: 0, z: 0}
9831
m_LocalScale: {x: 1, y: 1, z: 1}
9932
m_ConstrainProportionsScale: 0
100-
m_Children:
101-
- {fileID: 3862586538753465930}
33+
m_Children: []
10234
m_Father: {fileID: 0}
10335
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
10436
--- !u!114 &2063287831439623020
@@ -133,69 +65,4 @@ MonoBehaviour:
13365
m_Name:
13466
m_EditorClassIdentifier:
13567
m_PostGameUIDocument: {fileID: 2063287831439623020}
136-
m_MessageFeedDocument: {fileID: 6115990281850835497}
137-
--- !u!1 &8456963380495801211
138-
GameObject:
139-
m_ObjectHideFlags: 0
140-
m_CorrespondingSourceObject: {fileID: 0}
141-
m_PrefabInstance: {fileID: 0}
142-
m_PrefabAsset: {fileID: 0}
143-
serializedVersion: 6
144-
m_Component:
145-
- component: {fileID: 4136078092350221922}
146-
- component: {fileID: 6396599729957077140}
147-
- component: {fileID: 1006486138548694909}
148-
m_Layer: 5
149-
m_Name: MessageItem
150-
m_TagString: Untagged
151-
m_Icon: {fileID: 0}
152-
m_NavMeshLayer: 0
153-
m_StaticEditorFlags: 0
154-
m_IsActive: 1
155-
--- !u!4 &4136078092350221922
156-
Transform:
157-
m_ObjectHideFlags: 0
158-
m_CorrespondingSourceObject: {fileID: 0}
159-
m_PrefabInstance: {fileID: 0}
160-
m_PrefabAsset: {fileID: 0}
161-
m_GameObject: {fileID: 8456963380495801211}
162-
serializedVersion: 2
163-
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
164-
m_LocalPosition: {x: 0, y: 0, z: 0}
165-
m_LocalScale: {x: 1, y: 1, z: 1}
166-
m_ConstrainProportionsScale: 0
167-
m_Children: []
168-
m_Father: {fileID: 3862586538753465930}
169-
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
170-
--- !u!114 &6396599729957077140
171-
MonoBehaviour:
172-
m_ObjectHideFlags: 0
173-
m_CorrespondingSourceObject: {fileID: 0}
174-
m_PrefabInstance: {fileID: 0}
175-
m_PrefabAsset: {fileID: 0}
176-
m_GameObject: {fileID: 8456963380495801211}
177-
m_Enabled: 1
178-
m_EditorHideFlags: 0
179-
m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0}
180-
m_Name:
181-
m_EditorClassIdentifier:
182-
m_PanelSettings: {fileID: 11400000, guid: 30704bc49d34869449e8bfdb3ab57841, type: 2}
183-
m_ParentUI: {fileID: 6115990281850835497}
184-
sourceAsset: {fileID: 9197481963319205126, guid: 67ec44aea0b0f484c86c6489932cfcad, type: 3}
185-
m_SortingOrder: 0
186-
m_WorldSpaceSizeMode: 1
187-
m_WorldSpaceWidth: 1920
188-
m_WorldSpaceHeight: 1080
189-
--- !u!114 &1006486138548694909
190-
MonoBehaviour:
191-
m_ObjectHideFlags: 0
192-
m_CorrespondingSourceObject: {fileID: 0}
193-
m_PrefabInstance: {fileID: 0}
194-
m_PrefabAsset: {fileID: 0}
195-
m_GameObject: {fileID: 8456963380495801211}
196-
m_Enabled: 1
197-
m_EditorHideFlags: 0
198-
m_Script: {fileID: 11500000, guid: c981963e5f5a6a24892cd499fb0e8861, type: 3}
199-
m_Name:
200-
m_EditorClassIdentifier:
201-
messageItem: {fileID: 6396599729957077140}
68+
m_MessageFeedDocument: {fileID: 0}

Assets/Prefabs/UI/UIToolkit/USS/MessageFeed.uss

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,26 @@
2525

2626
.message {
2727
color: rgb(255, 193, 21);
28-
font-size: 32px;
28+
font-size: 14px;
2929
-unity-font-definition: url("project://database/Assets/TextMesh%20Pro/Fonts/Roboto-Bold.ttf?fileID=12800000&guid=55ec8ee3b059fbf4d98bc372920c05e2&type=3#Roboto-Bold");
3030
-unity-text-outline-width: 1px;
3131
-unity-text-outline-color: rgb(0, 0, 0);
32+
margin-left: 10px;
33+
margin-top: 0;
34+
-unity-font-style: bold;
3235
}
3336

3437
.messageBox {
35-
flex-grow: 1;
3638
background-image: url("project://database/Assets/Textures/UI/ui_healthbar_bg.png?fileID=2800000&guid=ac1ab0ffbf410094088db89d509a3a4a&type=3#ui_healthbar_bg");
37-
flex-direction: column;
3839
margin-top: 8px;
3940
margin-bottom: 8px;
40-
width: 420px;
41-
height: 60px;
41+
width: auto;
42+
height: 26px;
4243
transition-property: position;
4344
transition-duration: 2s;
45+
position: relative;
46+
top: 100px;
47+
left: 10px;
4448
}
4549

4650
.messageList {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
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="messageItem">
4-
<engine:VisualElement name="animatedMessageBox" class="messageBox" style="transition-property: all; transition-duration: 0.7s; transition-timing-function: ease;">
4+
<engine:VisualElement name="messageBox" class="messageBox" style="transition-property: all; transition-duration: 0.7s; transition-timing-function: ease;">
55
<engine:Label text="Lorem ipsum dolor sit amet" name="messageLabel" class="message" />
66
</engine:VisualElement>
77
</engine:VisualElement>

Assets/Scripts/Gameplay/GameState/NetworkPostGame.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using Unity.BossRoom.Gameplay.UI;
23
using Unity.Netcode;
34
using VContainer;
45

@@ -9,11 +10,26 @@ public class NetworkPostGame : NetworkBehaviour
910
public NetworkVariable<WinState> WinState = new NetworkVariable<WinState>();
1011

1112
[Inject]
12-
public void Construct(PersistentGameState persistentGameState)
13+
PostGameUI m_PostGameUI;
14+
15+
[Inject]
16+
PersistentGameState m_PersistentGameState;
17+
18+
[Inject]
19+
public void Construct(PersistentGameState persistentGameState, PostGameUI postGameUI)
20+
{
21+
m_PostGameUI = postGameUI;
22+
m_PersistentGameState = persistentGameState;
23+
}
24+
25+
public override void OnNetworkSpawn()
1326
{
14-
if (NetworkManager.Singleton.IsServer)
27+
// only hosts can restart the game, other players see a wait message
28+
m_PostGameUI.Initialize(IsHost);
29+
30+
if (IsServer)
1531
{
16-
WinState.Value = persistentGameState.WinState;
32+
WinState.Value = m_PersistentGameState.WinState;
1733
}
1834
}
1935
}
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
using System.Collections.Generic;
2+
using UnityEngine;
3+
using UnityEngine.UIElements;
4+
5+
public class MessageFeed : MonoBehaviour
6+
{
7+
[SerializeField]
8+
UIDocument doc;
9+
10+
[SerializeField]
11+
bool AddMessage;
12+
13+
List<Message> m_messages;
14+
15+
VisualElement messageContainer;
16+
17+
void Start()
18+
{
19+
var root = doc.rootVisualElement;
20+
var templateLabel = root.Q<Label>("messageLabel");
21+
var templateBox = root.Q<VisualElement>("messageBox");
22+
23+
// Hide the default template elements
24+
templateLabel.style.display = DisplayStyle.None;
25+
templateBox.style.display = DisplayStyle.None;
26+
27+
m_messages = new List<Message>();
28+
29+
// Create a container for all messages
30+
messageContainer = new VisualElement();
31+
messageContainer.style.flexDirection = FlexDirection.Column; // Arrange messages vertically
32+
messageContainer.style.alignItems = Align.FlexStart; // Align messages to the start of the container
33+
doc.rootVisualElement.Add(messageContainer);
34+
}
35+
36+
void Update()
37+
{
38+
if (AddMessage)
39+
{
40+
ShowMessage("Hello World");
41+
AddMessage = false; // Prevent repeated calls
42+
}
43+
44+
foreach (var m in m_messages)
45+
{
46+
if (m.isShown)
47+
{
48+
// Check if a message should disappear after 10 seconds
49+
if (Time.realtimeSinceStartup - m.startTime > 10)
50+
{
51+
StartFadeout(m, 1f);
52+
m.isShown = false;
53+
}
54+
}
55+
}
56+
}
57+
58+
59+
60+
void ShowMessage(string message)
61+
{
62+
// Reuse an existing message container if possible
63+
foreach (var m in m_messages)
64+
{
65+
if (!m.isShown)
66+
{
67+
m.isShown = true;
68+
m.Label.text = message;
69+
m.messageBox.style.display = DisplayStyle.Flex; // Show the entire message box
70+
m.startTime = Time.realtimeSinceStartup; // Update start time
71+
72+
return;
73+
}
74+
}
75+
76+
// If no reusable container is found, create a new one
77+
var newBox = new VisualElement();
78+
newBox.AddToClassList("messageBox"); // Apply the ".messageBox" style
79+
80+
var newLabel = new Label();
81+
newLabel.text = message;
82+
newLabel.AddToClassList("message"); // Apply the ".message" style
83+
84+
newBox.Add(newLabel); // Add the label to the box
85+
86+
var newMessage = new Message()
87+
{
88+
isShown = true,
89+
startTime = Time.realtimeSinceStartup,
90+
messageBox = newBox,
91+
Label = newLabel
92+
};
93+
94+
// Add the messageBox (which contains the label) to the container
95+
messageContainer.Add(newBox);
96+
m_messages.Add(newMessage); // Track the new message
97+
}
98+
99+
static void StartFadeout(Message message, float opacity)
100+
{
101+
message.messageBox.style.opacity = opacity;
102+
message.messageBox.schedule.Execute(() =>
103+
{
104+
opacity -= 0.01f;
105+
message.messageBox.style.opacity = opacity;
106+
if (opacity <= 0)
107+
{
108+
message.messageBox.style.display = DisplayStyle.None;
109+
}
110+
}).Every((long)0.1f).Until(() => opacity <= 0);
111+
}
112+
113+
class Message
114+
{
115+
public bool isShown; // Whether the message is currently visible
116+
public float startTime; // The time when the message was shown
117+
public VisualElement messageBox; // The container for the message (box)
118+
public Label Label; // The label inside the box
119+
}
120+
}

Assets/Scripts/Gameplay/UI/MessageFeedRob.cs.meta

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)