mirror of
https://github.com/DeltaV-Station/Delta-v.git
synced 2026-09-29 23:57:29 +00:00
* Add door electronics configuration menu
* Use file-scoped namespaces
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Open door electronics configuration menu only with network configurator
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Doors will now try to move their AccessReaderComponent to their door electronics when the map is initialized
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Make the access list in the id card computer a separate control
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Fix merge conflict
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Remove DoorElectronics tag
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Integrate doors with #17927
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Move door electornics ui stuff to the right place
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Some review fixes
Signed-off-by: c4llv07e <kseandi@gmail.com>
* More fixes
Signed-off-by: c4llv07e <kseandi@gmail.com>
* review fix
Signed-off-by: c4llv07e <kseandi@gmail.com>
* move all accesses from airlock prototypes to door electronics
Signed-off-by: c4llv07e <kseandi@gmail.com>
* rework door electronics config access list
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Remove Linq from the door electronics user interface
* [WIP] Add EntityWhitelist to the activatable ui component
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Better interaction system
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Refactor
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Fix some door electronics not working without AccessReaderComponent
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Move AccessReaderComponent update code to the AccessReaderSystem
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Remove unnecesary newlines in the door access prototypes
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Remove unused variables in access level control
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Remove unnecessary method from the door electronics configuration menu
Signed-off-by: c4llv07e <kseandi@gmail.com>
* [WIP] change access type from string to ProtoId<AccessLevelPrototype>
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Remove unused methods
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Newline fix
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Restored to a functional state
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Fix access configurator not working with door electronics AccessReaderComponent
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Replace all string access fields with ProtoId
Signed-off-by: c4llv07e <kseandi@gmail.com>
* move access level control initialization into Populate method
Signed-off-by: c4llv07e <kseandi@gmail.com>
* Review
---------
Signed-off-by: c4llv07e <kseandi@gmail.com>
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
(cherry picked from commit 64bb8dbdd5)
142 lines
3.5 KiB
C#
142 lines
3.5 KiB
C#
using Content.Shared.Access;
|
|
using Content.Shared.Maps;
|
|
using Content.Shared.Whitelist;
|
|
using Robust.Shared.Prototypes;
|
|
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
|
|
|
|
namespace Content.Shared.Random;
|
|
|
|
/// <summary>
|
|
/// Rules-based item selection. Can be used for any sort of conditional selection
|
|
/// Every single condition needs to be true for this to be selected.
|
|
/// e.g. "choose maintenance audio if 90% of tiles nearby are maintenance tiles"
|
|
/// </summary>
|
|
[Prototype("rules")]
|
|
public sealed partial class RulesPrototype : IPrototype
|
|
{
|
|
[IdDataField] public string ID { get; } = string.Empty;
|
|
|
|
[DataField("rules", required: true)]
|
|
public List<RulesRule> Rules = new();
|
|
}
|
|
|
|
[ImplicitDataDefinitionForInheritors]
|
|
public abstract partial class RulesRule
|
|
{
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns true if the attached entity is in space.
|
|
/// </summary>
|
|
public sealed partial class InSpaceRule : RulesRule
|
|
{
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// Checks for entities matching the whitelist in range.
|
|
/// This is more expensive than <see cref="NearbyComponentsRule"/> so prefer that!
|
|
/// </summary>
|
|
public sealed partial class NearbyEntitiesRule : RulesRule
|
|
{
|
|
/// <summary>
|
|
/// How many of the entity need to be nearby.
|
|
/// </summary>
|
|
[DataField("count")]
|
|
public int Count = 1;
|
|
|
|
[DataField("whitelist", required: true)]
|
|
public EntityWhitelist Whitelist = new();
|
|
|
|
[DataField("range")]
|
|
public float Range = 10f;
|
|
}
|
|
|
|
public sealed partial class NearbyTilesPercentRule : RulesRule
|
|
{
|
|
/// <summary>
|
|
/// If there are anchored entities on the tile do we ignore the tile.
|
|
/// </summary>
|
|
[DataField("ignoreAnchored")] public bool IgnoreAnchored;
|
|
|
|
[DataField("percent", required: true)]
|
|
public float Percent;
|
|
|
|
[DataField("tiles", required: true, customTypeSerializer:typeof(PrototypeIdListSerializer<ContentTileDefinition>))]
|
|
public List<string> Tiles = new();
|
|
|
|
[DataField("range")]
|
|
public float Range = 10f;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Always returns true. Used for fallbacks.
|
|
/// </summary>
|
|
public sealed partial class AlwaysTrueRule : RulesRule
|
|
{
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns true if on a grid or in range of one.
|
|
/// </summary>
|
|
public sealed partial class GridInRangeRule : RulesRule
|
|
{
|
|
[DataField("range")]
|
|
public float Range = 10f;
|
|
|
|
[DataField("inverted")]
|
|
public bool Inverted = false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns true if griduid and mapuid match (AKA on 'planet').
|
|
/// </summary>
|
|
public sealed partial class OnMapGridRule : RulesRule
|
|
{
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// Checks for an entity nearby with the specified access.
|
|
/// </summary>
|
|
public sealed partial class NearbyAccessRule : RulesRule
|
|
{
|
|
// This exists because of doorelectronics contained inside doors.
|
|
/// <summary>
|
|
/// Does the access entity need to be anchored.
|
|
/// </summary>
|
|
[DataField("anchored")]
|
|
public bool Anchored = true;
|
|
|
|
/// <summary>
|
|
/// Count of entities that need to be nearby.
|
|
/// </summary>
|
|
[DataField("count")]
|
|
public int Count = 1;
|
|
|
|
[DataField("access", required: true)]
|
|
public List<ProtoId<AccessLevelPrototype>> Access = new();
|
|
|
|
[DataField("range")]
|
|
public float Range = 10f;
|
|
}
|
|
|
|
public sealed partial class NearbyComponentsRule : RulesRule
|
|
{
|
|
/// <summary>
|
|
/// Does the entity need to be anchored.
|
|
/// </summary>
|
|
[DataField("anchored")]
|
|
public bool Anchored;
|
|
|
|
[DataField("count")] public int Count;
|
|
|
|
[DataField("components", required: true)]
|
|
public ComponentRegistry Components = default!;
|
|
|
|
[DataField("range")]
|
|
public float Range = 10f;
|
|
}
|