Files
tbd-station-14/Content.Server/Power/Components/PowerMonitoringDeviceComponent.cs
chromiumboy 1de682e23f Power monitoring console overhaul (#20927)
* Prototyping whole station wire map

* More prototyping

* Added icons for the different power distributors and toggleable cable displays

* Power cable layouts are now only sent to the client when the power monitor is open

* UI prototyping

* Power monitors can now see the sprites of distant entities, long entity names are truncated

* Updated how network devices are added to the player's PVS

* More feature prototypes

* Added source / load symbols

* Final prototype! Time to actually code it properly...

* Start of code clean up

* Continuing code clean up

* Fixed UI appearance

* Code clean up complete

* Removed unnecessary changes

* Updated how power values are calculated, added UI warnings for power sinks and power net checks

* Updated how power values are calculated again, added support for portable generators

* Removed unnecessary files

* Map beacons start toggled off, console map now works outside the station, fixed substation icon

* Made some of Sloth's requested changes. Power distributors don't blink anymore, unless selected

* Moved a number of static variables in PowerMonitoringHelper to sensible places in the main files. Added a NavMapTrackableComponent so that you can specify how individual entities appear on the navmap

* Updated the colors/positions of HV cables and SMESes to improve contrast

* Fixed SMES color in map legend

* Partially fixed auto-scrolling on device selection, made sublists alphabetical

* Changed how auto-scroll is handled

* Changed the font color of the console warning messages

* Reduced the font size of beacon labels

* Added the station name to the console

* Organized references

* Removed unwanted changes to RobustToolbox

* Fix merge conflict

* Fix merge conflict, maybe

* Fix merge conflict

* Updated outdated reference

* Fixed portable_generator.yml

* Implemented a number of requested changes, move bit masks to a shared component

* Navigate listings via the navmap

* First attempt at improving efficiency

* Second attempt at optimization, entity grouping added for solar panels

* Finished solar panel entity joining

* Finished major revisions, code clean up needed

* Finializing optimizations

* Made requested changes

* Bug fix, removed obsolete code

* Bug fixes

* Bug fixes

* STarted revisions

* Further revisions

* More revision

* Finalizing revisions. Need to make RT PR

* Code tidying

* More code tidying

* Trying to avoid merge conflicts

* Trying to avoid merge conflicts

* Removed use of PVS

* Improving efficiency

* Addressed a bunch of outstanding issues

* Clear old data on console refresh

* UI adjustments

* Made node comparison more robust. More devices can be combined into one entry

* Added missing component 'dirty'
2023-12-24 17:07:41 +11:00

90 lines
3.1 KiB
C#

using Content.Server.NodeContainer;
using Content.Server.NodeContainer.NodeGroups;
using Content.Server.Power.EntitySystems;
using Content.Shared.Power;
namespace Content.Server.Power.Components;
/// <summary>
/// Used to flag any entities that should appear on a power monitoring console
/// </summary>
[RegisterComponent, Access(typeof(PowerMonitoringConsoleSystem))]
public sealed partial class PowerMonitoringDeviceComponent : Component
{
/// <summary>
/// Name of the node that this device draws its power from (see <see cref="NodeContainerComponent"/>)
/// </summary>
[DataField("sourceNode"), ViewVariables]
public string SourceNode = string.Empty;
/// <summary>
/// Name of the node that this device distributes power to (see <see cref="NodeContainerComponent"/>)
/// </summary>
[DataField("loadNode"), ViewVariables]
public string LoadNode = string.Empty;
/// <summary>
/// Names of the nodes that this device can potentially distributes power to (see <see cref="NodeContainerComponent"/>)
/// </summary>
[DataField("loadNodes"), ViewVariables]
public List<string>? LoadNodes;
/// <summary>
/// This entity will be grouped with entities that have the same collection name
/// </summary>
[DataField("collectionName"), ViewVariables]
public string CollectionName = string.Empty;
[ViewVariables]
public BaseNodeGroup? NodeGroup = null;
/// <summary>
/// Indicates whether the entity is/should be part of a collection
/// </summary>
public bool IsCollectionMasterOrChild { get { return CollectionName != string.Empty; } }
/// <summary>
/// Specifies the uid of the master that represents this entity
/// </summary>
/// <remarks>
/// Used when grouping multiple entities into a single power monitoring console entry
/// </remarks>
[ViewVariables]
public EntityUid CollectionMaster;
/// <summary>
/// Indicates if this entity represents a group of entities
/// </summary>
/// <remarks>
/// Used when grouping multiple entities into a single power monitoring console entry
/// </remarks>
public bool IsCollectionMaster { get { return Owner == CollectionMaster; } }
/// <summary>
/// A list of other entities that are to be represented by this entity
/// </summary>
/// /// <remarks>
/// Used when grouping multiple entities into a single power monitoring console entry
/// </remarks>
[ViewVariables]
public Dictionary<EntityUid, PowerMonitoringDeviceComponent> ChildDevices = new();
/// <summary>
/// Path to the .rsi folder
/// </summary>
[DataField("sprite"), ViewVariables]
public string SpritePath = string.Empty;
/// <summary>
/// The .rsi state
/// </summary>
[DataField("state"), ViewVariables]
public string SpriteState = string.Empty;
/// <summary>
/// Determines what power monitoring group this entity should belong to
/// </summary>
[DataField("group", required: true), ViewVariables]
public PowerMonitoringConsoleGroup Group;
}