using Enigmos.Boards; using Enigmos.Ports; using Nocturnis.Enigmos.Modules; using TabulaSmaragdina; namespace Enigmos.Modules.ProgrammableModules; public abstract partial class ProgrammableModule : BaseModule, ICompositeModule, IProgrammableModule { public BaseBoard UnderlyingBoard { get; set; } public abstract IBaseModule[] SubModules(); public void EnterProgrammableBoard() => GlobalProvider.SceneProvider.RootScene.ChangeScene(UnderlyingBoard); public abstract IEnumerable ExplicitPorts(); public abstract IEnumerable ImplicitPorts(); public override void UpdateCables() { foreach (BasePort port in ExplicitPorts()) { if(!Board.CablePairing.ContainsKey(port) ) continue; Board.CablePairing[port].LineUpdate(); } base.UpdateCables(); } protected T GetModule(string path) where T : BaseModule, IInterlayerModule { T res = GetNode(path); res.Init(); res.ParentModule = this; res.Board = Board; return res; } }