using Godot; using Nocturnis.Enigmos.Cables; using Nocturnis.Enigmos.Modules; using Nocturnis.Enigmos.Ports; namespace Enigmos.Ports; public abstract partial class BasePort : TextureButton, IBasePort { public virtual Vector2 PositionToBoard => Position + PivotOffset + Module?.PositionToBoard ?? Vector2.Zero; /// /// When Condition is Equal to 0, Port is Disabled /// public int Condition { get; set; } /// /// Each time the port is used, there is 1/Quality chance to damage the Condition /// public int Quality { get; set; } public IBaseModule Module { get; set; } public abstract bool IsMatch(IBasePort oth); public IBasePort ConnectedPort { get; set; } public bool Connected => ConnectedPort != null; public abstract void SetStatusPending(); public virtual void SetStatusConnected() { PostConnect(); } public abstract void SetStatusNormal(); /// /// Determine whether this port can be connected with given port /// public abstract IBaseCable MakeCable(IBasePort other); public virtual void Init() { } public void Connect() => this.ExtConnect(); public virtual void PostConnect() { } }