diff --git a/Content.Client/Administration/UI/SpawnExplosion/SpawnExplosionWindow.xaml.cs b/Content.Client/Administration/UI/SpawnExplosion/SpawnExplosionWindow.xaml.cs index 5f187cad794..f90637a649e 100644 --- a/Content.Client/Administration/UI/SpawnExplosion/SpawnExplosionWindow.xaml.cs +++ b/Content.Client/Administration/UI/SpawnExplosion/SpawnExplosionWindow.xaml.cs @@ -22,6 +22,7 @@ public sealed partial class SpawnExplosionWindow : DefaultWindow [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IEntityManager _entMan = default!; + private SharedTransformSystem? _xformSystem = null; private readonly SpawnExplosionEui _eui; @@ -102,9 +103,13 @@ private void SetLocation() if (!_entMan.TryGetComponent(_playerManager.LocalEntity, out TransformComponent? transform)) return; + _xformSystem ??= _entMan.SystemOrNull(); + if (_xformSystem is null) + return; + _pausePreview = true; MapOptions.Select(_mapData.IndexOf(transform.MapID)); - (MapX.Value, MapY.Value) = transform.MapPosition.Position; + (MapX.Value, MapY.Value) = _xformSystem.GetWorldPosition(transform); _pausePreview = false; UpdatePreview(); diff --git a/Content.Client/Atmos/Overlays/GasTileOverlay.cs b/Content.Client/Atmos/Overlays/GasTileOverlay.cs index ef65d43fe85..4bbc4654fb4 100644 --- a/Content.Client/Atmos/Overlays/GasTileOverlay.cs +++ b/Content.Client/Atmos/Overlays/GasTileOverlay.cs @@ -22,6 +22,7 @@ public sealed class GasTileOverlay : Overlay { private readonly IEntityManager _entManager; private readonly IMapManager _mapManager; + private readonly SharedTransformSystem _xformSystem; public override OverlaySpace Space => OverlaySpace.WorldSpaceEntities; private readonly ShaderInstance _shader; @@ -51,6 +52,7 @@ public GasTileOverlay(GasTileOverlaySystem system, IEntityManager entManager, IR { _entManager = entManager; _mapManager = IoCManager.Resolve(); + _xformSystem = _entManager.System(); _shader = protoMan.Index("unshaded").Instance(); ZIndex = GasOverlayZIndex; @@ -156,7 +158,8 @@ protected override void Draw(in OverlayDrawArgs args) _fireFrameCounter, _shader, overlayQuery, - xformQuery); + xformQuery, + _xformSystem); var mapUid = _mapManager.GetMapEntityId(args.MapId); @@ -194,7 +197,8 @@ protected override void Draw(in OverlayDrawArgs args) int[] fireFrameCounter, ShaderInstance shader, EntityQuery overlayQuery, - EntityQuery xformQuery) state) => + EntityQuery xformQuery, + SharedTransformSystem xformSystem) state) => { if (!state.overlayQuery.TryGetComponent(uid, out var comp) || !state.xformQuery.TryGetComponent(uid, out var gridXform)) @@ -202,7 +206,7 @@ protected override void Draw(in OverlayDrawArgs args) return true; } - var (_, _, worldMatrix, invMatrix) = gridXform.GetWorldPositionRotationMatrixWithInv(); + var (_, _, worldMatrix, invMatrix) = state.xformSystem.GetWorldPositionRotationMatrixWithInv(gridXform); state.drawHandle.SetTransform(worldMatrix); var floatBounds = invMatrix.TransformBox(in state.WorldBounds).Enlarged(grid.TileSize); var localBounds = new Box2i( diff --git a/Content.Client/Backmen/Chat/ShadowkinChatUpdateSystem.cs b/Content.Client/Backmen/Chat/ShadowkinChatUpdateSystem.cs deleted file mode 100644 index 23e22ae179b..00000000000 --- a/Content.Client/Backmen/Chat/ShadowkinChatUpdateSystem.cs +++ /dev/null @@ -1,33 +0,0 @@ -using Content.Client.Chat.Managers; -using Robust.Client.Player; -using Content.Shared.Backmen.Species.Shadowkin.Components; - -namespace Content.Client.Backmen.Chat -{ - public sealed class ShadowkinChatUpdateSystem : EntitySystem - { - [Dependency] private readonly IChatManager _chatManager = default!; - [Dependency] private readonly IPlayerManager _playerManager = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnInit); - SubscribeLocalEvent(OnRemove); - } - - public EmpathyChatComponent? Player => CompOrNull(_playerManager.LocalPlayer?.ControlledEntity); - public bool IsShadowkin => Player != null; - - private void OnInit(EntityUid uid, EmpathyChatComponent component, ComponentInit args) - { - _chatManager.UpdatePermissions(); - } - - private void OnRemove(EntityUid uid, EmpathyChatComponent component, ComponentRemove args) - { - _chatManager.UpdatePermissions(); - } - } -} diff --git a/Content.Client/CardboardBox/CardboardBoxSystem.cs b/Content.Client/CardboardBox/CardboardBoxSystem.cs index 50f9de239d5..fc4f1e079ca 100644 --- a/Content.Client/CardboardBox/CardboardBoxSystem.cs +++ b/Content.Client/CardboardBox/CardboardBoxSystem.cs @@ -30,7 +30,7 @@ private void OnBoxEffect(PlayBoxEffectMessage msg) if (!xformQuery.TryGetComponent(source, out var xform)) return; - var sourcePos = _transform.GetMapCoordinates(source, xform); + var sourcePos = _transform.GetMapCoordinates((source, xform)); //Any mob that can move should be surprised? //God mind rework needs to come faster so it can just check for mind diff --git a/Content.Client/CartridgeLoader/Cartridges/NewsReadUi.cs b/Content.Client/CartridgeLoader/Cartridges/NewsReadUi.cs deleted file mode 100644 index 6874e9644d2..00000000000 --- a/Content.Client/CartridgeLoader/Cartridges/NewsReadUi.cs +++ /dev/null @@ -1,50 +0,0 @@ -using Content.Client.UserInterface.Fragments; -using Content.Shared.CartridgeLoader.Cartridges; -using Content.Shared.CartridgeLoader; -using Robust.Client.GameObjects; -using Robust.Client.UserInterface; - -namespace Content.Client.CartridgeLoader.Cartridges; - -public sealed partial class NewsReadUi : UIFragment -{ - private NewsReadUiFragment? _fragment; - - public override Control GetUIFragmentRoot() - { - return _fragment!; - } - - public override void Setup(BoundUserInterface userInterface, EntityUid? fragmentOwner) - { - _fragment = new NewsReadUiFragment(); - - _fragment.OnNextButtonPressed += () => - { - SendNewsReadMessage(NewsReadUiAction.Next, userInterface); - }; - _fragment.OnPrevButtonPressed += () => - { - SendNewsReadMessage(NewsReadUiAction.Prev, userInterface); - }; - _fragment.OnNotificationSwithPressed += () => - { - SendNewsReadMessage(NewsReadUiAction.NotificationSwith, userInterface); - }; - } - - public override void UpdateState(BoundUserInterfaceState state) - { - if (state is NewsReadBoundUserInterfaceState cast) - _fragment?.UpdateState(cast.Article, cast.TargetNum, cast.TotalNum, cast.NotificationOn); - else if (state is NewsReadEmptyBoundUserInterfaceState empty) - _fragment?.UpdateEmptyState(empty.NotificationOn); - } - - private void SendNewsReadMessage(NewsReadUiAction action, BoundUserInterface userInterface) - { - var newsMessage = new NewsReadUiMessageEvent(action); - var message = new CartridgeUiMessage(newsMessage); - userInterface.SendMessage(message); - } -} diff --git a/Content.Client/CartridgeLoader/Cartridges/NewsReaderUi.cs b/Content.Client/CartridgeLoader/Cartridges/NewsReaderUi.cs new file mode 100644 index 00000000000..8ad665d3616 --- /dev/null +++ b/Content.Client/CartridgeLoader/Cartridges/NewsReaderUi.cs @@ -0,0 +1,54 @@ +using Content.Client.UserInterface.Fragments; +using Content.Shared.CartridgeLoader.Cartridges; +using Content.Shared.CartridgeLoader; +using Robust.Client.UserInterface; + +namespace Content.Client.CartridgeLoader.Cartridges; + +public sealed partial class NewsReaderUi : UIFragment +{ + private NewsReaderUiFragment? _fragment; + + public override Control GetUIFragmentRoot() + { + return _fragment!; + } + + public override void Setup(BoundUserInterface userInterface, EntityUid? fragmentOwner) + { + _fragment = new NewsReaderUiFragment(); + + _fragment.OnNextButtonPressed += () => + { + SendNewsReaderMessage(NewsReaderUiAction.Next, userInterface); + }; + _fragment.OnPrevButtonPressed += () => + { + SendNewsReaderMessage(NewsReaderUiAction.Prev, userInterface); + }; + _fragment.OnNotificationSwithPressed += () => + { + SendNewsReaderMessage(NewsReaderUiAction.NotificationSwitch, userInterface); + }; + } + + public override void UpdateState(BoundUserInterfaceState state) + { + switch (state) + { + case NewsReaderBoundUserInterfaceState cast: + _fragment?.UpdateState(cast.Article, cast.TargetNum, cast.TotalNum, cast.NotificationOn); + break; + case NewsReaderEmptyBoundUserInterfaceState empty: + _fragment?.UpdateEmptyState(empty.NotificationOn); + break; + } + } + + private void SendNewsReaderMessage(NewsReaderUiAction action, BoundUserInterface userInterface) + { + var newsMessage = new NewsReaderUiMessageEvent(action); + var message = new CartridgeUiMessage(newsMessage); + userInterface.SendMessage(message); + } +} diff --git a/Content.Client/CartridgeLoader/Cartridges/NewsReadUiFragment.xaml b/Content.Client/CartridgeLoader/Cartridges/NewsReaderUiFragment.xaml similarity index 70% rename from Content.Client/CartridgeLoader/Cartridges/NewsReadUiFragment.xaml rename to Content.Client/CartridgeLoader/Cartridges/NewsReaderUiFragment.xaml index 7431713ea8e..bd5879408ef 100644 --- a/Content.Client/CartridgeLoader/Cartridges/NewsReadUiFragment.xaml +++ b/Content.Client/CartridgeLoader/Cartridges/NewsReaderUiFragment.xaml @@ -1,21 +1,30 @@ - + xmlns:customControls="clr-namespace:Content.Client.Administration.UI.CustomControls" + xmlns="https://spacestation14.io" + Margin="1 0 2 0" + Orientation="Vertical" + HorizontalExpand="True" + VerticalExpand="True"> - - - diff --git a/Content.Client/MassMedia/Ui/NewsWriteMenu.xaml.cs b/Content.Client/MassMedia/Ui/NewsWriteMenu.xaml.cs deleted file mode 100644 index 89ab1490af3..00000000000 --- a/Content.Client/MassMedia/Ui/NewsWriteMenu.xaml.cs +++ /dev/null @@ -1,42 +0,0 @@ -using Robust.Client.AutoGenerated; -using Robust.Client.UserInterface.CustomControls; -using Robust.Client.UserInterface.XAML; -using Robust.Shared.Prototypes; -using Content.Shared.MassMedia.Systems; - -namespace Content.Client.MassMedia.Ui; - -[GenerateTypedNameReferences] -public sealed partial class NewsWriteMenu : DefaultWindow -{ - public event Action? ShareButtonPressed; - public event Action? DeleteButtonPressed; - - public NewsWriteMenu(string name) - { - RobustXamlLoader.Load(this); - IoCManager.InjectDependencies(this); - - if (Window != null) - Window.Title = name; - - Share.OnPressed += _ => ShareButtonPressed?.Invoke(); - } - - public void UpdateUI(NewsArticle[] articles, bool shareAvalible) - { - ArticleCardsContainer.Children.Clear(); - - for (int i = 0; i < articles.Length; i++) - { - var article = articles[i]; - var mini = new MiniArticleCardControl(article.Name, (article.Author != null ? article.Author : Loc.GetString("news-read-ui-no-author"))); - mini.ArticleNum = i; - mini.OnDeletePressed += () => DeleteButtonPressed?.Invoke(mini.ArticleNum); - - ArticleCardsContainer.AddChild(mini); - } - - Share.Disabled = !shareAvalible; - } -} diff --git a/Content.Client/MassMedia/Ui/NewsWriterBoundUserInterface.cs b/Content.Client/MassMedia/Ui/NewsWriterBoundUserInterface.cs new file mode 100644 index 00000000000..80eca82e324 --- /dev/null +++ b/Content.Client/MassMedia/Ui/NewsWriterBoundUserInterface.cs @@ -0,0 +1,84 @@ +using JetBrains.Annotations; +using Content.Shared.MassMedia.Systems; +using Content.Shared.MassMedia.Components; +using Robust.Shared.Timing; +using Robust.Shared.Utility; + +namespace Content.Client.MassMedia.Ui; + +[UsedImplicitly] +public sealed class NewsWriterBoundUserInterface : BoundUserInterface +{ + [Dependency] private readonly IGameTiming _gameTiming = default!; + + [ViewVariables] + private NewsWriterMenu? _menu; + + public NewsWriterBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + + } + + protected override void Open() + { + _menu = new NewsWriterMenu(_gameTiming); + + _menu.OpenCentered(); + _menu.OnClose += Close; + + _menu.ArticleEditorPanel.PublishButtonPressed += OnPublishButtonPressed; + _menu.DeleteButtonPressed += OnDeleteButtonPressed; + + SendMessage(new NewsWriterArticlesRequestMessage()); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (!disposing) + return; + + _menu?.Close(); + _menu?.Dispose(); + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + if (state is not NewsWriterBoundUserInterfaceState cast) + return; + + _menu?.UpdateUI(cast.Articles, cast.PublishEnabled, cast.NextPublish); + } + + private void OnPublishButtonPressed() + { + var title = _menu?.ArticleEditorPanel.TitleField.Text.Trim() ?? ""; + if (_menu == null || title.Length == 0) + return; + + var stringContent = Rope.Collapse(_menu.ArticleEditorPanel.ContentField.TextRope).Trim(); + + if (stringContent.Length == 0) + return; + + var name = title.Length <= SharedNewsSystem.MaxTitleLength + ? title + : $"{title[..(SharedNewsSystem.MaxTitleLength - 3)]}..."; + + var content = stringContent.Length <= SharedNewsSystem.MaxContentLength + ? stringContent + : $"{stringContent[..(SharedNewsSystem.MaxContentLength - 3)]}..."; + + + SendMessage(new NewsWriterPublishMessage(name, content)); + } + + private void OnDeleteButtonPressed(int articleNum) + { + if (_menu == null) + return; + + SendMessage(new NewsWriterDeleteMessage(articleNum)); + } +} diff --git a/Content.Client/MassMedia/Ui/NewsWriterMenu.xaml b/Content.Client/MassMedia/Ui/NewsWriterMenu.xaml new file mode 100644 index 00000000000..64932bc6cfe --- /dev/null +++ b/Content.Client/MassMedia/Ui/NewsWriterMenu.xaml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + +