Esempio n. 1
0
        public U Run <U>() where U : Errand <T>, new()
        {
            var errand = ErrandFactory <T> .Get <U>();

            errand.Attach(this, _entities, Game);
            var type = typeof(U);

            _addQueue.Add(ErrandStoreFactory.Get(errand, type));
            return(errand);
        }
Esempio n. 2
0
        public void CommitErrandChanges()
        {
            foreach (var item in _addQueue)
            {
                var errand        = item.Errand;
                var type          = item.Type;
                var doesListExist = _errands.TryGetValue(type, out var errands);
                if (!doesListExist)
                {
                    errands        = new List <Errand <T> >();
                    _errands[type] = errands;
                }
                errands.Add(errand);
                ErrandStoreFactory.Recycle(item);
            }

            foreach (var item in _removeQueue)
            {
                var value         = item.Errand;
                var type          = item.Type;
                var isInitialized = _errands.TryGetValue(type, out var errands);
                if (!isInitialized)
                {
                    throw new Exception($"Trying to remove errand with nonexistant type {type}");
                }

                var isInList = errands.Remove(value);

                if (isInList)
                {
                    ErrandFactory <T> .Recycle(value, type);
                }
                ErrandStoreFactory.Recycle(item);
            }

            _addQueue.Clear();
            _removeQueue.Clear();
        }
Esempio n. 3
0
        public void CancelAll <U>() where U : Errand <T>, new()
        {
            var isInitialized = _errands.TryGetValue(typeof(U), out var errands);

            if (isInitialized)
            {
                var type = typeof(U);
                foreach (var errand in errands)
                {
                    Remove(errand, type);
                }
                for (var i = 0; i < _addQueue.Count; i++)
                {
                    if (_addQueue[i].Type.Equals(type))
                    {
                        Remove(_addQueue[i].Errand, _addQueue[i].Type);
                        ErrandStoreFactory.Recycle(_addQueue[i]);
                        _addQueue.RemoveAt(i);
                        i -= 1;
                    }
                }
            }
        }
Esempio n. 4
0
 public void Remove(Errand <T> value, Type type)
 {
     _removeQueue.Add(ErrandStoreFactory.Get(value, type));
 }