using OpenAC.MosswartMassacre.Backend; using OpenAC.MosswartMassacre.FlagTracker; using OpenAC.MosswartMassacre.Infrastructure; using OpenAC.MosswartMassacre.Metas; using OpenAC.MosswartMassacre.Quests; using OpenAC.MosswartMassacre.Streams; using OpenAC.MosswartMassacre.Trackers; namespace OpenAC.MosswartMassacre; /// /// Every feature the plugin runs, in the order the root logs them in. Each /// slice of the port adds its features here and nowhere else. /// internal static class FeatureCatalog { public static void AddFeatures(MmContext context, BackendSession session, List features) { // Streams and session counters. var delayed = new DelayedCommands(context); var kills = new KillTracker(context.Clock); var rares = new RareTracker(context, delayed); var combat = new CombatStatsTracker(context); var stats = new SessionStats(context, kills, rares); var telemetry = new TelemetryStream(context, stats); features.Add(stats); features.Add(combat); features.Add(new ChatRouter(context, kills, combat, rares)); features.Add(telemetry); features.Add(new VitalsStream(context)); features.Add(new SpawnPortalStream(context)); features.Add(new BotControl(context)); var mainWindow = new Views.MainWindow(context, stats); features.Add(mainWindow); session.AddConnectionListener(telemetry); // Cross-computer vital and debuff sharing. var sharing = new Sharing.VitalSharing(context); features.Add(sharing); session.AddConnectionListener(sharing); session.AddShareHandler(sharing); features.Add(new Sharing.VitalSharingOverlay(context, sharing)); // The radar the backend turns on and off. var radar = new Radar.RadarStream(context, cells: null); features.Add(radar); session.RadarToggle = on => { if (on) radar.Start(); else radar.Stop(); }; // Quests, flag tracker, meta sync. var quests = new QuestManager(context); features.Add(quests); var flagTracker = new FlagTrackerFeature(context, quests); features.Add(flagTracker); var metas = new MetaSyncFeature(context); features.Add(metas); if (flagTracker.Panel is { } trackerPanel) mainWindow.FlagTrackerOpener = () => trackerPanel.IsVisible = true; if (metas.Panel is { } metasPanel) mainWindow.MetasOpener = () => metasPanel.IsVisible = true; } }