Example #1
0
        public void TerminateNodes(IEnumerable <Guid> targetNodes)
        {
            HashSet <IEffectNode> nodes = new HashSet <IEffectNode>();

            foreach (var targetNode in targetNodes)
            {
                nodes.AddRange(CurrentEffects.Where(x => x.Effect.TargetNodes.Any(t => t.Id.Equals(targetNode))));
            }
            CurrentEffects.RemoveEffects(nodes);
        }
Example #2
0
        public void RefreshEffects()
        {
            if (CurrentEffects == null)
            {
                CurrentEffects = new List <Effect>();
            }

            foreach (Effect e in CurrentEffects)
            {
                e.Refresh();
            }

            CurrentEffects.RemoveAll(CurrentEffects => CurrentEffects.IsActive == false);
        }
Example #3
0
        public void AddLives(int lives)
        {
            _health += lives;
            if (_health > _totalHealth)
            {
                _health = _totalHealth;
            }
            if (_health < 0)
            {
                _health = 0;
            }

            if (lives < 0)
            {
                CurrentEffects.Add(new Effect(EffectType.Damage, TimeSpan.FromMilliseconds(200)));
                CurrentEffects.Add(new Effect(EffectType.HealthChanged, TimeSpan.FromSeconds(2)));
            }
        }
Example #4
0
    /// <summary>
    /// Накладывает на персонажа заданный эффект <paramref name="effects"/>.
    /// </summary>
    /// <param name="effects">Массив накладываемых эффектов.</param>
    public void ApplyEffects(params Effect[] effects)
    {
        foreach (var effect in effects)
        {
            if (UnityEngine.Random.value <= effect.applicationChance)
            {
                var instance = Instantiate(effect);
                CurrentEffects.Add(instance);

                switch (instance.effectType)
                {
                case EffectType.Blindness:
                case EffectType.Weakness:
                case EffectType.Guard:
                    instance.Apply(this);
                    break;
                }

                OnEffectApplied?.Invoke(instance);
            }
        }
    }
Example #5
0
 public void Clear(bool waitForReset = true)
 {
     _dataSource.ClearData();
     if (!IsRunning || IsPaused)
     {
         Logging.Error("Attempt to clear effects from a non running context");
         return;
     }
     CurrentEffects.Reset();
     if (waitForReset)
     {
         //wait for reset to occur, but time out if it does not happen
         var sw = Stopwatch.StartNew();
         while (CurrentEffects.Resetting())
         {
             if (sw.ElapsedMilliseconds > 1000)
             {
                 Logging.Error("Attempt to clear current effects timed out after 1 second.");
                 break;
             }
         }
     }
 }
Example #6
0
 private void _SequenceExecutorSequenceEnded(object sender, SequenceEventArgs e)
 {
     CurrentEffects.Reset();
     OnSequenceEnded(e);
     OnContextEnded(EventArgs.Empty);
 }
Example #7
0
 private void _sequenceExecutor_SequenceReStarted(object sender, SequenceStartedEventArgs e)
 {
     CurrentEffects.Reset();
     OnSequenceReStarted(e);
 }
Example #8
0
        public void TerminateNode(Guid targetNode)
        {
            IEnumerable <IEffectNode> nodes = CurrentEffects.Where(x => x.Effect.TargetNodes.Any(t => t.Id.Equals(targetNode))).ToList();

            CurrentEffects.RemoveEffects(nodes);
        }
Example #9
0
 //Set a buff and return its unique name
 public string AddEffect(Effect effect)
 {
     CurrentEffects.Add(effect);
     return(CurrentEffects[CurrentEffects.Count - 1].Name);
 }
Example #10
0
 //Set a buff and return its unique name
 public string AddEffect(string name, int value, string desc, string source, int ttl)
 {
     CurrentEffects.Add(new Effect(name, value, desc, source, ttl));
     return(CurrentEffects[CurrentEffects.Count - 1].Name);
 }
Example #11
0
 public IEnumerable <SideEffect> GetSideEffects()
 {
     return(CurrentEffects.Where(t => t is SideEffect).Cast <SideEffect>());
 }
Example #12
0
 public IEnumerable <PositiveEffect> GetPositiveEffects()
 {
     return(CurrentEffects.Where(e => e is PositiveEffect).Cast <PositiveEffect>());
 }