internal void SwitchFibers(GameFiber stopFiber, Fibers startFiber, CaseData data = null) { $"Switching fiber {stopFiber} to {startFiber}".AddLog(); if (stopFiber.IsAlive) { stopFiber.Abort(); } StartFiber(startFiber, data); }
public void Announce(GameState newState) { lock (SyncLock) { var res = MatchResults <Fiber> .MatchData(Fibers, newState.Fibers); var keys = res.ToRemove.ToDictionary(x => x.ID); for (int i = Fibers.Count - 1; i >= 0; i--) { if (keys.ContainsKey(Fibers[i].ID)) { Fibers.RemoveAt(i); } } foreach (var f in res.ToUpdate) { UpdateFiber(f.Old, f.New); } foreach (var f in res.ToAdd) { Fibers.Add(f); } this.ExecDetails = newState.ExecDetails; var newLookup = newState.GameObjects.ToDictionary(x => x.ID); foreach (var kvp in newLookup) { if (!GameObjectLookup.ContainsKey(kvp.Key)) { GameObjectLookup.Add(kvp.Key, kvp.Value); } else { UpdateGo(GameObjectLookup[kvp.Key], kvp.Value); } } List <int> toRemove = new List <int>(); foreach (var kvp in GameObjectLookup) { if (!newLookup.ContainsKey(kvp.Key)) { toRemove.Add(kvp.Key); } } foreach (var key in toRemove) { GameObjectLookup.Remove(key); } } }
internal void StartFiber(Fibers fiber, CaseData data = null) { if (data != null) { CData = data; } $"Starting {fiber}".AddLog(true); switch (fiber) { case Fibers.EvidenceFiber: EvidenceFiber = new GameFiber(EvidenceVoid); EvidenceFiber.Start(); break; case Fibers.LabFiber: LabFiber = new GameFiber(LabVoid); LabFiber.Start(); break; case Fibers.MainFiber: MainFiber = new GameFiber(MainVoid); MainFiber.Start(); break; case Fibers.MessageBoxFiber: MessageBoxFiber = new GameFiber(MessageVoid); MessageBoxFiber.Start(); break; case Fibers.ReportFiber: ReportFiber = new GameFiber(ReportVoid); ReportFiber.Start(); break; case Fibers.VictimFiber: VictimFiber = new GameFiber(VictimVoid); VictimFiber.Start(); break; case Fibers.WarrantFiber: WarrantFiber = new GameFiber(WarrantVoid); WarrantFiber.Start(); break; case Fibers.WarrantRequestFiber: WarrantRequestFiber = new GameFiber(WarrantReqVoid); WarrantRequestFiber.Start(); break; case Fibers.WitnessFiber: WitnessFiber = new GameFiber(WitnessVoid); WitnessFiber.Start(); break; case Fibers.SecurityCamFiber: SecurityCamFiber = new GameFiber(SecurityVoid); SecurityCamFiber.Start(); break; } IsRunning = true; }