Skip to content

Commit a51b164

Browse files
committed
WIP adding message feed functionality
not fully working yet
1 parent 5cd1a22 commit a51b164

File tree

12 files changed

+424
-72
lines changed

12 files changed

+424
-72
lines changed

Assets/Prefabs/UI/UIToolkit/PostGameUICanvasUITK.prefab

Lines changed: 136 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,72 @@
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}
370
--- !u!1 &1443245446169138580
471
GameObject:
572
m_ObjectHideFlags: 0
@@ -30,7 +97,8 @@ Transform:
3097
m_LocalPosition: {x: 0, y: 0, z: 0}
3198
m_LocalScale: {x: 1, y: 1, z: 1}
3299
m_ConstrainProportionsScale: 0
33-
m_Children: []
100+
m_Children:
101+
- {fileID: 3862586538753465930}
34102
m_Father: {fileID: 0}
35103
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
36104
--- !u!114 &2063287831439623020
@@ -64,4 +132,70 @@ MonoBehaviour:
64132
m_Script: {fileID: 11500000, guid: c0ae2681246f0ef43b41f215b690d854, type: 3}
65133
m_Name:
66134
m_EditorClassIdentifier:
67-
uiDocument: {fileID: 2063287831439623020}
135+
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}

Assets/Prefabs/UI/UIToolkit/SettingsPanelCanvasUITK.prefab

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ GameObject:
7676
m_Component:
7777
- component: {fileID: 8673277459071735180}
7878
- component: {fileID: 8607712241056528212}
79-
- component: {fileID: 4923764729715591813}
8079
m_Layer: 5
8180
m_Name: UIQuitPanel
8281
m_TagString: Untagged
@@ -112,19 +111,3 @@ MonoBehaviour:
112111
m_Name:
113112
m_EditorClassIdentifier:
114113
m_QuitMode: 0
115-
--- !u!114 &4923764729715591813
116-
MonoBehaviour:
117-
m_ObjectHideFlags: 0
118-
m_CorrespondingSourceObject: {fileID: 0}
119-
m_PrefabInstance: {fileID: 0}
120-
m_PrefabAsset: {fileID: 0}
121-
m_GameObject: {fileID: 4153888348426691229}
122-
m_Enabled: 1
123-
m_EditorHideFlags: 0
124-
m_Script: {fileID: 11500000, guid: 1b2c62ac3bcd44fb9e09835581422057, type: 3}
125-
m_Name:
126-
m_EditorClassIdentifier:
127-
parentReference:
128-
TypeName: Unity.BossRoom.ApplicationLifecycle.ApplicationController
129-
autoRun: 1
130-
autoInjectGameObjects: []

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
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">
44
<engine:VisualElement name="animatedMessageBox" class="messageBox" style="transition-property: all; transition-duration: 0.7s; transition-timing-function: ease;">
5-
<engine:Label text="Lorem ipsum dolor sit amet" name="message" class="message" />
5+
<engine:Label text="Lorem ipsum dolor sit amet" name="messageLabel" class="message" />
66
</engine:VisualElement>
77
</engine:VisualElement>
88
</engine:UXML>
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using Unity.BossRoom.ConnectionManagement;
4+
using Unity.BossRoom.Gameplay.GameplayObjects;
5+
using Unity.BossRoom.Gameplay.GameplayObjects.Character;
6+
using Unity.BossRoom.Gameplay.Messages;
7+
using Unity.BossRoom.Infrastructure;
8+
using UnityEngine;
9+
using UnityEngine.UI;
10+
using VContainer;
11+
12+
namespace Unity.BossRoom.Gameplay.UI
13+
{
14+
/// <summary>
15+
/// Handles the display of in-game messages in a message feed
16+
/// </summary>
17+
public class OldUIMessageFeed : MonoBehaviour
18+
{
19+
[SerializeField]
20+
List<OldUIMessageSlot> m_MessageSlots;
21+
22+
[SerializeField]
23+
GameObject m_MessageSlotPrefab;
24+
25+
[SerializeField]
26+
VerticalLayoutGroup m_VerticalLayoutGroup;
27+
28+
DisposableGroup m_Subscriptions;
29+
30+
[Inject]
31+
void InjectDependencies(
32+
#if UNITY_EDITOR || DEVELOPMENT_BUILD
33+
ISubscriber<CheatUsedMessage> cheatUsedMessageSubscriber,
34+
#endif
35+
ISubscriber<DoorStateChangedEventMessage> doorStateChangedSubscriber,
36+
ISubscriber<ConnectionEventMessage> connectionEventSubscriber,
37+
ISubscriber<LifeStateChangedEventMessage> lifeStateChangedEventSubscriber
38+
)
39+
{
40+
m_Subscriptions = new DisposableGroup();
41+
#if UNITY_EDITOR || DEVELOPMENT_BUILD
42+
m_Subscriptions.Add(cheatUsedMessageSubscriber.Subscribe(OnCheatUsedEvent));
43+
#endif
44+
m_Subscriptions.Add(doorStateChangedSubscriber.Subscribe(OnDoorStateChangedEvent));
45+
m_Subscriptions.Add(connectionEventSubscriber.Subscribe(OnConnectionEvent));
46+
m_Subscriptions.Add(lifeStateChangedEventSubscriber.Subscribe(OnLifeStateChangedEvent));
47+
}
48+
49+
#if UNITY_EDITOR || DEVELOPMENT_BUILD
50+
void OnCheatUsedEvent(CheatUsedMessage eventMessage)
51+
{
52+
DisplayMessage($"Cheat {eventMessage.CheatUsed} used by {eventMessage.CheaterName}");
53+
}
54+
#endif
55+
56+
void OnDoorStateChangedEvent(DoorStateChangedEventMessage eventMessage)
57+
{
58+
DisplayMessage(eventMessage.IsDoorOpen ? "The Door has been opened!" : "The Door is closing.");
59+
}
60+
61+
void OnConnectionEvent(ConnectionEventMessage eventMessage)
62+
{
63+
switch (eventMessage.ConnectStatus)
64+
{
65+
case ConnectStatus.Success:
66+
DisplayMessage($"{eventMessage.PlayerName} has joined the game!");
67+
break;
68+
case ConnectStatus.ServerFull:
69+
case ConnectStatus.LoggedInAgain:
70+
case ConnectStatus.UserRequestedDisconnect:
71+
case ConnectStatus.GenericDisconnect:
72+
case ConnectStatus.IncompatibleBuildType:
73+
case ConnectStatus.HostEndedSession:
74+
DisplayMessage($"{eventMessage.PlayerName} has left the game!");
75+
break;
76+
}
77+
}
78+
79+
void OnLifeStateChangedEvent(LifeStateChangedEventMessage eventMessage)
80+
{
81+
switch (eventMessage.CharacterType)
82+
{
83+
case CharacterTypeEnum.Tank:
84+
case CharacterTypeEnum.Archer:
85+
case CharacterTypeEnum.Mage:
86+
case CharacterTypeEnum.Rogue:
87+
case CharacterTypeEnum.ImpBoss:
88+
switch (eventMessage.NewLifeState)
89+
{
90+
case LifeState.Alive:
91+
DisplayMessage($"{eventMessage.CharacterName} has been reanimated!");
92+
break;
93+
case LifeState.Fainted:
94+
case LifeState.Dead:
95+
DisplayMessage($"{eventMessage.CharacterName} has been defeated!");
96+
break;
97+
default:
98+
throw new ArgumentOutOfRangeException();
99+
}
100+
break;
101+
}
102+
}
103+
104+
void DisplayMessage(string text)
105+
{
106+
var messageSlot = GetAvailableSlot();
107+
messageSlot.Display(text);
108+
}
109+
110+
OldUIMessageSlot GetAvailableSlot()
111+
{
112+
foreach (var slot in m_MessageSlots)
113+
{
114+
if (!slot.IsDisplaying)
115+
{
116+
return slot;
117+
}
118+
}
119+
var go = Instantiate(m_MessageSlotPrefab, m_VerticalLayoutGroup.transform);
120+
var messageSlot = go.GetComponentInChildren<OldUIMessageSlot>();
121+
m_MessageSlots.Add(messageSlot);
122+
return messageSlot;
123+
}
124+
125+
void OnDestroy()
126+
{
127+
if (m_Subscriptions != null)
128+
{
129+
m_Subscriptions.Dispose();
130+
}
131+
}
132+
133+
}
134+
}

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

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
using System;
2+
using System.Collections;
3+
using UnityEngine;
4+
5+
namespace Unity.BossRoom.Gameplay.UI
6+
{
7+
public class OldUIMessageSlot : MonoBehaviour
8+
{
9+
[SerializeField]
10+
Animator m_Animator;
11+
12+
[SerializeField]
13+
TMPro.TextMeshProUGUI m_TextLabel;
14+
15+
[SerializeField]
16+
float m_HideDelay = 10;
17+
public bool IsDisplaying { get; private set; }
18+
19+
public void Display(string text)
20+
{
21+
if (!IsDisplaying)
22+
{
23+
IsDisplaying = true;
24+
m_Animator.SetTrigger("Display");
25+
StartCoroutine(HideCoroutine());
26+
m_TextLabel.text = text;
27+
transform.parent.SetAsLastSibling();
28+
}
29+
}
30+
31+
IEnumerator HideCoroutine()
32+
{
33+
yield return new WaitForSeconds(m_HideDelay);
34+
m_Animator.SetTrigger("Hide");
35+
}
36+
37+
public void Hide()
38+
{
39+
if (IsDisplaying)
40+
{
41+
IsDisplaying = false;
42+
}
43+
}
44+
}
45+
}

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

Lines changed: 3 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)