Exemple #1
0
    private void CreateRooms()
    {
        var roomsList = ProceduralGenerationAlgorithms.BinarySpacePartitioning(new BoundsInt((Vector3Int)startPos, new Vector3Int(dungeonWidth, dungeonHeight, 0)),
                                                                               minRoomWidth, minRoomHeight);                                                                                    // divide the dungeon into multiple rooms
        HashSet <Vector2Int> floor = new HashSet <Vector2Int>();

        if (randomWalkRooms)
        {
            floor = CreateRoomsRandomly(roomsList);                                                                         // create rooms with randomwalk using the divided rooms provided
        }
        else
        {
            floor = CreateSimpleRooms(roomsList);                                                                                                                                       // create simple rooms using the divided rooms provided
        }

        List <Vector2Int> roomCenters = new List <Vector2Int>();

        foreach (var room in roomsList)
        {
            roomCenters.Add((Vector2Int)Vector3Int.RoundToInt(room.center));                                                                                    // get the center of each room and add it to roomCenters
        }

        HashSet <Vector2Int> corridors = ConnectRooms(roomCenters);

        floor.UnionWith(corridors);

        tilemapVisualizer.PaintFloorTile(floor);
        WallGenerator.CreateWall(floor, tilemapVisualizer);
    }
Exemple #2
0
    private void CreateRooms()
    {
        var roomsList = ProceduralGenerationAlgorithms.BinarySpacePartitioning(new BoundsInt((Vector3Int)startPosition, new Vector3Int(dungeonWidth, dungeonHeight, 0)), minRoomWidth, minRoomHeight);

        HashSet <Vector2Int> floor = new HashSet <Vector2Int>();

        if (randomWalkRooms)
        {
            floor = CreateRoomsRandomly(roomsList);
        }
        else
        {
            floor = CreateSimpleRooms(roomsList);
        }


        List <Vector2Int> roomCenters = new List <Vector2Int>();

        foreach (var room in roomsList)
        {
            roomCenters.Add((Vector2Int)Vector3Int.RoundToInt(room.center));
        }

        HashSet <Vector2Int> corridors = ConnectRooms(roomCenters);

        floor.UnionWith(corridors);

        tilemapVisualizer.PaintFloorTiles(floor);
        WallGenerator.CreateWalls(floor, tilemapVisualizer);
    }
    // Use this for initialization
    void Awake()
    {
        _3DRoot       = GameObject.Find("3D Root");
        wallGenerator = _3DRoot.GetComponent <WallGenerator>();
        isoCam        = _3DRoot.transform.Find("Isocam").gameObject as GameObject;
        player        = _3DRoot.transform.Find("Player").gameObject as GameObject;
        _3DRoot.SetActive(false);
        _2DRoot     = GameObject.Find("2D Root");
        wallManager = GameObject.Find("2DManager").GetComponent <WallManager>();
        //_2DRoot = GameObject.Find("2D Root");
        //_3DRoot = GameObject.Find("3D Root");
        mainMenuScrollView = GameObject.Find("Main Menu Scroll View");
        submenu            = GameObject.Find("Sub Menu");

        itemNames           = new string[] { "windows & door", "table", "bed", "chair" };
        windowsanddoorNames = new string[] { "door1", "door2", "window1", "window2" };
        tableNames          = new string[] { "simple", "square", "long", "side", "oval", "stylish", "metallic", "coffeetop" };
        //cupboardNames = new string[] { "wooden", "metal", "glass", "circle" };
        bedNames   = new string[] { "simple", "lowered", "side-table", "double-table" };
        chairNames = new string[] { "red", "wooden", "round" };

        _3DUIRoot = transform.Find("3D UI Root");
        _2DUIRoot = transform.Find("2D UI Root");

        _3DUIRoot.gameObject.SetActive(false);
    }
Exemple #4
0
    protected override void RunProcedualGeneration()
    {
        HashSet <Vector2Int> floorPositions = RunRandomWalk(randomWalkParameters, startPos);

        tilemapVisualizer.Clear();
        tilemapVisualizer.PaintFloorTile(floorPositions);
        WallGenerator.CreateWall(floorPositions, tilemapVisualizer);
    }
 void Start()
 {
     WallGenerator.execute();
     textController = GetComponent <TextController>();
     count          = 0f;
     startCount     = 0f;
     is_finished    = false;
 }
Exemple #6
0
    protected override void RunProceduralGeneration()
    {
        HashSet <Vector2Int> floorPosition = RunRandomWalk(randomWalkParamiters, startPos);

        tileMapVisualiser.Clear();
        tileMapVisualiser.paintFloorTile(floorPosition);
        WallGenerator.CreateWalls(floorPosition, tileMapVisualiser);
    }
 public void Init()
 {
     _floorSpace = new FacilitySpace {
         Ground = new FacilityObject {
             Type = FacilityObjectNames.Floor
         }
     };
     _wallGenerator = new WallGenerator();
 }
    /// <summary>
    /// (Re)Instantiates Rooms and Wall objects
    /// </summary>
    public void InstantiateAll()
    {
        InstantiateParent(ref roomParent, "Rooms");
        InstantiateParent(ref wallParent, "Walls");

        GameObject[][,] wallGroups = WallGenerator.InstantiateWalls(wallParent.transform, wallPrefab, n, radius);

        GameObject[,] rooms = RoomGenerator.InstantiateRooms(roomParent.transform, roomPrefab, radius);


        for (int i = 0; i < wallGroups.Length; i++)
        {
            float angle = WallGenerator.CalculateRotation(i, n) * Mathf.Deg2Rad;
            for (int roomY = 0; roomY < rooms.GetLength(1); roomY++)
            {
                int offset = -Mathf.Max(radius - roomY - 1, 0);

                for (int roomX = Mathf.Max(radius - roomY - 1, 0); roomX < rooms.GetLength(0); roomX++)
                {
                    GameObject go = rooms[roomX, roomY];
                    if (go != null)
                    {
                        RoomController room = go.GetComponent <RoomController>();

                        if (i == 0)
                        {
                            WallController w1 = wallGroups[i][roomX + offset, roomY].GetComponent <WallController>();
                            WallController w2 = wallGroups[i][roomX + offset + 1, roomY].GetComponent <WallController>();
                            AddWalls(room, w1, w2);
                        }
                        else
                        {
                            Vector2 roomPosition    = new Vector2(room.transform.position.x, room.transform.position.z);
                            Vector2 rotatedPosition = roomPosition.RotateAround(0f, 0f, angle);


                            if (TryGetGameObjectAtPosition(rooms, new Vector3(rotatedPosition.x, 0f, rotatedPosition.y), out GameObject targetRoom))
                            {
                                RoomController target = targetRoom.GetComponent <RoomController>();

                                WallController w1 = target.Walls[0], w2 = target.Walls[1];

                                w1 = wallGroups[i][w1.X, w1.Y].GetComponent <WallController>();
                                w2 = wallGroups[i][w2.X, w2.Y].GetComponent <WallController>();

                                AddWalls(room, w1, w2);
                            }
                            else
                            {
                                Debug.Log($"Couldn't find room at position {rotatedPosition}");
                            }
                        }
                    }
                }
            }
        }
Exemple #9
0
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();
        WallGenerator script = (WallGenerator)target;

        if (GUILayout.Button("Rebuild"))
        {
            script.Generate();
        }
    }
Exemple #10
0
    public override void OnInspectorGUI()
    {
        WallGenerator wallGenerator = target as WallGenerator;

        DrawDefaultInspector();

        if (GUILayout.Button("Generate Wall"))
        {
            wallGenerator.GenerateWall();
        }
    }
    void Start()
    {
        rooms     = GetComponent <RoomGenerator>();
        corridors = GetComponent <CorridorGenerator>();
        walls     = GetComponent <WallGenerator>();
        chests    = GetComponent <ChestGenerator>();
        playerAndMerchantsGenerator = GetComponent <PlayerAndMerchantsGenerator>();
        enemiesGenerator            = GetComponent <EnemiesGenerator>();


        StartCoroutine(CreateDungeon());
        //
    }
Exemple #12
0
        public Level(int width, int height)
        {
            this.width  = width;
            this.height = height;

            tileObservers      = new List <ITileObserver>();
            wallObservers      = new List <IWallObserver>();
            furnitureObservers = new List <IFurnitureObserver>();

            tiles      = TileGenerator.Generate(this, width, height);
            walls      = WallGenerator.Generate(this, width, height);
            characters = new List <ICharacter>();
        }
    // Initializes tile as existing or nonexisting color based on its initial value.
    private void Start()
    {
        wallUnitUI = gameObject.GetComponent <Image>();

        wallGenerator = GameObject.Find("WallGenerator").GetComponent <WallGenerator>();

        if (unitExistenceArrayValue == 1)
        {
            ExistingWallUnit();
        }
        else
        {
            NonexistingWallUnit();
        }
    }
    private void CorridorFirstGeneration()
    {
        HashSet <Vector2Int> floorPositions         = new HashSet <Vector2Int>();
        HashSet <Vector2Int> potentialRoomPositions = new HashSet <Vector2Int>();

        CreateCorridoor(floorPositions, potentialRoomPositions);

        HashSet <Vector2Int> roomPositions = CreateRooms(potentialRoomPositions);
        List <Vector2Int>    deadEnds      = FindAllDeadEnd(floorPositions);

        CreateRoomAtDeadEnd(deadEnds, roomPositions);
        floorPositions.UnionWith(roomPositions);                        // save both corridor and room floor

        tilemapVisualizer.PaintFloorTile(floorPositions);
        WallGenerator.CreateWall(floorPositions, tilemapVisualizer);
    }
Exemple #15
0
    public void SetWall(WallGenerator wall)
    {
        Controller.enabled = false;
        Input     = GetComponent <PlayerInput>();
        this.wall = wall;
        var end = wall.GetComponentInChildren <EndSequence>();

        cameraPos  = Camera.transform.localPosition;
        cameraRot  = Camera.transform.localRotation;
        spawnPoint = GameManager.Instance.GetSpawnPoint(Input);
        transform.SetPositionAndRotation(spawnPoint.position, spawnPoint.rotation);
        Camera.transform.position = end.cameraPoint.position;
        Camera.transform.rotation = end.cameraPoint.rotation;
        lookRotation.y            = transform.rotation.eulerAngles.y;
        GrabPoint.SetColor(Input.playerIndex);
    }
Exemple #16
0
 public Match(string seed, IEnumerable<string> accountIds, int lobby, MatchType matchType, LogOnService logOnService)
 {
     _lobby = lobby;
       _matchType = matchType;
       _logOnService = logOnService;
       _shuffler = new WallGenerator(seed);
       _firstOyaIndex = _shuffler.GetWall(0).First().Id % 4;
       var playerIndex = 0;
       foreach (var player in accountIds)
       {
     _players.Add(player, new PlayerStatus(playerIndex));
     playerIndex += 1;
       }
       _stateMachine = new StateMachine(new PlayersConnectingState(this));
       _stateMachine.Finished += OnFinished;
 }
    private void CorridorFirstGeneration()
    {
        HashSet <Vector2Int> floorPositions         = new HashSet <Vector2Int>();
        HashSet <Vector2Int> potentialRoomPositions = new HashSet <Vector2Int>();

        CreateCorridors(floorPositions, potentialRoomPositions);

        HashSet <Vector2Int> roomPositions = CreateRooms(potentialRoomPositions);

        List <Vector2Int> deadEnds = FindAllDeadEnds(floorPositions);

        CreateRoomsAtDeadEnds(deadEnds, roomPositions);

        floorPositions.UnionWith(roomPositions);

        tileMapVisualiser.paintFloorTile(floorPositions);
        WallGenerator.CreateWalls(floorPositions, tileMapVisualiser);
    }
Exemple #18
0
    /// <summary>
    /// 初期化
    /// </summary>
    private void Initialize()
    {
        // ポーズパネルを非表示
        PausePanel.SetActive(false);

        // enemyGeneratorのnullチェック
        if (enemyGenerator != null)
        {
            // enemyGeneratorのコンポーネントを取得
            enemyGenerator = enemyGenerator.GetComponent <EnemyGenerator>();
        }

        // wallGeneratorのnullチェック
        else if (wallGenerator != null)
        {
            // wallGeneratorのコンポーネントを取得
            wallGenerator = wallGenerator.GetComponent <WallGenerator>();
        }
    }
    //generates track and stores those objects
    public void generate(string code)
    {
        string[] track; //track variable information

        //initializing compiler and compiling code.//
        Compiler.setCode(code);
        Compiler.compile();

        //interpretor setup and initilisation//
        _ip = new Interpretor();
        _ip.setICode(Compiler.getICode());
        _ip.init();

        rg   = new WallGenerator(this);
        path = new GameObject("path");
        rg.setPath(path);


        //parse the whole code.
        Compiler.setCode(code);
        if (!(Compiler.compile()))
        {
            return;
        }

        //Debug.Log("track generation sarted-------------------");
        //Debug.Log("s:" + speed_points + ",p:" + points_per_track);

        //each track instruction is provided
        while ((track = _ip.nextIns()) != null)
        {
            string __st = track[0];
            if (__st == Compiler.EOP)
            {
                break;
            }
            else if (__st == "wall")
            {
                wallFunc(track);
            }
        }
        load();
    }
    private void GameEnded()
    {
        WallGenerator winner    = null;
        float         bestScore = -1;

        foreach (WallGenerator wall in _walls)
        {
            float score = wall.GetScore();
            if (score > bestScore)
            {
                bestScore = score;
                winner    = wall;
            }
        }
        if (activePlayers.Count > 1 || bestScore >= minimumSPWinThreshold)
        {
            winner.IsWinningPlayer = true;
        }
        OnGameFinished?.Invoke();
    }
        public static void Execute(Beatmap beatmap)
        {
            try
            {
                var tuples = new List <Tuple <string, string, List <KeyValuePair <string, string> > > >();

                groupYmlContextLines(readAllLinesFromFile(beatmap.FullPath.Replace(".dat", ".yml")), tuples, beatmap.SongInfo.FullFolderPath);

                var walls  = new List <ObjectData>();
                var events = new List <EventData>();

                var firstTuple = tuples.First();

                if (firstTuple.Item1.Invariant("default"))
                {
                    var defaultGenerator = new WallGenerator();
                    var generatorList    = new List <WallGenerator>();

                    Global.Instance.Logger.Info("Setting all generators");
                    setGenerators(tuples, generatorList, defaultGenerator);

                    var wallList  = new List <Wall>();
                    var eventList = new List <Event>();

                    Global.Instance.Logger.Info("Generating nodes");
                    foreach (var wallGenerator in generatorList)
                    {
                        wallList.AddRange(wallGenerator.GenerateWallsFinalized());
                        eventList.AddRange(wallGenerator.GenerateEventsFinalized());
                    }

                    Global.Instance.Logger.Info("Converting nodes to objects");
                    walls.AddRange(wallList.Select(t => t.GenerateObstacle()).OrderBy(t => t.Time));
                    events.AddRange(eventList.SelectMany(t => t.GenerateEvent()).OrderBy(t => t.Time));

                    if (defaultGenerator.FlipOuterProps)
                    {
                        var eventsChanged = new int[5][] { new int[2] {
                                                               0, 0
                                                           }, new int[2] {
                                                               0, 0
                                                           }, new int[2] {
                                                               0, 0
                                                           }, new int[2] {
                                                               0, 0
                                                           }, new int[2] {
                                                               0, 0
                                                           } };
                        for (var i = 0; i <= 4; i++)
                        {
                            var highestProp = (int)defaultGenerator.GetType().GetProperties().First(f => f.Name.Invariant($"HighestProp{i}")).GetValue(defaultGenerator);
                            var lowestProp  = (int)defaultGenerator.GetType().GetProperties().First(f => f.Name.Invariant($"LowestProp{i}")).GetValue(defaultGenerator);
                            var evHigh      = events.Where(t => t.Type == i && t.CustomData.PropID == highestProp).ToArray();
                            var evLow       = events.Where(t => t.Type == i && t.CustomData.PropID == lowestProp).ToArray();
                            foreach (var ev in events)
                            {
                                if (ev.Type == i && ev.CustomData.PropID == highestProp)
                                {
                                    ev.CustomData.PropID = lowestProp;
                                    eventsChanged[i][0]++;
                                }
                                else if (ev.Type == i && ev.CustomData.PropID == lowestProp)
                                {
                                    ev.CustomData.PropID = highestProp;
                                    eventsChanged[i][1]++;
                                }
                            }
                        }
                        Global.Instance.Logger.Info($"Changed {eventsChanged.SelectMany(t => t).Sum()} events where:{Environment.NewLine}{string.Join(Environment.NewLine, eventsChanged.Select((t, i) => $"{i} type had {t[0]} highs changed and {t[1]} lows changed."))}");
                    }
                }
                else if (firstTuple.Item1.Invariant("mergeFiles"))
                {
                    var jObjects = new List <JObject>();
                    foreach (var file in firstTuple.Item3.Find(t => t.Key.Invariant("files")).Value.Split(','))
                    {
                        jObjects.Add(JObject.Parse(File.ReadAllText(Path.Combine(beatmap.SongInfo.FullFolderPath, file))));
                    }
                    foreach (var fileJObject in jObjects)
                    {
                        var eventObjects = fileJObject["_events"].ToEvent();
                        var eventOverlap = eventObjects.Where(e => events.Any(es => e.Time.Within(es.Time, timeConst))).ToArray();
                        if (eventOverlap.Length > 0)
                        {
                            foreach (var overlappedEvent in eventOverlap)
                            {
                                Global.Instance.Logger.Log(LogLevel.Warn, $"Found event overlap with constraint of {timeConst} event data:{overlappedEvent}");
                            }
                        }
                        eventObjects.CheckZoomCountEven();
                        events.AddRange(eventObjects);
                    }
                }

                var jObject          = JObject.Parse(File.ReadAllText(beatmap.FullPath));
                var oldObstaclesPath = getOldPath(beatmap, "Obstacles");
                var oldEventsPath    = getOldPath(beatmap, "Events");

                if (walls.Any())
                {
                    Global.Instance.Logger.Info("Writing wall objects and storing old objects");
                    using (var s = File.OpenWrite(Path.Combine(oldObstaclesPath, $"{DateTime.Now:yy-MM-dd hh.mm.ss}.obstacles.json")))
                        using (var sw = new StreamWriter(s))
                            using (var writer = new JsonTextWriter(sw))
                            {
                                var serializer = new JsonSerializer {
                                    Formatting = Formatting.None
                                };
                                serializer.Serialize(writer, jObject["_obstacles"]);
                            }
                    jObject["_obstacles"] = walls.ToJArray();
                }

                if (events.Any())
                {
                    Global.Instance.Logger.Info("Writing event objects and storing old objects");
                    using (var s = File.OpenWrite(Path.Combine(oldEventsPath, $"{DateTime.Now:yy-MM-dd hh.mm.ss}.events.json")))
                        using (var sw = new StreamWriter(s))
                            using (var writer = new JsonTextWriter(sw))
                            {
                                var serializer = new JsonSerializer {
                                    Formatting = Formatting.None
                                };
                                serializer.Serialize(writer, jObject["_events"]);
                            }
                    jObject["_events"] = events.ToJArray();
                }
                beatmap.EventCount    = jObject["_events"].Children().Count();
                beatmap.ObstacleCount = jObject["_obstacles"].Children().Count();
                beatmap.NoteCount     = jObject["_notes"].Children().Count();

                Global.Instance.Logger.Info("Writing finalized file");
                using (var s = File.OpenWrite(beatmap.FullPath))
                    using (var sw = new StreamWriter(s))
                        using (var writer = new JsonTextWriter(sw))
                        {
                            var serializer = new JsonSerializer {
                                Formatting = Formatting.None
                            };
                            serializer.Serialize(writer, jObject);
                        }
            }
            catch (Exception e)
            {
                Global.Instance.Logger.Error(e, e.Message);
            }
            Global.Instance.Logger.Info($"Compleated Run {++beatmap.GenCount} of  {beatmap.SongInfo.SongName}, {beatmap.Difficulty}{beatmap.BeatmapSet.CharacteristicString}");
        }
Exemple #22
0
    void Awake()
    {
        bluePos   = new List <Vector2Int>();
        orangePos = new List <Vector2Int>();
        size      = new Vector2Int();
        List <string> rows = new List <string>();
        StreamReader  sr   = new StreamReader(Application.dataPath + "/" + mapFile);
        string        line = sr.ReadLine();

        while (line != null)
        {
            rows.Add(line);
            if (line.Length > size.x)
            {
                size.x = line.Length;
            }
            line = sr.ReadLine();
        }

        rows.Reverse();

        size.y = rows.Count;

        offset = new Vector2Int(-size.x / 2, -size.y / 2);

        grid    = new byte[size.y][];
        pellets = new GameObject[size.y][];
        waller  = GetComponent <WallGenerator>();
        waller.SetUp(size);

        for (int i = 0; i < size.y; ++i)
        {
            grid[i]    = new byte[size.x];
            pellets[i] = new GameObject[size.x];
            for (int j = 0; j < rows[i].Length; ++j)
            {
                byte val = translateChar(rows[i][j]);
                grid[i][j] = val;

                Vector3    ip  = new Vector3(j + offset.x, i + offset.y, 0);
                GameObject obj = (GameObject)Instantiate(lookup[val], ip, Quaternion.identity, transform);

                switch (val)
                {
                case 1:
                    pellets[i][j] = obj;
                    break;

                case 2:
                    pellets[i][j] = obj;
                    break;

                case 3:
                    bluePos.Add(new Vector2Int(j, i));
                    break;

                case 4:
                    orangePos.Add(new Vector2Int(j, i));
                    break;

                case 5:
                    waller.AddWall(i, j, obj.GetComponent <Wall>());
                    break;
                }
            }
            for (int j = rows[i].Length; j < size.x; ++j)
            {
                grid[i][j] = 0;
            }
        }
        waller.Build();
    }
Exemple #23
0
 private void Awake()
 {
     wall = GetComponentInParent <WallGenerator>();
 }
        private static void setGenerators(List <Tuple <string, string, List <KeyValuePair <string, string> > > > tuples, List <WallGenerator> generatorList, WallGenerator defaultGenerator)
        {
            var structures    = new Dictionary <string, WallGenerator>();
            var rotationModes = new Dictionary <string, IRotationMode>();
            var colorModes    = new Dictionary <string, ColorManager>();

            foreach (var(identifier, type, list) in tuples)
            {
                if (type == "")
                {
                    var seed = Convert.ToInt32(list.First(t => t.Key.Invariant("seed")).Value);
                    defaultGenerator.Random = new Random(seed);
                    foreach (var(key, value) in list)
                    {
                        if (!key.Invariant("seed"))
                        {
                            setFieldValue(defaultGenerator, key, value, null, null, null, null);
                        }
                    }
                }
                else if (identifier.Invariant("rotationMode"))
                {
                    var     local         = false;
                    var     multi         = false;
                    var     localRotList  = new List <Tuple <Vector3D, double> >();
                    var     rotList       = new List <Tuple <Vector3D, double> >();
                    dynamic rotationStore = new NoRotation();
                    foreach (var(key, value) in list)
                    {
                        if (key.Invariant("localrotation"))
                        {
                            local = true;

                            if (value == "")
                            {
                                multi = true;
                                continue;
                            }
                        }
                        else if (key.Invariant("rotation"))
                        {
                            local = false;

                            if (value == "")
                            {
                                multi = true;
                                continue;
                            }
                        }

                        if (key.Invariant("type"))
                        {
                            rotationStore = value.ToLowerInvariant() switch
                            {
                                "static" => new StaticRotation(),
                                "ease" => new EaseRotation(),
                                "random" => new RandomRotation(),
                                "switch" => new SwitchRotation(),
                                _ => throw new ArgumentOutOfRangeException("Rotation type can only be of types: Static, Ease, Random, Switch")
                            }
                        }
                        ;
                        else if (key.Invariant("ease"))
                        {
                            rotationStore.Easing = value.GetEasing();
                        }
                        else
                        {
                            if (multi)
                            {
                                switch (rotationStore)
                                {
                                case EaseRotation _:
                                    var vector = value.Substring(0, value.LastIndexOf(','));
                                    var time   = Convert.ToDouble(value.Substring(value.LastIndexOf(',') + 1));
                                    if (local)
                                    {
                                        localRotList.Add(new Tuple <Vector3D, double>(Vector3D.Parse(vector), time));
                                    }
                                    else
                                    {
                                        rotList.Add(new Tuple <Vector3D, double>(Vector3D.Parse(vector), time));
                                    }
                                    break;

                                case RandomRotation _:
                                    if (local)
                                    {
                                        localRotList.Add(new Tuple <Vector3D, double>(Vector3D.Parse(value), 0));
                                    }
                                    else
                                    {
                                        rotList.Add(new Tuple <Vector3D, double>(Vector3D.Parse(value), 0));
                                    }
                                    break;

                                case SwitchRotation _:
                                    if (local)
                                    {
                                        localRotList.Add(new Tuple <Vector3D, double>(Vector3D.Parse(value), 0));
                                    }
                                    else
                                    {
                                        rotList.Add(new Tuple <Vector3D, double>(Vector3D.Parse(value), 0));
                                    }
                                    break;
                                }
                            }
                            else
                            {
                                if (local)
                                {
                                    rotationStore.LocalRotation = Vector3D.Parse(value);
                                }
                                else
                                {
                                    rotationStore.Rotation = Vector3D.Parse(value);
                                }
                            }
                        }
                    }
                    switch (rotationStore)
                    {
                    case EaseRotation easeStore:
                        easeStore.LocalRotations = localRotList.ToArray();
                        easeStore.Rotations      = rotList.ToArray();
                        break;

                    case RandomRotation randomStore:
                        randomStore.LocalRotation = new Tuple <Vector3D, Vector3D>(localRotList[0].Item1, localRotList[1].Item1);
                        randomStore.Rotation      = new Tuple <Vector3D, Vector3D>(rotList[0].Item1, rotList[1].Item1);
                        break;

                    case SwitchRotation switchStore:
                        switchStore.LocalRotations = localRotList.Select(t => t.Item1).ToArray();
                        switchStore.Rotations      = rotList.Select(t => t.Item1).ToArray();
                        break;
                    }
                    try
                    {
                        rotationModes.Add(type, rotationStore);
                    }
                    catch (Exception e)
                    {
                        Global.Instance.Logger.Error($"Could not add rotationMode name: {type}, as it already exists");
                        throw e;
                    }
                }
        public void TestWallGenerator()
        {
            var w = new WallGenerator(Seed);
              Assert.AreEqual(5, w.GetDice(0).ToList()[0], "dice 0");
              Assert.AreEqual(5, w.GetDice(0).ToList()[1], "dice 1");
              Assert.AreEqual(11, w.GetWall(0).ToList()[5].Id, "dora 0");
              Assert.IsTrue(_tileIdsGame0.SequenceEqual(w.GetWall(0).Select(t => t.Id).Reverse().Take(13 * 4)), "wall");

              Assert.AreEqual(1, w.GetDice(1).ToList()[0], "dice 0");
              Assert.AreEqual(3, w.GetDice(1).ToList()[1], "dice 1");
              Assert.AreEqual(109, w.GetWall(1).ToList()[5].Id, "dora 0");
              Assert.IsTrue(_tileIdsGame1.SequenceEqual(w.GetWall(1).Select(t => t.Id).Reverse().Take(13 * 4)), "wall");
        }