Example #1
0
    public void CreateMapFromFile(string fileName)
    {
        FileStream      file = File.Open(Path.Combine(Application.persistentDataPath, fileName), FileMode.Open);
        BinaryFormatter bf   = new BinaryFormatter();

        NodesModel nm = (NodesModel)bf.Deserialize(file);

        file.Close();

        mapGen.GenerateMaze(nm);
    }
        public void Setup()
        {
            m_Lines = CreateLines();

            m_Logger = Substitute.For <ILogger>();
            m_Bus = Substitute.For <IBus>();
            m_Manager = Substitute.For <ILinesSourceManager>();

            m_Model = new NodesModel(m_Logger,
                                     m_Bus,
                                     m_Manager);
        }
Example #3
0
    private void UnpackNodesModel(NodesModel nodesModel)
    {
        for (int i = 0; i < nodesModel.height; i++)
        {
            for (int j = 0; j < nodesModel.width; j++)
            {
                for (int k = 0; k < 4; k++)
                {
                    nodes[i, j].GetComponent <Node>().walls[k] = nodesModel.walls[i, j, k];
                }
            }
        }

        startNode  = nodes[nodesModel.startPosI, nodesModel.startPosJ];
        finishNode = nodes[nodesModel.finishPosI, nodesModel.finishPosJ];
    }
Example #4
0
    public void SaveMapToFile()
    {
        if (ValidateMap())
        {
            BinaryFormatter bf       = new BinaryFormatter();
            string          fileName = DateTime.Now.ToString("dd-MM-yyyy HH.mm.ss") + ".dat";
            using (FileStream file = File.Create(Path.Combine(Application.persistentDataPath, fileName)))
            {
                NodesModel nm = new NodesModel(mapGen.nodes, MapGenerator.startNode, MapGenerator.finishNode);

                bf.Serialize(file, nm);
            }

            StartCoroutine(ShowMessage("Лабиринт успешно сохранен!", new Color(0.098f, 0.756f, 0.181f, 0.9725f)));
        }
        else
        {
            StartCoroutine(ShowMessage("Лабиринт не имеет решения!", new Color(0.755f, 0.105f, 0.098f, 0.972f)));
        }
    }
Example #5
0
    public void GenerateMaze(NodesModel nodesModel)
    {
        ResetMap();

        GenerateOuterWalls(nodesModel.width, nodesModel.height);

        UnpackNodesModel(nodesModel);

        player.transform.position = startNode.transform.position;
        finish.transform.position = finishNode.transform.position;
        player.GetComponent <PlayerMovement>().currI = startNode.GetComponent <Node>().i;
        player.GetComponent <PlayerMovement>().currJ = startNode.GetComponent <Node>().j;

        for (int i = 0; i < nodesModel.height; i++)                // Spawn Vertical Walls
        {
            for (int j = 0; j < nodesModel.width - 1; j++)
            {
                if (nodesModel.walls[i, j, 1])
                {
                    WallStruct newWall = new WallStruct
                    {
                        firstAdjacentNode  = nodes[i, j],
                        secondAdjacentNode = nodes[i, j + 1],
                        gameObject         = BuildWall(i, j, Side.Right),
                        horizontal         = false
                    };

                    walls.Add(newWall);
                }
            }
        }

        for (int i = 0; i < nodesModel.height - 1; i++)                // Spawn Horizontal Walls
        {
            for (int j = 0; j < nodesModel.width; j++)
            {
                if (nodesModel.walls[i, j, 3])
                {
                    WallStruct newWall = new WallStruct
                    {
                        firstAdjacentNode  = nodes[i, j],
                        secondAdjacentNode = nodes[i + 1, j],
                        gameObject         = BuildWall(i, j, Side.Down),
                        horizontal         = true
                    };

                    walls.Add(newWall);
                }
            }
        }

        List <GameObject> list = new List <GameObject>();           // Assign every node to one set

        for (int i = 0; i < nodes.GetLength(0); i++)
        {
            for (int j = 0; j < nodes.GetLength(1); j++)
            {
                list.Add(nodes[i, j]);
            }
        }
        sets.Add(0, list);
        UpdateNodesSetNumbers(sets);

        if (Utilities.ShowConstruction)
        {
            StartCoroutine(Step());
        }
        else
        {
            foreach (var wall in walls)
            {
                if (wall.firstAdjacentNode.GetComponent <Node>().setNumber != wall.secondAdjacentNode.GetComponent <Node>().setNumber)
                {
                    sets[wall.firstAdjacentNode.GetComponent <Node>().setNumber].AddRange(sets[wall.secondAdjacentNode.GetComponent <Node>().setNumber]);
                    sets.Remove(wall.secondAdjacentNode.GetComponent <Node>().setNumber);
                    UpdateNodesSetNumbers(sets);
                    DeconstructWall(wall);
                }
            }
            mapIsGenerated = true;
        }

        PushNeighbors();
    }