Beispiel #1
0
    static void OnPose(ref PNTransformUnity outputPose, ref PNTransformUnity arkitPose, IntPtr context)
    {
        Matrix4x4 outputPoseMat = PNUtility.MatrixOps.PNPose2Matrix4x4(outputPose);
        Matrix4x4 arkitPoseMat  = PNUtility.MatrixOps.PNPose2Matrix4x4(arkitPose);

        MappingStatus status = Instance.GetStatus();

        var listeners = Instance.listeners;

        if (status == MappingStatus.RUNNING)
        {
            MainThreadTaskQueue.InvokeOnMainThread(() => {
                foreach (var listener in listeners)
                {
                    listener.OnPose(outputPoseMat, arkitPoseMat);
                }
            });
            Instance.mCurrentTransform = outputPoseMat * arkitPoseMat.inverse;
        }

        if (status != Instance.mPrevStatus)
        {
            MainThreadTaskQueue.InvokeOnMainThread(() => {
                foreach (var listener in listeners)
                {
                    listener.OnStatusChange(Instance.mPrevStatus, status);
                }
                Instance.mPrevStatus = status;
            });
        }
    }
Beispiel #2
0
    static void OnMapLoaded(ref PNTransferStatusUnity status, IntPtr contextPtr)
    {
        GCHandle handle = GCHandle.FromIntPtr(contextPtr);
        Action <bool, bool, float> loadProgressCb = handle.Target as Action <bool, bool, float>;

        PNTransferStatusUnity statusClone = status;

        MainThreadTaskQueue.InvokeOnMainThread(() => {
            if (statusClone.completed)
            {
                Debug.Log("Loaded map!");
                loadProgressCb(true, false, 1);
                handle.Free();
            }
            else if (statusClone.faulted)
            {
                Debug.Log("Failed to downloading map!");
                loadProgressCb(false, true, 0);
                handle.Free();
            }
            else
            {
                Debug.Log("Downloading map!");
                loadProgressCb(false, false, (float)(statusClone.bytesTransferred) / statusClone.bytesTotal);
            }
        });
    }
Beispiel #3
0
    static void OnMapUploaded(ref PNTransferStatusUnity status, IntPtr contextPtr)
    {
        GCHandle                   handle     = GCHandle.FromIntPtr(contextPtr);
        SaveLoadContext            context    = handle.Target as SaveLoadContext;
        Action <bool, bool, float> progressCb = context.progressCb;

        PNTransferStatusUnity statusClone = status;

        Debug.Log(String.Format("mapId {0} completed {1} faulted {2} bytesTransferred {3} bytesTotal {4}",
                                status.mapId, status.completed, status.faulted, status.bytesTransferred, status.bytesTotal)
                  );
        MainThreadTaskQueue.InvokeOnMainThread(() => {
            if (statusClone.completed)
            {
                Debug.Log("Uploaded map!");
                progressCb(true, false, 1);
                handle.Free();
            }
            else if (statusClone.faulted)
            {
                Debug.Log("Failed to upload map!");
                progressCb(false, true, 0);
                handle.Free();
            }
            else
            {
                Debug.Log("Uploading map!");
                progressCb(false, false, (float)(statusClone.bytesTransferred) / statusClone.bytesTotal);
            }
        });
    }
 void OnDestroy()
 {
     MainThreadTaskQueue.Flush();
     _chunkStreaming.Dispose();
     _volume.Dispose();
     _streaming.Dispose();
     World.Streaming.StaticShutdown();
 }
    void Update()
    {
        if (_tick)
        {
            _streaming.Tick();
        }

        MainThreadTaskQueue.Run();
    }
        //------------------------Notification for users------------------------

        public void ShowMessage(string message)
        {
            if (messageText != null)
            {
                MainThreadTaskQueue.InvokeOnMainThread(() =>
                {
                    messageText.text = message;
                });
            }
        }
        public void PrintDebugMessage(string message)
        {
            if (debugPanelController != null)
            {
                //debugPanelController.PushMessage(message);

                MainThreadTaskQueue.InvokeOnMainThread(() =>
                {
                    debugPanelController.PushMessage(message);
                });
            }
        }
Beispiel #8
0
    private static void OnMapDeleted(ref PNCallbackResultUnity result, IntPtr context)
    {
        GCHandle handle = GCHandle.FromIntPtr(context);
        Action <bool, string> deletedCb = handle.Target as Action <bool, string>;

        bool   deleted  = result.success;
        string errorMsg = result.msg;

        MainThreadTaskQueue.InvokeOnMainThread(() => {
            if (deleted)
            {
                deletedCb(true, "Success");
            }
            else
            {
                deletedCb(true, "Failed to delete, error: " + errorMsg);
            }

            handle.Free();
        });
    }
Beispiel #9
0
    static void OnMapList(ref PNCallbackResultUnity result, IntPtr context)
    {
        GCHandle           handle = GCHandle.FromIntPtr(context);
        Action <MapInfo[]> listCb = handle.Target as Action <MapInfo[]>;

        PNCallbackResultUnity resultClone = result;

        MainThreadTaskQueue.InvokeOnMainThread(() => {
            if (resultClone.success)
            {
                String listJson   = resultClone.msg;
                MapList mapIdList = JsonConvert.DeserializeObject <MapList> (listJson);
                listCb(mapIdList.places);
            }
            else
            {
                Debug.LogError("Failed to fetch map list, error: " + resultClone.msg);
                listCb(null);
            }

            handle.Free();
        });
    }
Beispiel #10
0
    static void OnMapSaved(ref PNCallbackResultUnity result, IntPtr contextPtr)
    {
        GCHandle        handle  = GCHandle.FromIntPtr(contextPtr);
        SaveLoadContext context = handle.Target as SaveLoadContext;
        Action <String> savedCb = context.savedCb;

        PNCallbackResultUnity resultClone = result;

        MainThreadTaskQueue.InvokeOnMainThread(() => {
            if (resultClone.success)
            {
                String mapId = resultClone.msg;
                Debug.Log("Added a record to map db with id " + mapId);
                PNSaveMap(mapId, OnMapUploaded, contextPtr);
                savedCb(mapId);
            }
            else
            {
                Debug.Log(String.Format("Failed to add the map! Error msg: %s", resultClone.msg));
                savedCb(null);
                handle.Free();
            }
        });
    }
        //------------------------Debug panel-----------------------------------

        public void DebugMessage(string msgLine)
        {
            if (!debugPanelController.Equals(null))
            {
                string[] msgLineArr = msgLine.Split(Environment.NewLine.ToCharArray());
                if (msgLineArr != null && msgLineArr.Length > 0)
                {
                    foreach (string line in msgLineArr)
                    {
                        MainThreadTaskQueue.InvokeOnMainThread(() =>
                        {
                            debugPanelController.PushMessage(line);
                        });
                    }
                }
                else
                {
                    MainThreadTaskQueue.InvokeOnMainThread(() =>
                    {
                        debugPanelController.PushMessage(msgLine);
                    });
                }
            }
        }
 void Awake()
 {
     sInstance = this;
 }
 void Awake()
 {
     _instance = this;
 }