diff --git a/Content.Client/Lobby/UI/LobbyCharacterPreviewPanel.cs b/Content.Client/Lobby/UI/LobbyCharacterPreviewPanel.cs index 167d594315..463626e352 100644 --- a/Content.Client/Lobby/UI/LobbyCharacterPreviewPanel.cs +++ b/Content.Client/Lobby/UI/LobbyCharacterPreviewPanel.cs @@ -7,6 +7,7 @@ using Content.Shared.GameTicking; using Content.Shared.Inventory; using Content.Shared.Preferences; using Content.Shared.Roles; +using Content.Shared.Species; using Robust.Client.GameObjects; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; @@ -24,17 +25,21 @@ namespace Content.Client.Lobby.UI { private readonly IEntityManager _entMan; private readonly IClientPreferencesManager _preferencesManager; - private EntityUid _previewDummy; + private readonly IPrototypeManager _prototypeManager; + private EntityUid? _previewDummy; + private string? _previewDummySpecies; private readonly Label _summaryLabel; private readonly BoxContainer _loaded; + private readonly BoxContainer _viewBox; private readonly Label _unloaded; public LobbyCharacterPreviewPanel(IEntityManager entityManager, - IClientPreferencesManager preferencesManager) + IClientPreferencesManager preferencesManager, + IPrototypeManager prototypeManager) { _entMan = entityManager; _preferencesManager = preferencesManager; - _previewDummy = entityManager.SpawnEntity("MobHumanDummy", MapCoordinates.Nullspace); + _prototypeManager = prototypeManager; var header = new NanoHeading { @@ -49,11 +54,6 @@ namespace Content.Client.Lobby.UI _summaryLabel = new Label(); - var viewSouth = MakeSpriteView(_previewDummy, Direction.South); - var viewNorth = MakeSpriteView(_previewDummy, Direction.North); - var viewWest = MakeSpriteView(_previewDummy, Direction.West); - var viewEast = MakeSpriteView(_previewDummy, Direction.East); - var vBox = new BoxContainer { Orientation = LayoutOrientation.Vertical @@ -61,7 +61,7 @@ namespace Content.Client.Lobby.UI vBox.AddChild(header); - _unloaded = new Label {Text = Loc.GetString("lobby-character-preview-panel-unloaded-preferences-label")}; + _unloaded = new Label { Text = Loc.GetString("lobby-character-preview-panel-unloaded-preferences-label") }; _loaded = new BoxContainer { @@ -72,16 +72,12 @@ namespace Content.Client.Lobby.UI _loaded.AddChild(CharacterSetupButton); _loaded.AddChild(_summaryLabel); - var hBox = new BoxContainer + _viewBox = new BoxContainer { Orientation = LayoutOrientation.Horizontal }; - hBox.AddChild(viewSouth); - hBox.AddChild(viewNorth); - hBox.AddChild(viewWest); - hBox.AddChild(viewEast); - _loaded.AddChild(hBox); + _loaded.AddChild(_viewBox); vBox.AddChild(_loaded); vBox.AddChild(_unloaded); @@ -100,7 +96,7 @@ namespace Content.Client.Lobby.UI _preferencesManager.OnServerDataLoaded -= UpdateUI; if (!disposing) return; - _entMan.DeleteEntity(_previewDummy); + if (_previewDummy != null) _entMan.DeleteEntity(_previewDummy.Value); _previewDummy = default; } @@ -131,9 +127,19 @@ namespace Content.Client.Lobby.UI } else { + _previewDummy = _entMan.SpawnEntity(_prototypeManager.Index(selectedCharacter.Species).DollPrototype, MapCoordinates.Nullspace); + var viewSouth = MakeSpriteView(_previewDummy.Value, Direction.South); + var viewNorth = MakeSpriteView(_previewDummy.Value, Direction.North); + var viewWest = MakeSpriteView(_previewDummy.Value, Direction.West); + var viewEast = MakeSpriteView(_previewDummy.Value, Direction.East); + _viewBox.DisposeAllChildren(); + _viewBox.AddChild(viewSouth); + _viewBox.AddChild(viewNorth); + _viewBox.AddChild(viewWest); + _viewBox.AddChild(viewEast); _summaryLabel.Text = selectedCharacter.Summary; - EntitySystem.Get().UpdateFromProfile(_previewDummy, selectedCharacter); - GiveDummyJobClothes(_previewDummy, selectedCharacter); + EntitySystem.Get().UpdateFromProfile(_previewDummy.Value, selectedCharacter); + GiveDummyJobClothes(_previewDummy.Value, selectedCharacter); } } } @@ -156,7 +162,7 @@ namespace Content.Client.Lobby.UI foreach (var slot in slots) { var itemType = gear.GetGear(slot.Name, profile); - if(invSystem.TryUnequip(dummy, slot.Name, out var unequippedItem, true, true)) + if (invSystem.TryUnequip(dummy, slot.Name, out var unequippedItem, true, true)) { entMan.DeleteEntity(unequippedItem.Value); } diff --git a/Content.Client/Lobby/UI/LobbyGui.xaml.cs b/Content.Client/Lobby/UI/LobbyGui.xaml.cs index aff5d14146..2402594a40 100644 --- a/Content.Client/Lobby/UI/LobbyGui.xaml.cs +++ b/Content.Client/Lobby/UI/LobbyGui.xaml.cs @@ -1,4 +1,4 @@ -using Content.Client.Chat.UI; +using Content.Client.Chat.UI; using Content.Client.Info; using Content.Client.Preferences; using Robust.Client.AutoGenerated; @@ -7,7 +7,9 @@ using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.XAML; using Robust.Shared.GameObjects; +using Robust.Shared.IoC; using Robust.Shared.Maths; +using Robust.Shared.Prototypes; using static Robust.Client.UserInterface.Controls.BoxContainer; namespace Content.Client.Lobby.UI @@ -27,7 +29,8 @@ namespace Content.Client.Lobby.UI CharacterPreview = new LobbyCharacterPreviewPanel( entityManager, - preferencesManager) + preferencesManager, + IoCManager.Resolve()) { HorizontalAlignment = HAlignment.Left }; @@ -46,7 +49,7 @@ namespace Content.Client.Lobby.UI { var panel = new PanelContainer() { - PanelOverride = new StyleBoxFlat {BackgroundColor = Color.FromHex("#202028")}, + PanelOverride = new StyleBoxFlat { BackgroundColor = Color.FromHex("#202028") }, }; _vBox = new BoxContainer {