void Init() { if (!NameContains(Me, MultiMix_UsedBlocks)) { throw new Exception($"Programmable block does not have '{MultiMix_UsedBlocks}' in its custom-name.\nDid you read the instructions?"); } lcdLeft.Clear(); lcdCntr.Clear(); lcdRght.Clear(); var lcdBearing = new OutputPanel(); ActionOnBlocksOfType <IMyTextPanel>(this, Me, p => { if (p.IsWorking && !NameContains(p, MultiMix_IgnoreBlocks)) { if (NameContains(p, "Center")) { lcdCntr.Add(p); } else if (NameContains(p, "Left")) { lcdLeft.Add(p); } else if (NameContains(p, "Right")) { lcdRght.Add(p); } else if (NameContains(p, "Bearing")) { lcdBearing.Add(p); } } }); lcdLeft.ShowPublicText("Initializing: Left panel(s)"); lcdCntr.ShowPublicText("Initializing: Center panel(s)"); lcdRght.ShowPublicText("Initializing: Right panel(s)"); var sc = GetShipController(MultiMix_UsedBlocks, true); var alignActive = alignMgr?.Active ?? false; var cargoActive = cargoMgr?.Active ?? true; alignMgr = alignMgr ?? new AlignModule(this); ascDecMgr = ascDecMgr ?? new AscendDecendModule(this); cargoMgr = cargoMgr ?? new CargoModule(this); yieldMgr = yieldMgr ?? new YieldModule(this); alignMgr.Refresh(ascDecMgr, sc); ascDecMgr.Refresh(lcdRght, alignMgr, sc); cargoMgr.Refresh(lcdLeft); alignMgr.Active = alignActive; cargoMgr.Active = cargoActive; engineMgr = engineMgr ?? new EngineModule(this); engineMgr.Refresh(Me, sc); toolsMgr = toolsMgr ?? new ToolsModule(this); toolsMgr.Refresh(); bearingMgr = bearingMgr ?? new Whip_Bearing(this); bearingMgr.Refresh(lcdBearing, sc); bearingMgr.Active = (lcdBearing.Count > 0); menuMgr = menuMgr ?? new MenuManager(this); BuildMenu(); }