News UI overhaul and PDA notifications (#19610)

This commit is contained in:
Julian Giebel
2024-02-27 02:38:00 +01:00
committed by GitHub
parent f284b43ff6
commit 0752acdc2c
54 changed files with 1381 additions and 708 deletions

View File

@@ -0,0 +1,55 @@
using Content.Shared.MassMedia.Systems;
using Robust.Shared.Serialization;
namespace Content.Shared.MassMedia.Components;
[Serializable, NetSerializable]
public enum NewsWriterUiKey : byte
{
Key
}
[Serializable, NetSerializable]
public sealed class NewsWriterBoundUserInterfaceState : BoundUserInterfaceState
{
public readonly NewsArticle[] Articles;
public readonly bool PublishEnabled;
public readonly TimeSpan NextPublish;
public NewsWriterBoundUserInterfaceState(NewsArticle[] articles, bool publishEnabled, TimeSpan nextPublish)
{
Articles = articles;
PublishEnabled = publishEnabled;
NextPublish = nextPublish;
}
}
[Serializable, NetSerializable]
public sealed class NewsWriterPublishMessage : BoundUserInterfaceMessage
{
public readonly string Title;
public readonly string Content;
public NewsWriterPublishMessage(string title, string content)
{
Title = title;
Content = content;
}
}
[Serializable, NetSerializable]
public sealed class NewsWriterDeleteMessage : BoundUserInterfaceMessage
{
public readonly int ArticleNum;
public NewsWriterDeleteMessage(int num)
{
ArticleNum = num;
}
}
[Serializable, NetSerializable]
public sealed class NewsWriterArticlesRequestMessage : BoundUserInterfaceMessage
{
}

View File

@@ -1,54 +0,0 @@
using Content.Shared.MassMedia.Systems;
using Robust.Shared.Serialization;
namespace Content.Shared.MassMedia.Components;
[Serializable, NetSerializable]
public enum NewsWriteUiKey : byte
{
Key
}
[Serializable, NetSerializable]
public sealed class NewsWriteBoundUserInterfaceState : BoundUserInterfaceState
{
public NewsArticle[] Articles;
public bool ShareAvalible;
public NewsWriteBoundUserInterfaceState(NewsArticle[] articles, bool shareAvalible)
{
Articles = articles;
ShareAvalible = shareAvalible;
}
}
[Serializable, NetSerializable]
public sealed class NewsWriteShareMessage : BoundUserInterfaceMessage
{
public readonly string Name;
public readonly string Content;
public NewsWriteShareMessage(string name, string content)
{
Name = name;
Content = content;
}
}
[Serializable, NetSerializable]
public sealed class NewsWriteDeleteMessage : BoundUserInterfaceMessage
{
public int ArticleNum;
public NewsWriteDeleteMessage(int num)
{
ArticleNum = num;
}
}
[Serializable, NetSerializable]
public sealed class NewsWriteArticlesRequestMessage : BoundUserInterfaceMessage
{
public NewsWriteArticlesRequestMessage()
{
}
}

View File

@@ -0,0 +1,10 @@
using Content.Shared.MassMedia.Systems;
namespace Content.Shared.MassMedia.Components;
[RegisterComponent]
public sealed partial class StationNewsComponent : Component
{
[DataField]
public List<NewsArticle> Articles = new();
}

View File

@@ -4,16 +4,31 @@ namespace Content.Shared.MassMedia.Systems;
public abstract class SharedNewsSystem : EntitySystem
{
public const int MaxNameLength = 25;
public const int MaxArticleLength = 2048;
public const int MaxTitleLength = 25;
public const int MaxContentLength = 2048;
}
[Serializable, NetSerializable]
public struct NewsArticle
{
public string Name;
[ViewVariables(VVAccess.ReadWrite)]
public string Title;
[ViewVariables(VVAccess.ReadWrite)]
public string Content;
[ViewVariables(VVAccess.ReadWrite)]
public string? Author;
[ViewVariables]
public ICollection<(NetEntity, uint)>? AuthorStationRecordKeyIds;
[ViewVariables]
public TimeSpan ShareTime;
}
[ByRefEvent]
public record struct NewsArticlePublishedEvent(NewsArticle Article);
[ByRefEvent]
public record struct NewsArticleDeletedEvent;