private ButtonState checkClick(OVRInput.Button button, OVRInput.Controller controller, string key, string eventName)
 {
     if (OVRInput.Get(button, controller))
     {
         if (clickTime[key] > 0)
         {
             return(ButtonState.Pressed); // Pressed
         }
         clickTime[key]     = Time.timeSinceLevelLoad;
         clickPosition[key] = userCamera.transform.position;
         return(ButtonState.Down); // Down
     }
     else if (clickTime[key] > 0)
     {
         Infos info = new Infos(1);
         info.Add("Duration", Time.timeSinceLevelLoad - clickTime[key]);
         VadRAnalyticsManager.RegisterEvent(eventName, clickPosition[key], filterDictionary[key], info, clickTime[key]);
         VadRLogger.debug("Event Registered: " + eventName);
         clickTime[key] = 0.0f;
         return(ButtonState.Up); // Up
     }
     else
     {
         clickTime[key] = 0.0f;
         return(ButtonState.None);
     }
 }
    public static bool ExportWholeSelectionToSingle(string sceneId, string directoryName, bool includeTextures)
    {
        if (!CreateTargetFolder(directoryName))
        {
            VadRLogger.error("Vadr Scene Exporter failed to create target folder: " + directoryName);
            return(false);
        }
        string[] fileParts = directoryName.Split('/');
        string   fileName  = fileParts[fileParts.Length - 1];

        using (StreamWriter sw = new StreamWriter(directoryName + "/" + fileName + ".obj"))
        {
            sw.Write("mtllib ./" + fileName + ".mtl\n");
        }
        Clear();
        bool meshFlag        = ExportMeshes(directoryName, fileName, includeTextures);
        bool skinnedMeshFlag = ExportSkinnedMeshes(directoryName, fileName, includeTextures);
        bool terrainFlag     = ExportTerrains(directoryName, fileName, includeTextures);
        bool flag            = meshFlag | skinnedMeshFlag | terrainFlag;

        if (!flag)
        {
            VadRLogger.warning("No objects found in the scene : " + sceneId + ". Nothing to export");
        }
        else
        {
            CompressModel(directoryName + "/" + fileName + ".obj", directoryName + "/" + fileName + ".drc");
        }
        return(flag);
    }
 public void setup()
 {
     userCamera   = DataCollectionManager.Instance.userCamera;
     lastTime     = Time.time;
     lastPosition = userCamera.transform.position;
     VadRLogger.info("PositionCollector initialized");
 }
示例#4
0
    private void updateStatusError(Exception e, string[] args)
    {
        if (!this.errorFlag)
        {
            this.errorFlag = true;
            string msg = "Error Uploading model for scene " + this.sceneName +
                         ". Please try after sometime";
            switch (e.GetType().ToString())
            {
            case "System.Net.WebException":
                if (((WebException)e).Response != null)
                {
                    using (var stream = ((WebException)e).Response.GetResponseStream())
                    {
                        using (var reader = new StreamReader(stream))
                        {
                            string error       = reader.ReadToEnd();
                            var    parsedError = JSON.Parse(error);
                            if (parsedError == null || parsedError["message"] == null)
                            {
                                VadRLogger.error(msg);
                                if (this.error != null)
                                {
                                    this.error(this.sceneName, msg);
                                }
                            }
                            else
                            {
                                VadRLogger.error("Error in uploading model for scene "
                                                 + this.sceneName + " Error: " + parsedError["message"]);
                                if (this.error != null)
                                {
                                    this.error(this.sceneName, "Error in uploading model for scene "
                                               + this.sceneName + " Error: " + parsedError["message"]);
                                }
                            }
                        }
                    }
                }
                else
                {
                    VadRLogger.error(msg);
                    if (this.error != null)
                    {
                        this.error(this.sceneName, msg);
                    }
                }
                break;

            default:
                VadRLogger.error(msg);
                if (this.error != null)
                {
                    this.error(this.sceneName, msg);
                }
                break;
            }
        }
    }
 public void setup()
 {
     userCamera  = DataCollectionManager.Instance.userCamera;
     totalFrames = 0;
     fpsSum      = 0;
     VadRLogger.info("PerformanceCollector initialized");
     calculateCpuUsage();
     calculateRamUsage();
 }
    void calculateCpuUsage()
    {
#if UNITY_ANDROID
        cpuFlag = true;
        if (Application.platform == RuntimePlatform.Android)
        {
            Thread oThread = new Thread(() =>
            {
                while (cpuFlag)
                {
                    float currentTotalCpu = 0.0f, currentProcessCpu = 0.0f;
                    try
                    {
                        System.Diagnostics.Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
                        string[] linesCpu        = File.ReadAllLines("/proc/stat");
                        string[] linesCpuProcess = File.ReadAllLines("/proc/" + currentProcess.Id + "/stat");
                        if (linesCpu.Length > 0)
                        {
                            string[] cpuParts = linesCpu[0].Split(' ');
                            if (cpuParts.Length > 8)
                            {
                                for (int i = 2; i < 9; i++)
                                {
                                    currentTotalCpu += float.Parse(cpuParts[i]);
                                }
                            }
                        }
                        if (linesCpuProcess.Length > 0)
                        {
                            string[] cpuParts = linesCpuProcess[0].Split(' ');
                            if (cpuParts.Length >= 15)
                            {
                                currentProcessCpu = float.Parse(cpuParts[13]) + float.Parse(cpuParts[14]); //13 is for user time and 14 is for kernal time
                            }
                        }

                        if (previousTotalCpu > 0 && previousProcessCpu > 0)
                        {
                            cpuUsage = 100 * ((currentProcessCpu - previousProcessCpu) / (currentTotalCpu - previousTotalCpu));
                        }
                        previousTotalCpu   = currentTotalCpu;
                        previousProcessCpu = currentProcessCpu;
                        Thread.Sleep((int)(timeInterval * 1000));
                    }
                    catch (Exception e)
                    {
                        VadRLogger.warning("Error in collecting cpu data: " + e.Message);
                    }
                }
                VadRLogger.debug("Cpu Calculation stopped");
            });
            oThread.Start();
        }
#endif
    }
示例#7
0
 void uploadFileErrorCallback(string filepath, string msg)
 {
     if (!this.errorFlag)
     {
         string message = "Error in uploading model for scene: " + this.sceneName + ". Error: " + msg;
         VadRLogger.error(message);
         this.errorFlag = true;
         if (this.error != null)
         {
             this.error(this.sceneName, message);
         }
     }
 }
示例#8
0
 /// <summary>
 /// Add GameObject to the list of track objectss
 /// </summary>
 /// <param name="trackObject">Object to track</param>
 public void AddTrackObject(GameObject trackObject)
 {
     VadRLogger.debug("Adding tracked object: " + trackObject.name);
     for (int i = 0; i < trackObjects.Count; i++)
     {
         if (trackObjects[i] == trackObject)
         {
             return;
         }
     }
     VadRLogger.debug("Added tracked object: " + trackObject.name);
     trackObjects.Add(trackObject);
     trackObjectsMetadata.Add(new ObjectTrackMetadata(trackObject, 0, calculateSize(trackObject)));
 }
    void calculateRamUsage()
    {
#if UNITY_ANDROID
        memFlag = true;
        if (Application.platform == RuntimePlatform.Android)
        {
            Thread oThread = new Thread(() =>
            {
                while (memFlag)
                {
                    try
                    {
                        System.Diagnostics.Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
                        string[] linesCpuProcess = File.ReadAllLines("/proc/" + currentProcess.Id + "/status");
                        for (int i = 0; i < linesCpuProcess.Length; i++)
                        {
                            string line    = linesCpuProcess[i];
                            string[] parts = line.Split(':');
                            if (parts.Length > 1)
                            {
                                if (parts[0].Trim().ToLower() == "vmrss")
                                {
                                    residentStorage = float.Parse(parts[1].Trim().Split(' ')[0]) / 1000.0f;
                                }
                                else if (parts[0].Trim().ToLower() == "vmswap")
                                {
                                    swapStorage = float.Parse(parts[1].Trim().Split(' ')[0]) / 1000.0f;
                                }
                            }
                        }
                        Thread.Sleep((int)(timeInterval * 1000));
                    }
                    catch (Exception e)
                    {
                        VadRLogger.warning("Error in collecting Memory Data: " + e.Message);
                    }
                }
                VadRLogger.debug("Memory data collection stopped");
            });
            oThread.Start();
        }
#endif
    }
示例#10
0
    // Checking one object in a frame for better performance.
    IEnumerator CheckObjectTracking()
    {
        rayCastHit = new RaycastHit();
        objectHit  = Physics.Raycast(userCamera.transform.position, cameraForward,
                                     out rayCastHit, Mathf.Infinity);
        planes = GeometryUtility.CalculateFrustumPlanes(userCamera);
        for (int i = 0; i < trackObjectsMetadata.Count; i++)
        {
            if (trackObjectsMetadata[i].gameObject != null)
            {
                if (isInView(trackObjectsMetadata[i], planes) ||
                    (objectHit && isParent(rayCastHit.transform, trackObjectsMetadata[i].gameObject.transform)))
                {
                    if (isInSight(trackObjectsMetadata[i].gameObject))
                    {
                        // Assuming object is visible for more than one second for observable
                        if (Time.time - trackObjectsMetadata[i].timeVisible > 1.0f)
                        {
                            cameraForward = userCamera.transform.forward;
                            // Ray Cast in camera froward direction to see if it hit the object.
                            // If hit the object angle = 0.
                            objectAngle = 0;
                            if (objectHit && isParent(rayCastHit.transform, trackObjectsMetadata[i].gameObject.transform))
                            {
                                objectAngle = 0;
                                infoGaze    = new Infos(1);
                                filterGaze  = new Filters(1);
                                filterGaze.Add("Object", trackObjectsMetadata[i].gameObject.name);
                                infoGaze.Add("Time", Time.time - trackObjectsMetadata[i].lastCheckTime);
                                VadRLogger.debug("Object Gazed: " + trackObjectsMetadata[i].gameObject.name + (Time.time - trackObjectsMetadata[i].lastCheckTime));
                                VadRAnalyticsManager.RegisterEvent("vadrObject Gaze", rayCastHit.transform.position,
                                                                   filterGaze, infoGaze);
                            }
                            else
                            {
                                objectAngle = angleBetweenVectors(cameraForward,
                                                                  trackObjectsMetadata[i].gameObject.transform.position - userCamera.transform.position);
                            }

                            objectDistance = Vector3.Distance(userCamera.transform.position,
                                                              trackObjectsMetadata[i].gameObject.transform.position);
                            focusIndex = calculateFocus(objectAngle, objectDistance, trackObjectsMetadata[i].size);
                            if (focusIndex > 0)
                            {
                                filter = new Filters(1);
                                filter.Add("Object", trackObjectsMetadata[i].gameObject.name);
                                info = new Infos(1);
                                info.Add("Focus", focusIndex);
                                VadRAnalyticsManager.RegisterEvent("vadrObject Focus", userCamera.transform.position,
                                                                   filter, info);
                            }
                        }
                    }
                    else
                    {
                        trackObjectsMetadata[i].timeVisible = Time.time; // Resetting time if not visible
                    }
                }
                else
                {
                    trackObjectsMetadata[i].timeVisible = Time.time; // Resetting time if not visible
                }
            }
            trackObjectsMetadata[i].lastCheckTime = Time.time;
            yield return(null);
        }
    }
    private static void MeshMaterialsToFile(Dictionary <string, ObjMaterial> materialList, string folder, string filename)
    {
        string sceneName = SceneManager.GetActiveScene().name;

        using (StreamWriter sw = new StreamWriter(folder + "/" + filename + ".mtl"))
        {
            int materialCount = materialList.Count;
            int i             = 0;

            foreach (KeyValuePair <string, ObjMaterial> kvp in materialList)
            {
                i++;
                EditorUtility.DisplayProgressBar("Exporting Textures for scene: " + sceneName, kvp.Key + " Material",
                                                 (i / (float)materialCount) / 2 + 0.5f);

                Material m = kvp.Value.material;
                Color    c = Color.white;
                if (m.HasProperty("_Color"))
                {
                    c = m.GetColor("_Color");
                }

                sw.Write("\n");
                sw.Write("newmtl {0}\n", kvp.Key);
                sw.Write("Ka  0.6 0.6 0.6\n");
                sw.Write("Kd  " + c.r + " " + c.g + " " + c.b + "\n");
                sw.Write("Ks  0.0 0.0 0.0\n");
                sw.Write("d  1.0\n");
                sw.Write("Ns  96.0\n");
                sw.Write("Ni  1.0\n");
                sw.Write("illum 1\n");

                //TODO some bug where unused textures are still exported?
                if (kvp.Value.textureName != null)
                {
                    string destinationFile = "";

                    int stripIndex = destinationFile.LastIndexOf('/');

                    if (stripIndex >= 0)
                    {
                        destinationFile = destinationFile.Substring(stripIndex + 1).Trim();
                    }

                    destinationFile = folder + "/" + destinationFile;

                    try
                    {
                        bool readable;
                        TextureImporterFormat format;
                        if (GetTextureImportFormat((Texture2D)m.mainTexture, out readable, out format))
                        {
                            Texture2D originalTexture = m.mainTexture as Texture2D;

                            SetTextureImporterFormat(originalTexture, true, TextureImporterFormat.RGBA32);
                            int       size = 4; //TODO have this adjustable in editorprefs
                            Texture2D outputMiniTexture = RescaleForExport(originalTexture, Mathf.NextPowerOfTwo(originalTexture.width) / size, Mathf.NextPowerOfTwo(originalTexture.height) / size);

                            byte[] bytes = outputMiniTexture.EncodeToPNG();
                            File.WriteAllBytes(destinationFile + m.mainTexture.name + ".png", bytes);

                            SetTextureImporterFormat(originalTexture, readable, format);
                        }
                        else
                        {
                            Texture2D tex = new Texture2D(2, 2);
                            tex.SetPixel(0, 0, Color.grey);
                            tex.SetPixel(1, 1, Color.grey);

                            byte[] bytes = tex.EncodeToPNG();
                            File.WriteAllBytes(destinationFile + m.mainTexture.name + ".png", bytes);
                            //this sometimes happens when exporting built-in unity textures, such as Default Checker
                            VadRLogger.warning("Vadr Scene Exporter could not find texture '" + m.mainTexture.name + "'. Creating placeholder texture");
                        }
                    }
                    catch
                    {
                    }
                    sw.Write("map_Kd {0}", m.mainTexture.name + ".png");
                }

                sw.Write("\n\n\n");
            }
        }
        EditorUtility.ClearProgressBar();
    }
    private static string SkinnedMeshToString(SkinnedMeshRenderer smr, Dictionary <string, ObjMaterial> materialList)
    {
        Mesh m = smr.sharedMesh;

        if (m == null)
        {
            return("");
        }
        if (!smr.enabled || !smr.gameObject.activeInHierarchy)
        {
            return("");
        }

        if (m.uv.Length == 0)
        {
            //TODO figure out why all the vertices explode when uvs not set
            VadRLogger.error("Skipping export of skinned mesh \"" + smr.name + "\". Exporting meshes must be unwrapped");
            return("");
        }

        Material[] mats = smr.sharedMaterials;

        StringBuilder sb = new StringBuilder();

        sb.Append("o ").Append(smr.name).Append("\n");
        foreach (Vector3 lv in m.vertices)
        {
            Vector3 wv = smr.transform.TransformPoint(lv);

            //This is sort of ugly - inverting x-component since we're in
            //a different coordinate system than "everyone" is "used to".
            sb.Append(string.Format("v {0} {1} {2}\n", -wv.x, wv.y, wv.z));
        }
        sb.Append("\n");

        foreach (Vector3 lv in m.normals)
        {
            Vector3 wv = smr.transform.TransformDirection(lv);

            sb.Append(string.Format("vn {0} {1} {2}\n", -wv.x, wv.y, wv.z));
        }
        sb.Append("\n");

        Vector2 textureScale = Vector3.one;

        if (mats.Length > 0 && mats[0] != null && mats[0].HasProperty("_MainTex"))
        {
            textureScale = mats[0].GetTextureScale("_MainTex");
        }

        foreach (Vector3 v in m.uv)
        {
            //scale uvs to deal with tiled textures
            sb.Append(string.Format("vt {0} {1}\n", v.x * textureScale.x, v.y * textureScale.y));
        }

        for (int material = 0; material < m.subMeshCount; material++)
        {
            sb.Append("\n");
            if (material >= mats.Length)
            {
                continue;
            }
            if (mats[material] == null)
            {
                sb.Append("usemtl ").Append("null").Append("\n");
            }
            else
            {
                sb.Append("usemtl ").Append(mats[material].name).Append("\n");
                //sb.Append("usemap ").Append(mats[material].name).Append("\n");
            }

            //See if this material is already in the materiallist.
            try
            {
                if (mats[material] == null)
                {
                    ObjMaterial objMaterial = new ObjMaterial();

                    objMaterial.name           = "null";
                    objMaterial.textureName    = null;
                    objMaterial.material       = new Material(Shader.Find("Unlit/Color"));
                    objMaterial.material.color = Color.magenta;

                    materialList.Add(objMaterial.name, objMaterial);
                }
                else
                {
                    ObjMaterial objMaterial = new ObjMaterial();

                    objMaterial.name = mats[material].name;

                    if (mats[material].mainTexture)
                    {
                        objMaterial.textureName = AssetDatabase.GetAssetPath(mats[material].mainTexture);
                    }
                    else
                    {
                        objMaterial.textureName = null;
                    }
                    objMaterial.material = mats[material];

                    materialList.Add(objMaterial.name, objMaterial);
                }
            }
            catch (ArgumentException)
            {
                //Already in the dictionary
            }


            int[] triangles = m.GetTriangles(material);
            for (int i = 0; i < triangles.Length; i += 3)
            {
                //Because we inverted the x-component, we also needed to alter the triangle winding.
                sb.Append(string.Format("f {1}/{1}/{1} {0}/{0}/{0} {2}/{2}/{2}\n",
                                        triangles[i] + 1 + vertexOffset, triangles[i + 1] + 1 + normalOffset, triangles[i + 2] + 1 + uvOffset));
            }
        }

        vertexOffset += m.vertices.Length;
        normalOffset += m.normals.Length;
        uvOffset     += m.uv.Length;

        return(sb.ToString());
    }