//Saving scenario to file for future loading. public void SaveFile(string path) { var markers = OnlineMapsControlBase3D.instance.markers3D; var cameraPosition = OnlineMaps.instance.position; var cameraZoom = OnlineMaps.instance.zoom; var cameraOrientation = OnlineMapsControlBase3D.instance.cameraRotation; var overallDefaultZoom = ScaleFix.GetOverallDefaultZoom(); StreamWriter fw = new StreamWriter(path); string[] separators = { ",", ".", "!", "?", ";", ":", " ", "(", ")" }; fw.WriteLine("TimeStep: " + timeStep); fw.WriteLine("CameraPosition: " + cameraPosition.x + " " + cameraPosition.y); fw.WriteLine("CameraOrientation: " + cameraOrientation.x + " " + cameraOrientation.y); fw.WriteLine("CameraZoom: " + cameraZoom); fw.WriteLine("OverallDefaultZoom: " + overallDefaultZoom); fw.WriteLine("Markers: " + markers.Length); foreach (var marker in markers) { string type = "null"; int index = assetPrefab.IndexOf(marker.prefab); var position = marker.position; if (index != -1) { type = "Asset"; var label = ""; if (marker.label != "") { label = marker.label; } else { label = assetNames[index]; } fw.WriteLine(type + " " + position.x + " " + position.y + " " + marker.scale + " " + index + " " + label); } else { index = casePrefab.IndexOf(marker.prefab); type = "Case"; Quaternion cone_rotation = new Quaternion(); var cone_name = ""; int cone_zoom = 1; float cone_scale = 20; foreach (Transform child in marker.transform) { if (!child.name.Contains("Cylinder") && !child.name.Contains("yatch") && !child.name.Contains("scp_sb") && !child.name.Contains("Hamburger")) { cone_name = child.name.Split(separators, StringSplitOptions.RemoveEmptyEntries)[0]; cone_rotation = child.rotation; print(cone_name); cone_zoom = child.GetComponent <ConeScale>().defaultZoom; cone_scale = child.GetComponent <ConeScale>().defaultScale; } } var label = ""; if (marker.label != "") { label = marker.label; } else { label = caseNames[index]; } fw.WriteLine(type + " " + position.x + " " + position.y + " " + cone_name + " " + cone_rotation.x + " " + cone_rotation.y + " " + cone_rotation.z + " " + cone_rotation.w + " " + cone_zoom + " " + cone_scale + " " + caseScales[index] + " " + index + " " + label); } } fw.Flush(); fw.Close(); }
public void OpenStream(string instream) { try { StreamReader reader = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(instream))); var markers = OnlineMapsControlBase3D.instance.markers3D; var cameraZoom = OnlineMaps.instance.zoom; while (!reader.EndOfStream) { string line = reader.ReadLine(); string[] tokens = line.Split(); switch (tokens[0]) { case "TimeStep:": timeStep = int.Parse(tokens[1]); break; case "CameraPosition:": OnlineMaps.instance.position = new Vector2(float.Parse(tokens[1]), float.Parse(tokens[2])); break; case "CameraOrientation:": OnlineMapsControlBase3D.instance.cameraRotation = new Vector2(float.Parse(tokens[1]), float.Parse(tokens[2])); break; case "CameraZoom:": //OnlineMaps.instance.zoom = int.Parse(tokens[1]); break; case "OverallDefaultZoom:": ScaleFix.SetOverallDefaultZoom(int.Parse(tokens[1])); break; case "Markers:": OnlineMapsControlBase3D.instance.RemoveAllMarker3D(); int count = int.Parse(tokens[1]); for (int ii = 0; ii < count; ii++) { line = reader.ReadLine(); tokens = line.Split(); if (tokens[0] == "Asset") { var position = new Vector2(float.Parse(tokens[1]), float.Parse(tokens[2])); var newMarker = OnlineMapsControlBase3D.instance.AddMarker3D(position, assetPrefab[int.Parse(tokens[4])]); newMarker.scale = float.Parse(tokens[3]); if (int.Parse(tokens[4]) == 0) { num_yacht++; } newMarker.label = ""; //Some hacking here for labels on certain questions if ((StudyFlowControl.TrueQuestionID == 17 || StudyFlowControl.TrueQuestionID == 18) && int.Parse(tokens[4]) == 0) { newMarker.label = tokens[5]; } if (Camera.main.GetComponent <StudyFlowControl>() != null && StudyFlowControl.TrueQuestionID <= 10 && StudyFlowControl.TrueQuestionID > 0 && int.Parse(tokens[4]) < 4) { newMarker.label = tokens[5]; } } else if (tokens[0] == "Case") { var position = new Vector2(float.Parse(tokens[1]), float.Parse(tokens[2])); var cone_name = tokens[3]; var cone_rotation = new Quaternion(float.Parse(tokens[4]), float.Parse(tokens[5]), float.Parse(tokens[6]), float.Parse(tokens[7])); var cone_zoom = int.Parse(tokens[8]); var cone_scale = float.Parse(tokens[9]); var newMarker = OnlineMapsControlBase3D.instance.AddMarker3D(position, casePrefab[int.Parse(tokens[11])]); newMarker.scale = float.Parse(tokens[10]); //Depending on what type of case it is, we want to add a label to the object. var index = int.Parse(tokens[11]); if (index < 3) { newMarker.label = tokens[12]; switch (index) { case 0: num_food++; break; case 1: num_alcohol++; break; case 2: num_misc++; break; default: break; } } rotations.Add(cone_rotation); types.Add(cone_name); zooms.Add(cone_zoom); scales.Add(cone_scale); /*foreach (Transform child in newMarker.transform) * { * print(child.name); * if (!child.name.Contains("Cylinder")) * { * child.rotation = cone_rotation; * newMarker.transform.gameObject.GetComponent<ConeHelper>().ChangePrefabToType(cone_name); * break; * } * }*/ } } break; default: break; } } doFinalizeLoad = true; reader.Close(); } catch (Exception e) { print(e.Message); } }