Ejemplo n.º 1
0
        public void RemoveStatusEffect(string name)
        {
            int index = _findStatusEffectIndexByKey(name);

            if (index == -1)
            {
                return;
            }

            if (_started == true && _statuses.Count == 1)
            {
                _started = false;
                CancelInvoke();
            }

            foreach (StatusEffectType statusEffectType in _statuses[index].StatusEffectData.statusEffectTypes)
            {
                StatusEffectFactory.GetStatusEffect(statusEffectType).Unapply(_statuses[index]);
            }

            _currentStatuses.Remove(name);

            _statuses.RemoveAt(index);

            OnRemoveStatusEffectEvent?.Invoke(name);
        }
Ejemplo n.º 2
0
        public void AddStatusEffect(Status status)
        {
            string key = status.StatusEffectData.Name;

            if (_currentStatuses.Contains(key))
            {
                int index = _findStatusEffectIndexByKey(key);

                if (status.StatusEffectData.Reset == true)
                {
                    _statuses[index].ResetDuration();
                }
                else
                {
                    _statuses[index].IncreaseDuration(status.StatusEffectData.Duration);
                }

                if (status.StatusEffectData.CanStack == true)
                {
                    _statuses[index].IncreaseStack();
                }

                OnUpdateStatusEffectEvent?.Invoke(_statuses[index]);
            }
            else
            {
                _currentStatuses.Add(key);
                status.ResetDuration();
                _statuses.Add(status);

                foreach (StatusEffectType statusEffectType in status.StatusEffectData.statusEffectTypes)
                {
                    StatusEffectFactory.GetStatusEffect(statusEffectType).Apply(status);
                }

                if (status.StatusEffectData.Hidden == false)
                {
                    Debug.Log("Here!");
                    OnAddStatusEffectEvent?.Invoke(status);
                }
            }

            if (_started == false)
            {
                _started = true;
                InvokeRepeating(nameof(Routine), 1f, 1f);
            }
        }