public void SaveMap() { if (nodes == null) { return; } MapSaveInfo saveInfo = new MapSaveInfo(); List <NodeData> saveNodes = new List <NodeData>(); for (int x = 0; x < sizeX; x++) { for (int y = 0; y < sizeY; y++) { if (nodes[x, y] != null) { NodeData nodeData = new NodeData(); nodeData.SetData(nodes[x, y]); saveNodes.Add(nodeData); } } } saveInfo.sizeX = sizeX; saveInfo.sizeY = sizeY; saveInfo.nodes = saveNodes.ToArray(); saveInfo.players = GeneratePlayerData(players, out saveInfo.currentTurn); jsonSave = JsonUtility.ToJson(saveInfo); File.WriteAllText(savePath, jsonSave); }
public void LoadMap(string path) { savePath = path; saveInfo = JsonUtility.FromJson <MapSaveInfo>(System.IO.File.ReadAllText(path)); sizeX = saveInfo.sizeX; sizeY = saveInfo.sizeY; nodes = new Node[sizeX, sizeY]; players = GeneratePlayers(saveInfo.players); GenerateNodes(saveInfo); LayoutNodeSaveInfo(saveInfo); }
public void GenerateNodes(MapSaveInfo info) { for (int y = 0; y < sizeY; y++) { for (int x = 0; x < sizeX; x++) { Vector3 pos = LayoutNodes(x, y); if (pos.x == -1) { continue; } GameObject nodeObj = Instantiate(nodeTemplate, nodeParent.transform); nodeObj.name = "node-" + x + "_" + y; Node node = nodeObj.GetComponent <Node>(); if (pos.z == 111) { node.SetAsSmall(); } nodes[x, y] = node; node.X = x; node.Y = y; node.roads = new Vector4(0, 0, 0, 0); OnGenerateMap += node.SetRoads; float factor = 0.2f; Vector3 neuPos; if (info == null) { neuPos = new Vector3(Random.Range(x - factor, x + factor), Random.Range(y - factor, y + factor), transform.localPosition.z); node.pos = new Vector2(neuPos.x, neuPos.y); } else { int index = Utility.CoordsToArrayPos(x, y, info.sizeY); neuPos = new Vector3(info.nodes[index].pos.x, info.nodes[index].pos.y, 0); node.pos = info.nodes[index].pos; } node.SetColor(uncoccupiedColor); node.transform.localPosition = neuPos; } } OnGenerateMap?.Invoke(); }
public void LayoutNodeSaveInfo(MapSaveInfo saveInfo) { /*/ WARNING \ if this gets called before GeneratePlayers(), Node.SetPlayersInitial breaks.*/ for (int x = 0; x < saveInfo.sizeX; x++) { for (int y = 0; y < saveInfo.sizeY; y++) { //Because the original layout was sideways for(y){for(x){ Generation() }} nodes[x, y].SetData(saveInfo.nodes[x * sizeY + y]); } } StartCoroutine(OnNodesAddedDelay()); }