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); }
public void RefreshEffects() { if (CurrentEffects == null) { CurrentEffects = new List <Effect>(); } foreach (Effect e in CurrentEffects) { e.Refresh(); } CurrentEffects.RemoveAll(CurrentEffects => CurrentEffects.IsActive == false); }
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))); } }
/// <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); } } }
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; } } } }
private void _SequenceExecutorSequenceEnded(object sender, SequenceEventArgs e) { CurrentEffects.Reset(); OnSequenceEnded(e); OnContextEnded(EventArgs.Empty); }
private void _sequenceExecutor_SequenceReStarted(object sender, SequenceStartedEventArgs e) { CurrentEffects.Reset(); OnSequenceReStarted(e); }
public void TerminateNode(Guid targetNode) { IEnumerable <IEffectNode> nodes = CurrentEffects.Where(x => x.Effect.TargetNodes.Any(t => t.Id.Equals(targetNode))).ToList(); CurrentEffects.RemoveEffects(nodes); }
//Set a buff and return its unique name public string AddEffect(Effect effect) { CurrentEffects.Add(effect); return(CurrentEffects[CurrentEffects.Count - 1].Name); }
//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); }
public IEnumerable <SideEffect> GetSideEffects() { return(CurrentEffects.Where(t => t is SideEffect).Cast <SideEffect>()); }
public IEnumerable <PositiveEffect> GetPositiveEffects() { return(CurrentEffects.Where(e => e is PositiveEffect).Cast <PositiveEffect>()); }