public void RemoveIndoorMapEntityInformation(IndoorMapEntityInformation indoorMapEntityInformation)
        {
            if (!m_indoorMapEntityInformationIdToObject.ContainsKey(indoorMapEntityInformation.Id))
            {
                return;
            }

            m_indoorMapEntityInformationIdToObject.Remove(indoorMapEntityInformation.Id);
            NativeIndoorMapEntityInformationApi_DestroyIndoorMapEntityInformation(NativePluginRunner.API, indoorMapEntityInformation.Id);
        }
        public IndoorMapEntityInformation AddIndoorMapEntityInformation(
            string indoorMapId,
            Action <IndoorMapEntityInformation> indoorMapEntityInformationChangedDelegate
            )
        {
            var indoorMapEntityInformationId = NativeIndoorMapEntityInformationApi_CreateIndoorMapEntityInformation(NativePluginRunner.API, indoorMapId);
            var indoorMapEntityInformation   = new IndoorMapEntityInformation(
                this,
                indoorMapEntityInformationId,
                indoorMapId,
                indoorMapEntityInformationChangedDelegate
                );

            m_indoorMapEntityInformationIdToObject.Add(indoorMapEntityInformationId, indoorMapEntityInformation);

            TryUpdateIndoorMapEntityInformation(indoorMapEntityInformation);

            return(indoorMapEntityInformation);
        }
 /// <summary>
 /// Remove an IndoorMapEntityInformation object, previously added via AddIndoorMapEntityInformation.
 /// </summary>
 /// <param name="indoorMapEntityInformation">The IndoorMapEntityInformation instance to remove.</param>
 public void RemoveIndoorMapEntityInformation(IndoorMapEntityInformation indoorMapEntityInformation)
 {
     m_apiInternal.RemoveIndoorMapEntityInformation(indoorMapEntityInformation);
 }
        private bool TryUpdateIndoorMapEntityInformation(IndoorMapEntityInformation indoorMapEntityInformation)
        {
            // fetch from native
            var indoorMapEntities = new List <IndoorMapEntity>();

            var interop = new IndoorMapEntityInformationInterop
            {
                indoorMapEntityInformationModelId = indoorMapEntityInformation.Id
            };

            var success = NativeIndoorMapEntityInformationApi_TryGetIndoorMapEntityInformationBufferSizes(NativePluginRunner.API, ref interop);

            if (!success)
            {
                return(false);
            }

            var indoorMapEntityIdsBuffer         = new int[interop.indoorMapEntityModelIdsBufferSize];
            var indoorMapEntityIdsBufferGCHandle = GCHandle.Alloc(indoorMapEntityIdsBuffer, GCHandleType.Pinned);

            interop.indoorMapEntityModelIds = indoorMapEntityIdsBufferGCHandle.AddrOfPinnedObject();

            success = NativeIndoorMapEntityInformationApi_TryGetIndoorMapEntityInformation(NativePluginRunner.API, ref interop);
            if (success)
            {
                foreach (var indoorMapEntityId in indoorMapEntityIdsBuffer)
                {
                    var indoorMapEntityInterop = new IndoorMapEntityInterop
                    {
                        indoorMapEntityModelId = indoorMapEntityId
                    };
                    success = NativeIndoorMapEntityInformationApi_TryGetIndoorMapEntityBufferSizes(NativePluginRunner.API, ref indoorMapEntityInterop);
                    if (!success)
                    {
                        break;
                    }


                    var indoorMapEntityIdBuffer         = new byte[indoorMapEntityInterop.indoorMapEntityIdBufferSize];
                    var indoorMapEntityIdBufferGCHandle = GCHandle.Alloc(indoorMapEntityIdBuffer, GCHandleType.Pinned);
                    indoorMapEntityInterop.indoorMapEntityId = indoorMapEntityIdBufferGCHandle.AddrOfPinnedObject();

                    success = NativeIndoorMapEntityInformationApi_TryGetIndoorMapEntity(NativePluginRunner.API, ref indoorMapEntityInterop);
                    if (!success)
                    {
                        indoorMapEntityIdBufferGCHandle.Free();
                        break;
                    }

                    var indoorMapEntity = FromInterop(indoorMapEntityInterop);
                    indoorMapEntities.Add(indoorMapEntity);
                    indoorMapEntityIdBufferGCHandle.Free();
                }
            }

            if (success)
            {
                indoorMapEntityInformation.SetEntityInformation(indoorMapEntities, interop.indoorMapEntityLoadState);

                if (OnIndoorMapEntityInformationUpdated != null)
                {
                    OnIndoorMapEntityInformationUpdated(indoorMapEntityInformation);
                }
            }

            indoorMapEntityIdsBufferGCHandle.Free();

            return(success);
        }