Exemplo n.º 1
0
    //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();
    }
Exemplo n.º 2
0
    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);
        }
    }