Esempio n. 1
0
        protected Attack HornAttack(Creature attacker, IEffectHolder defender)
        {
            Attack attack = new Attack(attacker, defender);

            attack.Elements.Add(Element.Emperor, 1.0);
            return(attack);
        }
Esempio n. 2
0
        private static Attack FlareAttack(Creature user, IEffectHolder target)
        {
            Attack attack = new Attack(user, target);

            attack.Elements.Add(Element.TheEnd, 1.0);
            return(attack);
        }
Esempio n. 3
0
 public EffectFlag(IEffectHolder holder, Stat flag, bool value, double priority)
 {
     Holder   = holder;
     Flag     = flag;
     Value    = value;
     Priority = priority;
 }
Esempio n. 4
0
 public EffectFamily(IEffectHolder holder, Family family, bool value, double priority)
 {
     Holder   = holder;
     Family   = family;
     Value    = value;
     Priority = priority;
 }
Esempio n. 5
0
 public static void ClearPosition(this IEffectHolder subject)
 {
     foreach (var position in subject.GetEffects <Effect>().Where(x => x is IPosition position && position.Subject == subject))
     {
         position.Remove();
     }
 }
Esempio n. 6
0
 public EffectStatLock(IEffectHolder holder, Stat stat, double min, double max)
 {
     Holder   = holder;
     Stat     = stat;
     MinValue = min;
     MaxValue = max;
 }
Esempio n. 7
0
 public static void ClearStatusEffects(this IEffectHolder holder, Func <StatusEffect, bool> match)
 {
     foreach (var effect in holder.GetEffects <EffectStatusEffect>().Where(effect => match(effect.StatusEffect)))
     {
         effect.Remove();
     }
 }
Esempio n. 8
0
        public static void AddStatusEffect(this IEffectHolder holder, StatusEffect statusEffect)
        {
            statusEffect.Creature = holder;
            var statusEffects = holder.GetEffects <EffectStatusEffect>();
            var combineable   = statusEffects.Select(x => x.StatusEffect).Where(x => x.CanCombine(statusEffect)).ToList();

            if (combineable.Any())
            {
                var combined = combineable.SelectMany(x => x.Combine(statusEffect)).Distinct().ToList();
                var added    = combined.Except(combineable).ToList();
                var removed  = combineable.Except(combined).ToHashSet();
                foreach (var effect in added)
                {
                    effect.Apply();
                }
                foreach (var effect in statusEffects.Where(x => removed.Contains(x.StatusEffect)))
                {
                    effect.Remove();
                }
            }
            else
            {
                statusEffect.Apply();
            }
        }
Esempio n. 9
0
 public static void ClearStatusEffects(this IEffectHolder holder)
 {
     foreach (var effect in holder.GetEffects <EffectStatusEffect>())
     {
         effect.Remove();
     }
 }
Esempio n. 10
0
 public static JToken GetHolderID(IEffectHolder holder)
 {
     if (holder is MapTile mapTile)
     {
         return(WriteCoordinate("mapTile", mapTile.X, mapTile.Y));
     }
     else if (holder is Tile tile)
     {
         if (tile == tile.Under)
         {
             return(WriteCoordinate("under", tile.X, tile.Y));
         }
         else
         {
             return(WriteCoordinate("tile", tile.X, tile.Y));
         }
     }
     else if (holder is IJsonSerializable jsonSerializable)
     {
         return(jsonSerializable.GlobalID.ToString());
     }
     else
     {
         return(null);
     }
 }
Esempio n. 11
0
 public static void ClearEffects(this IEffectHolder holder)
 {
     foreach (var effect in GetEffects <Effect>(holder, false))
     {
         effect.Remove();
     }
 }
Esempio n. 12
0
 public Randomized(IEffectHolder holder, Stat stat, double lower, double upper) : base()
 {
     Holder = holder;
     Stat   = stat;
     Lower  = lower;
     Upper  = upper;
 }
Esempio n. 13
0
 public override void ReadJson(JToken json, Context context)
 {
     Holder   = Serializer.GetHolder <IEffectHolder>(json["holder"], context);
     Stat     = Stat.GetStat(json["stat"].Value <string>());
     MaxValue = json["max"].Value <double>();
     MinValue = json["min"].Value <double>();
 }
Esempio n. 14
0
 public override void ReadJson(JToken json, Context context)
 {
     Holder   = Serializer.GetHolder <IEffectHolder>(json["holder"], context);
     Flag     = Stat.GetStat(json["flag"].Value <string>());
     Value    = json["value"].Value <bool>();
     Priority = json["priority"].Value <double>();
 }
Esempio n. 15
0
        protected Attack ExplosionAttack(Creature attacker, IEffectHolder defender)
        {
            Attack attack = new Attack(attacker, defender);

            attack.Elements.Add(Element.Chaos, 1.0);
            return(attack);
        }
Esempio n. 16
0
 public void Add(IEffectHolder holder, Effect effect)
 {
     if (holder.ObjectID == ReusableID.Null)
     {
         return;
     }
     if (Has(holder))
     {
         Effects[holder.ObjectID].Add(effect);
     }
     else
     {
         if (Effects.Capacity > holder.ObjectID && Effects[holder.ObjectID] != null)
         {
             var effects = Effects[holder.ObjectID];
             for (int i = effects.Count; i >= 0; i--)
             {
                 if (i < effects.Count)
                 {
                     effects[i].Remove();
                 }
             }
         }
         Effects[holder.ObjectID] = new EffectList(holder.ObjectID.Generation)
         {
             effect
         };
     }
     Effects[holder.ObjectID].Persist = holder is IEffectHolderPersistent;
 }
Esempio n. 17
0
        private Attack AttackSlap(Creature attacker, IEffectHolder defender)
        {
            Attack attack = new Attack(attacker, defender);

            attack.Elements.Add(Element.Bludgeon, 0.3);
            return(attack);
        }
Esempio n. 18
0
        private static Attack MeteorAttack(Creature user, IEffectHolder target)
        {
            Attack attack = new Attack(user, target);

            attack.SetParameters(user.GetStat(Stat.Defense), 0.25, 1);
            attack.Elements.Add(Element.Bludgeon, 1.0);
            return(attack);
        }
Esempio n. 19
0
 public Special(IEffectHolder holder, Stat stat, AmountDelegate amount, StatLineDelegate statLine, string tag) : base()
 {
     Holder       = holder;
     Stat         = stat;
     AmountFunc   = amount;
     StatLineFunc = statLine;
     Tag          = tag;
 }
Esempio n. 20
0
        private Attack BulletAttack(Creature attacker, IEffectHolder defender)
        {
            Attack attack = new Attack(attacker, defender);

            attack.Elements.Add(Element.Bludgeon, 1.0);
            attack.ExtraEffects.Add(new AttackSkill(this));
            return(attack);
        }
Esempio n. 21
0
        public Attack ArcAttack(Creature attacker, IEffectHolder defender)
        {
            Attack attack = new Attack(attacker, defender);

            attack.SetParameters(20, 0, 1);
            attack.Elements.Add(Element.Thunder, 1.0);
            return(attack);
        }
Esempio n. 22
0
 public Color GetStatColor(IEffectHolder holder)
 {
     if (holder is Trait trait)
     {
         return(trait.Color);
     }
     return(Color.White);
 }
Esempio n. 23
0
        private Attack AttackQuake(Creature attacker, IEffectHolder defender, PopupHelper popupHelper)
        {
            Attack attack = new Attack(attacker, defender);

            attack.PopupHelper = popupHelper;
            attack.Elements.Add(Element.TheEnd, 1.0);
            return(attack);
        }
Esempio n. 24
0
        private static Attack LavaAttack(Creature attacker, IEffectHolder defender)
        {
            Attack attack = new Attack(attacker, defender);

            attack.SetParameters(50, 1, 1);
            attack.Elements.Add(Element.Fire, 1.0);
            return(attack);
        }
Esempio n. 25
0
        public static IEnumerable <Wait> PushEvent <T, V>(this IEffectHolder holder, T eventParam) where V : EffectEvent <T>
        {
            IEnumerable <V> enumerable = holder.GetEffects <V>().Distinct();

            foreach (var effect in enumerable)
            {
                yield return(effect.Trigger(eventParam));
            }
        }
Esempio n. 26
0
        private Attack ExplosionAttack(Creature attacker, IEffectHolder defender, PopupHelper popupHelper)
        {
            Attack attack = new Attack(attacker, defender);

            attack.Elements.Add(Element.Ice, 1.0);
            attack.Elements.Add(Element.Bludgeon, 1.0);
            attack.PopupHelper = popupHelper;
            return(attack);
        }
Esempio n. 27
0
        protected override Attack Attack(Creature attacker, IEffectHolder defender)
        {
            Attack attack = new Attack(attacker, defender);

            attack.ExtraEffects.Add(new AttackPhysical());
            attack.Elements.Add(Element.Slash, 0.5);
            attack.Elements.Add(Element.TheEnd, 1.0);
            return(attack);
        }
Esempio n. 28
0
        private Attack ExplosionAttack(Creature attacker, IEffectHolder defender)
        {
            Attack attack = new Attack(attacker, defender);

            attack.Fault = this;
            attack.SetParameters(attacker.GetStat(Stat.HP) * 0.5, 0, 1);
            attack.Elements.Add(Element, 1.0);
            return(attack);
        }
Esempio n. 29
0
        public Attack ExplosionAttack(Creature attacker, IEffectHolder defender)
        {
            Attack attack = new Attack(attacker, defender);

            attack.SetParameters(400, 0, 1);
            attack.Elements.Add(Element.Thunder, 0.5);
            attack.Elements.Add(Element.Fire, 0.5);
            return(attack);
        }
Esempio n. 30
0
        private Attack SparkAttack(Creature attacker, IEffectHolder defender, double force)
        {
            Attack attack = new Attack(attacker, defender);

            attack.SetParameters(force, 0, 1);
            attack.Elements.Add(Element.Thunder, 1.0);
            attack.ReactionLevel = 1;
            return(attack);
        }