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