示例#1
0
        public void Clear()
        {
            ResourcesChangedEventArgs e = ResourcesChangedEventArgs.FromKeyCollection(dictionary.Keys.ToArray());

            dictionary.Clear();
            ResourcesChanged.Raise(this, e);
        }
示例#2
0
        public bool Remove(object key)
        {
            if (dictionary.Remove(key))
            {
                ResourcesChanged.Raise(this, ResourcesChangedEventArgs.FromKey(key));
                return(true);
            }

            return(false);
        }
示例#3
0
        private void OnMergedDictionariesCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            foreach (ResourceDictionary dictionary in e.OldItems)
            {
                dictionary.ResourcesChanged -= OnMergeDictionaryResourcesChanged;
            }

            foreach (ResourceDictionary dictionary in e.NewItems)
            {
                dictionary.ResourcesChanged += OnMergeDictionaryResourcesChanged;
            }

            if (e.Action != NotifyCollectionChangedAction.Move)
            {
                IEnumerable <object> keys = e.OldItems.Concat(e.NewItems).Cast <ResourceDictionary>().SelectMany(GetMergedDictionariesKeys);
                ResourcesChanged.Raise(this, ResourcesChangedEventArgs.FromKeyCollection(keys));
            }
        }
示例#4
0
        public Styles()
        {
            ResetBehavior = ResetBehavior.Remove;
            this.ForEachItem(
                x =>
            {
                if (x.ResourceParent == null && x is ISetStyleParent setParent)
                {
                    setParent.SetParent(this);
                    setParent.NotifyResourcesChanged(new ResourcesChangedEventArgs());
                }

                if (x.HasResources)
                {
                    ResourcesChanged?.Invoke(this, new ResourcesChangedEventArgs());
                }

                x.ResourcesChanged += SubResourceChanged;
                _cache              = null;
            },
                x =>
            {
                if (x.ResourceParent == this && x is ISetStyleParent setParent)
                {
                    setParent.SetParent(null);
                    setParent.NotifyResourcesChanged(new ResourcesChangedEventArgs());
                }

                if (x.HasResources)
                {
                    ResourcesChanged?.Invoke(this, new ResourcesChangedEventArgs());
                }

                x.ResourcesChanged -= SubResourceChanged;
                _cache              = null;
            },
                () => { });
        }
示例#5
0
 protected virtual void OnResourcesChanged()
 {
     ResourcesChanged?.Invoke(this, EventArgs.Empty);
 }
示例#6
0
 /// <summary>
 /// Raises <see cref="ResourcesChanged"/> event.
 /// </summary>
 private void OnWorkerResourcesChanged(WorkerResource kind, bool increased)
 {
     ResourcesChanged?.Invoke(this, kind, increased);
 }
示例#7
0
 private void OnResourcesChanged(object sender, ResourcesChangedEventArgs e)
 {
     ResourcesChanged.Raise(this, e);
 }
示例#8
0
 private void RaiseResourcesChanged(ResourcesChangedEventArgs e)
 {
     OnResourcesChanged(e);
     ResourcesChanged.Raise(this, e);
 }
示例#9
0
 private void OnMergeDictionaryResourcesChanged(object sender, ResourcesChangedEventArgs e)
 {
     ResourcesChanged.Raise(this, e);
 }
示例#10
0
 public void Add(object key, object value)
 {
     dictionary[key] = value;
     ResourcesChanged.Raise(this, ResourcesChangedEventArgs.FromKey(key));
 }
示例#11
0
        public void SetSystem()
        {
            Owner.EnemyControlSystem.EnemyDied    += OnEnemyDied;
            Owner.SpiritPlaceSystem.SpiritPlaced  += OnSpiritCreated;
            Owner.PlayerInputSystem.SpiritSold    += OnSpiritSold;
            Owner.WaveSystem.AllWaveEnemiesKilled += OnAllEnemiesKilled;
            Owner.ElementSystem.LearnedElement    += OnElementLearned;
            Owner.ItemDropSystem.ItemUICreated    += OnItemUICreated;

            void OnElementLearned(int learnCost) => AddResource(ResourceType.MagicCrystal, -learnCost);

            void OnItemUICreated(ItemUISystem e)
            {
                e.System.ConsumedMagicCrystals += OnMagicCrystalsConsumed;
                e.System.ConsumedSpiritVessels += OnSpiritVesselsConsumed;

                void OnMagicCrystalsConsumed(double value) => AddResource(ResourceType.MagicCrystal, value);
                void OnSpiritVesselsConsumed(double value) => AddResource(ResourceType.MaxSpiritLimit, value);
            }

            void OnSpiritSold(SpiritSystem spirit)
            {
                AddResource(ResourceType.Resource, spirit.Data.Get(Numeral.ResourceCost).Value);
                AddResource(ResourceType.SpiritLimit, -spirit.Data.Get(Enums.Spirit.SpiritLimit).Value);
            }

            void OnSpiritCreated(SpiritSystem spirit)
            {
                AddResource(ResourceType.Resource, -spirit.Data.Get(Numeral.ResourceCost).Value);
                AddResource(ResourceType.SpiritLimit, spirit.Data.Get(Enums.Spirit.SpiritLimit).Value);
            }

            void OnEnemyDied(EnemySystem enemy)
            {
                if (enemy.LastDamageDealer != null)
                {
                    AddResource(ResourceType.Resource, enemy.Data.Get(Numeral.ResourceCost).Sum);
                }
            }

            void OnAllEnemiesKilled()
            {
                AddResource(ResourceType.MagicCrystal, 5f);
                AddResource(ResourceType.Resource, Owner.WaveSystem.WaveNumber * 10 + Owner.Data.Resources.Resource.GetPercent(10));
            }

            void AddResource(ResourceType type, double amount)
            {
                if (type == ResourceType.Resource)
                {
                    Owner.Data.Resources.Resource += amount;
                }

                else if (type == ResourceType.MagicCrystal)
                {
                    Owner.Data.Resources.MagicCrystals += amount;
                }

                else if (type == ResourceType.SpiritLimit)
                {
                    Owner.Data.Resources.CurrentSpiritLimit += amount;
                }

                else if (type == ResourceType.MaxSpiritLimit)
                {
                    Owner.Data.Resources.MaxSpiritLimit += amount;
                }

                //DataLoadingSystem.Save(GM.I.Players[0]);
                ResourcesChanged?.Invoke();
            }
        }