public void BuildMenu(Transform transform, MazeGenerationSettings existingSettings, Action <MazeGenerationSettings> settingsChanged)
        {
            _growingTreeSettings            = existingSettings as GrowingTreeSettings ?? new GrowingTreeSettings();
            _growingTreeSettings.Strategies = _growingTreeSettings.Strategies ?? new List <GrowingTreeStrategy>();
            _algorithmSettingsInitialiser.InitialiseOver(_growingTreeSettings, existingSettings);
            _growingTreeStrategyStorage.LoadStrategies(_growingTreeSettings.Strategies);

            _resourceLoader.InstantiateControl <TextControl>(transform).Initialize("Growing Tree Algorithm Settings");

            _resourceLoader.InstantiateControl <TextControl>(transform).Initialize("Cell selection weighting: the action will be randomly chosen ");

            _resourceLoader.InstantiateControl <SliderControl>(transform)
            .Initialize("Oldest", 0, 10,
                        _growingTreeStrategyStorage.Get(GrowingTreeStrategy.Oldest),
                        i => StrategyChanged(GrowingTreeStrategy.Oldest, i, settingsChanged));

            _resourceLoader.InstantiateControl <SliderControl>(transform)
            .Initialize("Newest", 0, 10,
                        _growingTreeStrategyStorage.Get(GrowingTreeStrategy.Newest),
                        i => StrategyChanged(GrowingTreeStrategy.Newest, i, settingsChanged));

            _resourceLoader.InstantiateControl <SliderControl>(transform)
            .Initialize("Middle", 0, 10,
                        _growingTreeStrategyStorage.Get(GrowingTreeStrategy.Middle),
                        i => StrategyChanged(GrowingTreeStrategy.Middle, i, settingsChanged));

            _resourceLoader.InstantiateControl <SliderControl>(transform)
            .Initialize("Randomness", 0, 10,
                        _growingTreeStrategyStorage.Get(GrowingTreeStrategy.Random),
                        i => StrategyChanged(GrowingTreeStrategy.Random, i, settingsChanged));

            _resourceLoader.InstantiateControl <SliderControl>(transform)
            .Initialize("Random Oldest Half", 0, 10,
                        _growingTreeStrategyStorage.Get(GrowingTreeStrategy.RandomOldest),
                        i => StrategyChanged(GrowingTreeStrategy.RandomOldest, i, settingsChanged));

            _resourceLoader.InstantiateControl <SliderControl>(transform)
            .Initialize("Random Newest Half", 0, 10,
                        _growingTreeStrategyStorage.Get(GrowingTreeStrategy.RandomNewest),
                        i => StrategyChanged(GrowingTreeStrategy.RandomNewest, i, settingsChanged));

            settingsChanged(GetSettings());
        }
Exemplo n.º 2
0
        public ExperimentRunner(IMazeGenerationFactory mazeGenerationFactory, IArrayHelper arrayHelper, IOutputWriter outputWriter, IDirectionsFlagParser directionsFlagParser)
        {
            _mazeGenerationFactory = mazeGenerationFactory;
            _arrayHelper           = arrayHelper;
            _outputWriter          = outputWriter;
            _directionsFlagParser  = directionsFlagParser;

            Settings1 = new MazeGenerationSettings
            {
                Algorithm   = Algorithm.BinaryTreeAlgorithm,
                AgentType   = AgentType.None,
                DoorsAtEdge = true,
                ExtraWalls  = WallCarverOption.Random,
                Option      = MazeType.DirectedMaze,
                Size        = new MazeSize {
                    X = 25, Y = 25, Z = 25
                }
            };

            Settings2 = new MazeGenerationSettings
            {
                Algorithm   = Algorithm.BinaryTreeAlgorithm,
                AgentType   = AgentType.None,
                DoorsAtEdge = false,
                ExtraWalls  = WallCarverOption.Random,
                Option      = MazeType.DirectedMaze,
                Size        = new MazeSize {
                    X = 25, Y = 25, Z = 25
                }
            };

            Settings3 = new MazeGenerationSettings
            {
                Algorithm   = Algorithm.RecursiveBacktrackerAlgorithm,
                AgentType   = AgentType.None,
                DoorsAtEdge = true,
                ExtraWalls  = WallCarverOption.Random,
                Option      = MazeType.DirectedMaze,
                Size        = new MazeSize {
                    X = 25, Y = 25, Z = 25
                }
            };

            Settings4 = new MazeGenerationSettings
            {
                Algorithm   = Algorithm.RecursiveBacktrackerAlgorithm,
                AgentType   = AgentType.None,
                DoorsAtEdge = false,
                ExtraWalls  = WallCarverOption.Random,
                Option      = MazeType.DirectedMaze,
                Size        = new MazeSize {
                    X = 25, Y = 25, Z = 25
                }
            };

            Settings5 = new GrowingTreeSettings
            {
                Algorithm   = Algorithm.GrowingTreeAlgorithm,
                AgentType   = AgentType.None,
                DoorsAtEdge = true,
                ExtraWalls  = WallCarverOption.Random,
                Option      = MazeType.DirectedMaze,
                Size        = new MazeSize {
                    X = 25, Y = 25, Z = 25
                },
                Strategies = new List <GrowingTreeStrategy> {
                    GrowingTreeStrategy.Newest
                }
            };

            Settings6 = new GrowingTreeSettings
            {
                Algorithm   = Algorithm.GrowingTreeAlgorithm,
                AgentType   = AgentType.None,
                DoorsAtEdge = false,
                ExtraWalls  = WallCarverOption.Random,
                Option      = MazeType.DirectedMaze,
                Size        = new MazeSize {
                    X = 25, Y = 25, Z = 25
                },
                Strategies = new List <GrowingTreeStrategy> {
                    GrowingTreeStrategy.Newest
                }
            };

            Settings7 = new GrowingTreeSettings
            {
                Algorithm   = Algorithm.GrowingTreeAlgorithm,
                AgentType   = AgentType.None,
                DoorsAtEdge = true,
                ExtraWalls  = WallCarverOption.Random,
                Option      = MazeType.DirectedMaze,
                Size        = new MazeSize {
                    X = 25, Y = 25, Z = 25
                },
                Strategies = new List <GrowingTreeStrategy> {
                    GrowingTreeStrategy.Random
                }
            };

            Settings8 = new GrowingTreeSettings
            {
                Algorithm   = Algorithm.GrowingTreeAlgorithm,
                AgentType   = AgentType.None,
                DoorsAtEdge = false,
                ExtraWalls  = WallCarverOption.Random,
                Option      = MazeType.DirectedMaze,
                Size        = new MazeSize {
                    X = 25, Y = 25, Z = 25
                },
                Strategies = new List <GrowingTreeStrategy> {
                    GrowingTreeStrategy.Random
                }
            };

            Settings9 = new GrowingTreeSettings
            {
                Algorithm   = Algorithm.GrowingTreeAlgorithm,
                AgentType   = AgentType.None,
                DoorsAtEdge = true,
                ExtraWalls  = WallCarverOption.Random,
                Option      = MazeType.DirectedMaze,
                Size        = new MazeSize {
                    X = 25, Y = 25, Z = 25
                },
                Strategies = new List <GrowingTreeStrategy> {
                    GrowingTreeStrategy.Newest, GrowingTreeStrategy.Newest, GrowingTreeStrategy.Newest, GrowingTreeStrategy.RandomOldest, GrowingTreeStrategy.Middle
                }
            };

            Settings10 = new GrowingTreeSettings
            {
                Algorithm   = Algorithm.GrowingTreeAlgorithm,
                AgentType   = AgentType.None,
                DoorsAtEdge = false,
                ExtraWalls  = WallCarverOption.Random,
                Option      = MazeType.DirectedMaze,
                Size        = new MazeSize {
                    X = 25, Y = 25, Z = 25
                },
                Strategies = new List <GrowingTreeStrategy> {
                    GrowingTreeStrategy.Newest, GrowingTreeStrategy.Newest, GrowingTreeStrategy.Newest, GrowingTreeStrategy.RandomOldest, GrowingTreeStrategy.Middle
                }
            };

            Settings11 = new GrowingTreeSettings
            {
                Algorithm   = Algorithm.GrowingTreeAlgorithm,
                AgentType   = AgentType.None,
                DoorsAtEdge = true,
                ExtraWalls  = WallCarverOption.Random,
                Option      = MazeType.DirectedMaze,
                Size        = new MazeSize {
                    X = 25, Y = 25, Z = 25
                },
                Strategies = new List <GrowingTreeStrategy> {
                    GrowingTreeStrategy.Newest, GrowingTreeStrategy.Oldest
                }
            };

            Settings12 = new GrowingTreeSettings
            {
                Algorithm   = Algorithm.GrowingTreeAlgorithm,
                AgentType   = AgentType.None,
                DoorsAtEdge = false,
                ExtraWalls  = WallCarverOption.Random,
                Option      = MazeType.DirectedMaze,
                Size        = new MazeSize {
                    X = 25, Y = 25, Z = 25
                },
                Strategies = new List <GrowingTreeStrategy> {
                    GrowingTreeStrategy.Newest, GrowingTreeStrategy.Oldest
                }
            };
        }