Пример #1
0
        public static T                 Spawn <T>(T source, Transform parent = null) where T : Object
        {
            T          instance;
            Storage    storage;
            GameObject sourceGo;
            GameObject go;

            sourceGo = GetGameObject(source);
            if (!Instance._storage.TryGetValue(sourceGo, out storage))
            {
                storage = AutoPool <Storage> .Create();

                Instance._storage.Add(sourceGo, storage);
            }
            instance = storage.Get <T>();
            if (instance == null)
            {
                instance = Instantiate(source, parent);
                go       = GetGameObject(instance);
            }
            else
            {
                go = GetGameObject(instance);
                go.transform.SetParent(parent);
                go.SetActive(true);
            }
            Instance._spawned.Add(go, storage);
            return(instance);
        }
Пример #2
0
        async Task                      DelayedPerform()
        {
            var cancelSource = AutoPool <CancellationTokenSource> .Create();

            this._cancelationSource = cancelSource;
            var token = cancelSource.Token;

            try
            {
                await Task.Delay((int)(this._delay * 1000), token);

                if (!token.IsCancellationRequested)
                {
                    this.Perform();
                    AutoPool <CancellationTokenSource> .Dispose(cancelSource);
                }
                else
                {
                    cancelSource.Dispose();
                }
            }
            catch (TaskCanceledException)
            {
            }
            catch (System.Exception ex)
            {
                Debug.LogException(ex);
            }
            if (this._cancelationSource == cancelSource)
            {
                this._cancelationSource = null;
            }
        }
Пример #3
0
 public void                         ClearAll()
 {
     foreach (var tileData in this._tiles.Values)
     {
         tileData.Clear(true);
         AutoPool <TileData> .Dispose(tileData);
     }
     this._tiles.Clear();
 }
Пример #4
0
 //Clears internal data including path, pools reuasable bits
 public void                         Clear()
 {
     UnityEngine.Profiling.Profiler.BeginSample("AStar.Clear");
     foreach (var tileData in this._tilesData.Values)
     {
         AutoPool <TileData> .Dispose(tileData);
     }
     this._tilesData.Clear();
     this._openedSorted.Clear();
     this._opened.Clear();
     this._closed.Clear();
     this._path.Clear();
     UnityEngine.Profiling.Profiler.EndSample();
 }
Пример #5
0
        public bool                         Clear(Vector2Int tile, bool shallowCleanup = false)
        {
            TileData tileData;

            if (this._tiles.TryGetValue(tile, out tileData))
            {
                this._tiles.Remove(tile);
                tileData.Clear(shallowCleanup);
                AutoPool <TileData> .Dispose(tileData);

                return(true);
            }
            return(false);
        }
Пример #6
0
        protected virtual TileData          InitTileData(T nTile, TileData prevTileData)
        {
            UnityEngine.Profiling.Profiler.BeginSample("AStar.InitTileData");
            TileData data = AutoPool <TileData> .Create();

            this._tilesData.Add(nTile, data);
            data._tile      = nTile;
            data._prev      = prevTileData != null ? prevTileData._tile : default(T);
            data._ancestors = this.CalculateAncestors(prevTileData);

            //calling heuristic() must remain after everthing else so it is possible for it to poll for the tile ancestors in the heuristic calculation
            data._heuristic = this._heuristic(nTile, this._to) + data._ancestors;
            UnityEngine.Profiling.Profiler.EndSample();
            return(data);
        }
Пример #7
0
        public void                         UnsetTileData <V>(Vector2Int tile, IDataIdentifier dataIdentifier)
        {
            TileData tileData;

            if (this._tiles.TryGetValue(tile, out tileData))
            {
                if (tileData.UnsetValue <V>(dataIdentifier))
                {
                    if (!tileData.HasValues())
                    {
                        this._tiles.Remove(tile);
                        tileData.Clear(true);
                        AutoPool <TileData> .Dispose(tileData);
                    }
                }
            }
        }
Пример #8
0
        public void                         SetTileData <V>(Vector2Int tile, IDataIdentifier dataIdentifier, V data)
        {
            TileData tileData;

            if (!this._tiles.TryGetValue(tile, out tileData))
            {
                if (!Equals(default(V), data))
                {
                    tileData = AutoPool <TileData> .Create();

                    this._tiles.Add(tile, tileData);
                }
                else
                {
                    return;
                }
            }
            tileData.SetValue(dataIdentifier, data);
        }