Beispiel #1
0
        private void RemoveElementAt(int index)
        {
            var data = m_elementsData[index];

            data.OnSelectionChanged -= SelectionChangeHandler;
            data.OnClick            -= ClickHandler;
            m_elementsData.RemoveAt(index);

            OnElementRemoved.Call(index);
        }
Beispiel #2
0
        protected override void RemoveElement(IMapElement mapElement)
        {
            if (mapElementToHashId.ContainsKey(mapElement))
            {
                hashIdToMapElement[mapElementToHashId[mapElement]].Remove(mapElement);
            }

            mapElementToHashId.Remove(mapElement);
            OnElementRemoved?.Invoke(mapElement);
        }
Beispiel #3
0
        public void SetAssetToLocation(ref int?location, AssetPtr asset)
        {
            if (location != null)
            {
                int     index   = location.Value;
                Element element = Elements[index];
                Assert.AreNotEqual(element.Asset, AssetPtr.NullPtr);

                if (element.Asset == asset)
                {
                    return;
                }

                if (--element.RefCount == 0)
                {
                    Elements.RemoveAt(index);
                    IndexMap.Remove(element.Asset.AssetGUID);

                    for (int i = index; i < Elements.Count; i++)
                    {
                        IndexMap[Elements[i].Asset.AssetGUID] = i;
                    }

                    OnElementRemoved?.Invoke(index);
                }
            }

            if (asset == AssetPtr.NullPtr)
            {
                location = null;
            }
            else if (IndexMap.TryGetValue(asset.AssetGUID, out int index))
            {
                location = index;
                Elements[index].RefCount++;
            }
            else
            {
                location = index = Elements.Count;
                Elements.Add(new Element
                {
                    Asset    = asset,
                    RefCount = 1
                });
                IndexMap.Add(asset.AssetGUID, index);
            }
        }