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); }
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]; }
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))); } }
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(); }