Beispiel #1
0
    public void AddModifier(Modifier m)
    {
        modifiers.Add(m);
        m.Apply();

        manaText.text   = currentMana.ToString();
        attackText.text = currentAttack.ToString();
        healthText.text = currentHealth.ToString();
    }
Beispiel #2
0
 public void AddPassive(ScriptableModifier passiveModifier)
 {
     if (!activePassiveModifiers.ContainsKey(passiveModifier))
     {
         Modifier passive = new Modifier(passiveModifier, characterBase);
         passive.IsPassive = true;
         passive.Apply(characterBase);
         activePassiveModifiers.Add(passiveModifier, passive);
     }
 }
Beispiel #3
0
        public string ProcessString(string String)
        {
            if (Settings.CacheOutput && RecentOutput.Contains(String))
            {
                return(null);
            }

            var Matched = MatchString(String);

            if (Matched == null)
            {
                Log.Trace($"Input: {String}");
                return(null);
            }

            TriggerFlags(Matched?.OriginalFlags);
            TriggerFlags(Matched?.TranslationFlags);

            //Execute Reload Modifiers
            string Reloaded = Matched?.TranslationLine;

            string Prefix = String.GetStartTrimmed();
            string Sufix  = String.GetEndTrimmed();

            if (!Reloaded.StartsWith(Prefix))
            {
                Reloaded = Prefix + Reloaded;
            }

            if (!Reloaded.EndsWith(Sufix))
            {
                Reloaded += Sufix;
            }

            foreach (var Modifier in ReloadModifiers)
            {
                Reloaded = Modifier.Apply(Reloaded, Matched?.OriginalLine);
            }

            Log.Debug($"Reload from:\r\n{Matched?.OriginalLine}\r\nTo:\r\n{Reloaded}");

            if (Settings.CacheOutput)
            {
                if (RecentOutput.Count == 100)
                {
                    RecentOutput.Dequeue();
                }
                RecentOutput.Enqueue(Reloaded);
            }

            return(Reloaded);
        }
Beispiel #4
0
    public void ApplyActionModifiers(CharacterBase characterBase, GameObject targetObject, Vector3 hitPoint,
                                     Vector3 hitDirection, Vector3 hitSurfaceNormal)
    {
        if (actionModifiers.Count == 0)
        {
            return;
        }

        CharacterBase targetcharacter = actionModifiers[0].Target == ModifierTarget.TARGET ? targetObject.GetComponent <CharacterBase>() : characterBase;

        if (targetcharacter && targetcharacter != characterBase)
        {
            affectedCharacters.Add(targetcharacter);
        }

        Modifier mod = new Modifier(actionModifiers[0].Modifier, characterBase);

        mod.Hit(hitPoint, hitDirection, hitSurfaceNormal, targetObject);
        if (targetcharacter != null)
        {
            mod.Apply(targetcharacter);

            if (mod.ActivePeriod <= 0.0f)
            {
                appliedInstantModifiers.Add(Tuple.Create(mod, targetcharacter));
            }
        }


        foreach (var character in mod.AffectedCharacters)
        {
            affectedCharacters.Add(character);
        }

        for (var modifierIndex = 1; modifierIndex < actionModifiers.Count; modifierIndex++)
        {
            var abilityModifier = actionModifiers[modifierIndex];
            int count           = affectedCharacters.Count;
            for (int i = 0; i < count; i++)
            {
                Modifier modifier = applyModifier(abilityModifier, characterBase, affectedCharacters.ElementAt(i));
                modifier.Hit(hitPoint, hitDirection, hitSurfaceNormal, affectedCharacters.ElementAt(i).gameObject);
                foreach (var character in modifier.AffectedCharacters)
                {
                    affectedCharacters.Add(character);
                }
            }
        }
    }
    public void ApplyModifiers(CharacterBase character, Item item, bool passive = false)
    {
        //add defence modifier
        //override the modifiers to add the attack bonus
        var defenseModifier = ScriptableObject.CreateInstance <ScriptableStatModifier>();

        defenseModifier.Type = StatType.DEFENSE;

        switch (item)
        {
        case WeaponItem weapon:
            defenseModifier.Amount = weapon.defense;
            break;

        case ArmourItem armour:
            defenseModifier.Amount = armour.defense;

            //add attack modifier from the armour
            var attackModifier = ScriptableObject.CreateInstance <ScriptableStatModifier>();
            attackModifier.Type   = StatType.ATTACK;
            attackModifier.Amount = armour.attack;
            var attackMod = new Modifier(attackModifier, character);
            attackMod.IsPassive = passive;
            attackMod.Apply(character);
            appliedModifiers.Add(attackMod);
            break;

        default:
            break;
        }
        var deffenceMod = new Modifier(defenseModifier, character);

        deffenceMod.IsPassive = passive;
        deffenceMod.Apply(character);
        appliedModifiers.Add(deffenceMod);

        foreach (var modifier in Item.modifiers)
        {
            var mod = new Modifier(modifier, character);
            mod.IsPassive = passive;
            mod.Apply(character);
            appliedModifiers.Add(mod);
        }
    }
Beispiel #6
0
    private Modifier applyModifier(AbilityModifier abilityModifier, CharacterBase ownerCharacter,
                                   CharacterBase targetCharacter)
    {
        if (abilityModifier.Modifier == null)
        {
            return(null);
        }

        //create a new instance of the modifier
        Modifier modifier = new Modifier(abilityModifier.Modifier, ownerCharacter);

        modifier.Apply(targetCharacter);


        if (abilityModifier.Modifier.ActivePeriod <= 0.0f)
        {
            appliedInstantModifiers.Add(Tuple.Create(modifier, targetCharacter));
        }

        return(modifier);
    }