protected override void RemoveElement(IMapElement mapElement) { if (mapElementToHashId.ContainsKey(mapElement)) { hashIdToMapElement[mapElementToHashId[mapElement]].Remove(mapElement); } mapElementToHashId.Remove(mapElement); OnElementRemoved?.Invoke(mapElement); }
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); } }