public bool VerifyFullCompletable(Common.SaveData.SaveData someData, Dictionary <string, Guid> aRandomMap, Inventory aStartInventory = null) { fullComplete = true; var result = SearchBeatableStart(someData, aRandomMap, aStartInventory); myWaveLog = result.Item2; return(result.Item1); }
private (bool, WaveLog) SearchBeatableStart(Common.SaveData.SaveData someData, Dictionary <string, Guid> aRandomMap, Inventory aStartInventory) { DetailedLog = new LogLayer("Verification"); KeyManager.Initialize(someData); KeyManager.SetRandomKeyMap(aRandomMap); var nodeCollection = new NodeCollection(); nodeCollection.InitializeNodes(someData); var keyNodes = nodeCollection.myNodes.Where(node => node is KeyNode && (node as KeyNode).GetKey() != null).ToList(); var eventNodes = keyNodes.Where(node => node is EventKeyNode).Select(node => node as EventKeyNode); var startNode = eventNodes.FirstOrDefault(x => string.Equals(x.GetKey().Name, "Game Start", StringComparison.InvariantCultureIgnoreCase)); var endNode = eventNodes.FirstOrDefault(x => string.Equals(x.GetKey().Name, "Game Finish", StringComparison.InvariantCultureIgnoreCase)); DetailedLog.AddChild("keyNodes", keyNodes.Select(key => key.Name())); DetailedLog.AddChild("eventNodes", eventNodes.Select(key => key.Name())); if (startNode == null || endNode == null) { return(false, new WaveLog()); } aStartInventory = aStartInventory ?? new Inventory(); var result = SearchBeatable(startNode, endNode, keyNodes, aStartInventory, DetailedLog); DetailedLog.AddChild("Search complete"); globalReachable = keyNodes.Except(globalReachable).ToList(); DetailedLog.AddChild("Unreachable nodes", globalReachable.Select(key => GetNodeWithKeyName(key))); return(result.Item1 != null, result.Item2); }