using JetBrains.Annotations; namespace Content.Client.IconSmoothing { /// /// Makes sprites of other grid-aligned entities like us connect. /// /// /// The system is based on Baystation12's smoothwalling, and thus will work with those. /// To use, set base equal to the prefix of the corner states in the sprite base RSI. /// Any objects with the same key will connect. /// [RegisterComponent] public sealed class IconSmoothComponent : Component { public (EntityUid?, Vector2i)? LastPosition; /// /// We will smooth with other objects with the same key. /// [DataField("key")] public string? SmoothKey { get; } /// /// Prepended to the RSI state. /// [DataField("base")] public string StateBase { get; } = string.Empty; /// /// Mode that controls how the icon should be selected. /// [DataField("mode")] public IconSmoothingMode Mode = IconSmoothingMode.Corners; /// /// Used by to reduce redundant updates. /// internal int UpdateGeneration { get; set; } } /// /// Controls the mode with which icon smoothing is calculated. /// [PublicAPI] public enum IconSmoothingMode : byte { /// /// Each icon is made up of 4 corners, each of which can get a different state depending on /// adjacent entities clockwise, counter-clockwise and diagonal with the corner. /// Corners, /// /// There are 16 icons, only one of which is used at once. /// The icon selected is a bit field made up of the cardinal direction flags that have adjacent entities. /// CardinalFlags, /// /// Where this component contributes to our neighbors being calculated but we do not update our own sprite. /// NoSprite, } }