示例#1
0
        void DetectNewScreens()
        {
            foundScreens.Clear();

            foreach (var screen in GetScreens())
            {
                if (hookedScreens.Contains(screen))
                {
                    foundScreens.Add(screen);

                    if (screen.GetType() == GamePlayScreenType)
                    {
                        itemLocationMap = ((GameplayScreen)hookedScreens[screen]).ItemLocations;
                    }

                    continue;
                }

                if (!Screen.RegisteredTypes.TryGetValue(screen.GetType(), out Type handlerType))
                {
                    continue;
                }

                var screenHandler = (Screen)Activator.CreateInstance(handlerType, this, screen);
                hookedScreens.Add(screenHandler);
                foundScreens.Add(screen);

                screenHandler.Initialize(itemLocationMap, (GCM)Reflected.GCM);
            }

            if (foundScreens.Count != hookedScreens.Count)
            {
                hookedScreens.Filter(foundScreens, s => s.Unload());
            }
        }
示例#2
0
        public void Should_generate_a_hundert_beatable_seeds()
        {
            var seeds = new LookupDictionairy <Seed, GenerationResult>(r => r.Seed);

            while (seeds.Count != 100)
            {
                var result = Randomizer.Generate(FillingMethod.Random, SeedOptions.None);

                if (!seeds.Contains(result.Seed))
                {
                    seeds.Add(result);
                }
            }

            var longestGeneration = seeds.OrderByDescending(s => s.Elapsed).First();
            var validSeeds        = string.Join("\n", seeds.Select(s => s.Seed));

            Assert.That(seeds, Is.Not.Empty);
        }
示例#3
0
        void MarkAvailableItemLocations()
        {
            preservedRoomStates = new LookupDictionairy <Roomkey, MinimapRoomState>(r => r.RoomKey);

            var visableAreas = (List <EMinimapEraType>)Dynamic._availableEras;

            foreach (var itemLocation in GetAvailableItemLocations())
            {
                var roomKey = new Roomkey(itemLocation.Key.LevelId, itemLocation.Key.RoomId);                 //somehow they keys dont match if we use itemLocation.Key directly
                if (preservedRoomStates.Contains(roomKey))
                {
                    continue;
                }

                var room = GetRoom(roomKey);

                MakeSureEraIsVisable(visableAreas, room);
                preservedRoomStates.Add(new MinimapRoomState(roomKey, room));

                foreach (var block in room.Blocks.Values)
                {
                    if (block.IsSolidWall)
                    {
                        continue;
                    }

                    block.IsKnown   = true;
                    block.IsVisited = true;

                    if (block.IsTransition || block.IsCheckpoint || block.IsBoss)
                    {
                        block.IsTransition = false;
                        block.IsCheckpoint = false;
                        block.RoomColor    = EMinimapRoomColor.Yellow;
                    }
                    else
                    {
                        block.RoomColor = EMinimapRoomColor.Orange;
                    }
                }
            }
        }