/// <summary> /// Write to FILE_PATH the data of borders /// </summary> public static void WriteBordersToFile() { // Add currently visible borders foreach (GameObject obj in bordersShown) { BorderStorage bs = obj.GetComponent <BorderStorage>(); bordersNotShown.Add(bs.bsl); } string[] lines = new string[bordersNotShown.Count * 2 + 1]; lines[0] = bordersNotShown.Count.ToString(); // Order of data // Line 1: Count of borders // Others 1: CountOfBorderPoints borderPoint1x borderPoint 1y borderPoint 2x ... winType // Others 2: winLineStartX winLineStartY winLineEndX winLineEndY // Other 1 and two repeats countOfBorders times string s = ""; for (int k = 0; k < bordersNotShown.Count; k++) { s = bordersNotShown[k].Points.GetLength(0) + " "; for (int i = 0; i < bordersNotShown[k].Points.GetLength(0); i++) { s += bordersNotShown[k].Points[i, 0] + " "; s += bordersNotShown[k].Points[i, 1] + (i == bordersNotShown[k].Points.Length - 1 ? "" : " "); } lines[1 + k * 2] = s + bordersNotShown[k].WinType.ToString();; lines[2 + k * 2] = bordersNotShown[k].WinLinePoints[0, 0] + " " + bordersNotShown[k].WinLinePoints[0, 1] + " " + bordersNotShown[k].WinLinePoints[1, 0] + " " + bordersNotShown[k].WinLinePoints[1, 1]; } try { System.IO.File.WriteAllLines(FILE_PATH, lines); } catch (Exception e) { Debug.LogError(e.StackTrace); } // Remove the ones we added for (int i = 0; i < bordersShown.Count; i++) { bordersNotShown.RemoveAt(bordersNotShown.Count - 1); } }
/// <summary> /// Move border from notshown to shown /// </summary> /// <param name="index"></param> /// <param name="drawOut">Whether to play the drawin animation</param> protected static void MoveToShown(int index, bool drawOut = true) { // Remove index from the notshown list BorderStorageLogic bsl = bordersNotShown[index]; bordersNotShown.RemoveAt(index); // Use pooling GameObject borderObject; if (notUsedBorders.Count > 0) { borderObject = notUsedBorders.Pop(); } else { borderObject = Instantiate(borderPrefab); } // Set the gameobject active borderObject.SetActive(true); // Set parent borderObject.transform.parent = bordersParent.transform; // Set pos to middlepos borderObject.transform.position = new Vector3(bsl.MiddlePos[0], bsl.MiddlePos[1], borderObject.transform.position.z); // Store Data in Gameobject so later we can read it BorderStorage bs = borderObject.GetComponent <BorderStorage>(); bs.SetData(bsl); LineRenderer lr = borderObject.GetComponent <LineRenderer>(); // Whether we want to draw out the border or not if (drawOut) { // Draw line animation AnimatedLineRenderer lineRenderer = borderObject.GetComponent <AnimatedLineRenderer>(); for (int i = 0; i < bsl.Points.GetLength(0); i++) { lineRenderer.Enqueue(bsl.GetPosAt(i)); } } else { lr.positionCount = bsl.Points.GetLength(0); for (int i = 0; i < bsl.Points.GetLength(0); i++) { lr.SetPosition(i, bsl.GetPosAt(i)); } } lr.material.SetColor("_EmissionColor", SignResourceStorage.Instance.GetColorRelatedTo(bsl.WinType)); // Set color lr.startColor = SignResourceStorage.Instance.GetColorRelatedTo(bsl.WinType); lr.endColor = SignResourceStorage.Instance.GetColorRelatedTo(bsl.WinType); // Win Line Animation AnimatedLineRenderer winLineRenderer = borderObject.transform.GetChild(0).gameObject.GetComponent <AnimatedLineRenderer>(); winLineRenderer.Enqueue(new Vector3(bsl.WinLinePoints[0, 0], bsl.WinLinePoints[0, 1])); winLineRenderer.Enqueue(new Vector3(bsl.WinLinePoints[1, 0], bsl.WinLinePoints[1, 1])); // Move to list bordersShown.Add(borderObject); }