Skip to content

Commit 93dbf04

Browse files
committed
Chatbox mostly fixed
1 parent 5789472 commit 93dbf04

34 files changed

+878
-313
lines changed

Intersect.Client.Core/Interface/Debugging/DebugWindow.cs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,15 @@ public DebugWindow(Base parent) : base(parent, Strings.Debug.Title, false, nameo
2727
{
2828
_generators = [];
2929

30-
DisableResizing();
30+
_defaultFont = Current?.GetFont("sourcesansproblack", 10);
31+
32+
IsHidden = true;
33+
IsResizable = false;
34+
InnerPanelPadding = new Padding(4);
3135
MinimumSize = new Point(320, 320);
3236
Size = new Point(400, 600);
3337
MaximumSize = new Point(800, 600);
3438

35-
InnerPanelPadding = new Padding(4);
36-
37-
_defaultFont = Current?.GetFont("sourcesansproblack", 10);
38-
3939
Tabs = CreateTabs();
4040

4141
TabInfo = Tabs.AddPage(Strings.Debug.TabLabelInfo, nameof(TabInfo));
@@ -52,8 +52,6 @@ public DebugWindow(Base parent) : base(parent, Strings.Debug.Title, false, nameo
5252
AssetsButtonReloadAsset = CreateAssetsButtonReloadAsset(AssetsToolsTable, AssetsList);
5353

5454
AssetsToolsTable.SizeToChildren();
55-
56-
IsHidden = true;
5755
}
5856

5957
private SearchableTree CreateAssetsList(Base parent)

Intersect.Client.Core/Interface/Game/Chat/Chatbox.cs

Lines changed: 47 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using Intersect.Client.Framework.File_Management;
44
using Intersect.Client.Framework.GenericClasses;
55
using Intersect.Client.Framework.Graphics;
6+
using Intersect.Client.Framework.Gwen;
67
using Intersect.Client.Framework.Gwen.Control;
78
using Intersect.Client.Framework.Gwen.Control.EventArguments;
89
using Intersect.Client.Framework.Gwen.ControlInternal;
@@ -11,9 +12,11 @@
1112
using Intersect.Client.Localization;
1213
using Intersect.Client.Networking;
1314
using Intersect.Configuration;
15+
using Intersect.Core;
1416
using Intersect.Enums;
1517
using Intersect.Localization;
1618
using Intersect.Utilities;
19+
using Microsoft.Extensions.Logging;
1720

1821
namespace Intersect.Client.Interface.Game.Chat;
1922

@@ -97,7 +100,10 @@ public Chatbox(Canvas gameCanvas, GameInterface gameUi)
97100

98101
//Chatbox Window
99102
mChatboxWindow = new ImagePanel(gameCanvas, "ChatboxWindow");
100-
mChatboxMessages = new ListBox(mChatboxWindow, "MessageList");
103+
mChatboxMessages = new ListBox(mChatboxWindow, "MessageList")
104+
{
105+
Dock = Pos.Fill,
106+
};
101107
mChatboxMessages.EnableScroll(false, true);
102108
mChatboxWindow.ShouldCacheToTexture = true;
103109

@@ -193,6 +199,8 @@ public Chatbox(Canvas gameCanvas, GameInterface gameUi)
193199
mGuildInviteContextItem = mContextMenu.AddItem(Strings.ChatContextMenu.GuildInvite);
194200
mGuildInviteContextItem.Clicked += MGuildInviteContextItem_Clicked;
195201
mContextMenu.LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString());
202+
203+
mChatboxWindow.BeforeLayout += ChatboxWindowOnBeforeLayout;
196204
}
197205

198206
public void OpenContextMenu(string name)
@@ -353,34 +361,42 @@ public void Update()
353361
var scrollToBottom = vScrollBar.ScrollAmount == 1 || !scrollBarVisible;
354362

355363
// Did the tab change recently? If so, we need to reset a few things to make it work...
356-
if (mLastTab != mCurrentTab)
364+
var currentTab = mCurrentTab;
365+
if (mLastTab != currentTab)
357366
{
358367
mChatboxMessages.Clear();
359-
mChatboxMessages.HorizontalScrollBar.SetScrollAmount(0);
368+
mChatboxMessages.HorizontalScrollBar.ScrollAmount = 0;
369+
mChatboxMessages.VerticalScrollBar.ScrollAmount = 1;
360370
mMessageIndex = 0;
361371
mReceivedMessage = true;
362-
mLastTab = mCurrentTab;
372+
mLastTab = currentTab;
363373
}
364374

365-
var messages = ChatboxMsg.GetMessages(mCurrentTab);
375+
var scrollPosition = mChatboxMessages.VerticalScroll;
376+
var messages = ChatboxMsg.GetMessages(currentTab);
366377
for (var i = mMessageIndex; i < messages.Count; i++)
367378
{
368379
var msg = messages[i];
369-
var lines = Text.WrapText(
380+
string[] lines = [msg.Message];/*Text.WrapText(
370381
msg.Message,
371382
mChatboxMessages.Width - vScrollBar.Width - 8,
372383
mChatboxText.Font,
373384
Graphics.Renderer ?? throw new InvalidOperationException("No renderer")
374-
);
385+
);*/
375386

376387
foreach (var line in lines)
377388
{
378-
var row = mChatboxMessages.AddRow(line.Trim());
389+
var row = mChatboxMessages.AddRow(line.Trim(), name: $"Message:{currentTab}#{mMessageIndex}", userData: msg.Target);
390+
row.ShouldDrawBackground = false;
391+
row.Padding = new Padding(2, 0);
379392
row.Font = mChatboxText.Font;
380393
row.SetTextColor(msg.Color);
381-
row.ShouldDrawBackground = false;
382-
row.UserData = msg.Target;
394+
if (row.GetCellContents(0) is Label label)
395+
{
396+
label.WrappingBehavior = WrappingBehavior.Wrapped;
397+
}
383398
row.Clicked += ChatboxRow_Clicked;
399+
384400
mReceivedMessage = true;
385401

386402
while (mChatboxMessages.RowCount > ClientConfiguration.Instance.ChatLines)
@@ -395,15 +411,34 @@ public void Update()
395411
// ReSharper disable once InvertIf
396412
if (mReceivedMessage)
397413
{
414+
// mChatboxMessages.SizeToContents();
415+
398416
if (scrollToBottom)
399417
{
400-
mChatboxMessages.ScrollToBottom();
418+
mChatboxMessages.Defer(mChatboxMessages.ScrollToBottom);
419+
}
420+
else
421+
{
422+
mChatboxMessages.Defer(() =>
423+
{
424+
ApplicationContext.CurrentContext.Logger.LogTrace(
425+
"Scrolling chat to {ScrollY}",
426+
scrollPosition
427+
);
428+
mChatboxMessages.ScrollToY(scrollPosition);
429+
}
430+
);
401431
}
402-
// vScrollBar.SetScrollAmount(scrollToBottom ? 1 : scrollAmount);
432+
403433
mReceivedMessage = false;
404434
}
405435
}
406436

437+
private void ChatboxWindowOnBeforeLayout(Base sender, EventArgs arguments)
438+
{
439+
Update();
440+
}
441+
407442
public void SetChatboxText(string msg)
408443
{
409444
mChatboxInput.Text = msg;

Intersect.Client.Core/Interface/Game/EscapeMenu.cs

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@ namespace Intersect.Client.Interface.Game;
1111

1212
public partial class EscapeMenu : ImagePanel
1313
{
14-
private readonly SettingsWindow _settingsWindow;
14+
private readonly Func<SettingsWindow> _settingsWindowProvider;
1515
private readonly Button _buttonCharacterSelect;
1616
private readonly Panel _versionPanel;
1717

18-
public EscapeMenu(Canvas gameCanvas) : base(gameCanvas, nameof(EscapeMenu))
18+
public EscapeMenu(Canvas gameCanvas, Func<SettingsWindow> settingsWindowProvider) : base(gameCanvas, nameof(EscapeMenu))
1919
{
20+
_settingsWindowProvider = settingsWindowProvider;
21+
2022
Interface.InputBlockingComponents?.Add(this);
2123

2224
Width = gameCanvas.Width;
@@ -31,12 +33,6 @@ public EscapeMenu(Canvas gameCanvas) : base(gameCanvas, nameof(EscapeMenu))
3133
Text = Strings.EscapeMenu.Title,
3234
};
3335

34-
// Settings Window and Button
35-
_settingsWindow = new SettingsWindow(gameCanvas, null, this)
36-
{
37-
IsVisible = false,
38-
};
39-
4036
var buttonSettings = new Button(container, "SettingsButton")
4137
{
4238
Text = Strings.EscapeMenu.Settings,
@@ -102,7 +98,8 @@ public override void Invalidate()
10298
/// <inheritdoc />
10399
public override void ToggleHidden()
104100
{
105-
if (!_settingsWindow.IsHidden)
101+
var settingsWindow = _settingsWindowProvider();
102+
if (settingsWindow.IsVisible)
106103
{
107104
return;
108105
}
@@ -122,8 +119,9 @@ public void Update()
122119

123120
public void OpenSettingsWindow(bool returnToMenu = false)
124121
{
125-
_settingsWindow.Show(returnToMenu);
126-
Interface.GameUi?.EscapeMenu?.Hide();
122+
var settingsWindow = _settingsWindowProvider();
123+
settingsWindow.Show(returnToMenu ? this : null);
124+
Hide();
127125
}
128126

129127
private void _buttonCharacterSelect_Clicked(Base sender, MouseButtonState arguments)

Intersect.Client.Core/Interface/Game/GameInterface.cs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using Intersect.Client.Interface.Game.Inventory;
1111
using Intersect.Client.Interface.Game.Shop;
1212
using Intersect.Client.Interface.Game.Trades;
13+
using Intersect.Client.Interface.Shared;
1314
using Intersect.Client.Networking;
1415
using Intersect.Core;
1516
using Intersect.Enums;
@@ -51,6 +52,8 @@ public partial class GameInterface : MutableInterface
5152

5253
private MapItemWindow mMapItemWindow;
5354

55+
private SettingsWindow? _settingsWindow;
56+
5457
private bool mShouldCloseBag;
5558

5659
private bool mShouldCloseBank;
@@ -91,11 +94,21 @@ public partial class GameInterface : MutableInterface
9194

9295
public PlayerStatusWindow PlayerStatusWindow;
9396

97+
private SettingsWindow GetOrCreateSettingsWindow()
98+
{
99+
_settingsWindow ??= new SettingsWindow(GameCanvas)
100+
{
101+
IsVisible = false,
102+
};
103+
104+
return _settingsWindow;
105+
}
106+
94107
public GameInterface(Canvas canvas) : base(canvas)
95108
{
96109
GameCanvas = canvas;
97-
EscapeMenu = new EscapeMenu(GameCanvas) {IsHidden = true};
98-
SimplifiedEscapeMenu = new SimplifiedEscapeMenu(GameCanvas) {IsHidden = true};
110+
EscapeMenu = new EscapeMenu(GameCanvas, GetOrCreateSettingsWindow) {IsHidden = true};
111+
SimplifiedEscapeMenu = new SimplifiedEscapeMenu(GameCanvas, GetOrCreateSettingsWindow) {IsHidden = true};
99112
TargetContextMenu = new TargetContextMenu(GameCanvas) {IsHidden = true};
100113
AnnouncementWindow = new AnnouncementWindow(GameCanvas) { IsHidden = true };
101114

@@ -308,7 +321,6 @@ public void Update()
308321
PlayerBox?.SetEntity(Globals.Me);
309322
}
310323

311-
mChatBox?.Update();
312324
GameMenu?.Update(mShouldUpdateQuestLog);
313325
mShouldUpdateQuestLog = false;
314326
Hotbar?.Update();

Intersect.Client.Core/Interface/Game/GuildWindow.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
namespace Intersect.Client.Interface.Game;
1515

16-
partial class GuildWindow : WindowControl
16+
partial class GuildWindow : Window
1717
{
1818
private readonly ImagePanel _textboxContainer;
1919
private readonly TextBox _textboxSearch;
@@ -34,7 +34,7 @@ partial class GuildWindow : WindowControl
3434

3535
public GuildWindow(Canvas gameCanvas) : base(gameCanvas, Globals.Me?.Guild, false, nameof(GuildWindow))
3636
{
37-
DisableResizing();
37+
IsResizable = false;
3838

3939
// Textbox Search
4040
_textboxContainer = new ImagePanel(this, "SearchContainer");
@@ -162,13 +162,16 @@ public GuildWindow(Canvas gameCanvas) : base(gameCanvas, Globals.Me?.Guild, fals
162162

163163
#endregion
164164

165+
_addButtonUsed = !_buttonAdd.IsHidden;
166+
_addPopupButtonUsed = !_buttonAddPopup.IsHidden;
167+
}
168+
169+
protected override void EnsureInitialized()
170+
{
165171
UpdateList();
166172

167173
_contextMenu.LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer?.GetResolutionString());
168174
LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer?.GetResolutionString());
169-
170-
_addButtonUsed = !_buttonAdd.IsHidden;
171-
_addPopupButtonUsed = !_buttonAddPopup.IsHidden;
172175
}
173176

174177
//Methods

Intersect.Client.Core/Interface/Game/QuestsWindow.cs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,20 @@ private void _backButton_Clicked(Base sender, MouseButtonState arguments)
100100
UpdateSelectedQuest();
101101
}
102102

103-
//Methods
103+
private bool _shouldUpdateList;
104+
104105
public void Update(bool shouldUpdateList)
106+
{
107+
if (!mQuestsWindow.IsVisible)
108+
{
109+
_shouldUpdateList |= shouldUpdateList;
110+
return;
111+
}
112+
113+
UpdateInternal(shouldUpdateList);
114+
}
115+
116+
private void UpdateInternal(bool shouldUpdateList)
105117
{
106118
if (shouldUpdateList)
107119
{
@@ -320,9 +332,9 @@ private void UpdateSelectedQuest()
320332
mQuestStatus.SetText(Strings.QuestLog.InProgress);
321333
mQuestStatus.SetTextColor(CustomColors.QuestWindow.InProgress, ComponentState.Normal);
322334
mQuestDescTemplateLabel.SetTextColor(CustomColors.QuestWindow.QuestDesc, ComponentState.Normal);
323-
335+
324336
if (mSelectedQuest.InProgressDescription.Length > 0)
325-
{
337+
{
326338
mQuestDescLabel.AddText(mSelectedQuest.InProgressDescription, mQuestDescTemplateLabel);
327339

328340
mQuestDescLabel.AddLineBreak();
@@ -420,6 +432,12 @@ private void UpdateSelectedQuest()
420432

421433
public void Show()
422434
{
435+
if (_shouldUpdateList)
436+
{
437+
UpdateInternal(_shouldUpdateList);
438+
_shouldUpdateList = false;
439+
}
440+
423441
mQuestsWindow.IsHidden = false;
424442
}
425443

Intersect.Client.Core/Interface/Game/SimplifiedEscapeMenu.cs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,17 @@ namespace Intersect.Client.Interface.Game;
1212

1313
public sealed partial class SimplifiedEscapeMenu : Framework.Gwen.Control.Menu
1414
{
15-
private readonly SettingsWindow _settingsWindow;
15+
private readonly Func<SettingsWindow> _settingsWindowProvider;
1616
private readonly MenuItem _settings;
1717
private readonly MenuItem _character;
1818
private readonly MenuItem _logout;
1919
private readonly MenuItem _exit;
2020

21-
public SimplifiedEscapeMenu(Canvas gameCanvas) : base(gameCanvas, nameof(SimplifiedEscapeMenu))
21+
public SimplifiedEscapeMenu(Canvas gameCanvas, Func<SettingsWindow> settingsWindowProvider) : base(gameCanvas, nameof(SimplifiedEscapeMenu))
2222
{
2323
IsHidden = true;
2424
IconMarginDisabled = true;
25-
_settingsWindow = new SettingsWindow(gameCanvas, null, null)
26-
{
27-
IsVisible = false,
28-
};
25+
_settingsWindowProvider = settingsWindowProvider;
2926

3027
Children.Clear();
3128

@@ -44,7 +41,8 @@ public SimplifiedEscapeMenu(Canvas gameCanvas) : base(gameCanvas, nameof(Simplif
4441

4542
public void ToggleHidden(Button? target)
4643
{
47-
if (!_settingsWindow.IsHidden || target == null)
44+
var settingsWindow = _settingsWindowProvider();
45+
if (!settingsWindow.IsHidden || target == null)
4846
{
4947
return;
5048
}
@@ -126,12 +124,13 @@ private static void ShowCombatWarning()
126124

127125
private void OpenSettingsWindow(object? sender, EventArgs? e)
128126
{
129-
if (!_settingsWindow.IsHidden)
127+
var settingsWindow = _settingsWindowProvider();
128+
if (settingsWindow.IsVisible)
130129
{
131130
return;
132131
}
133132

134-
_settingsWindow.Show();
133+
settingsWindow.Show();
135134
}
136135

137136
private static void LogoutToCharacterSelect(object? sender, EventArgs? e)

0 commit comments

Comments
 (0)