예제 #1
0
        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);
        }
예제 #2
0
        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);
        }