Ejemplo n.º 1
0
        public SpellElement ChooseElement()
        {
            List <SpellElement> elements = new List <SpellElement>();

            if (modifiers.fieryModifier)
            {
                elements.Add(SpellElement.Fiery);
            }
            if (modifiers.frostModifier)
            {
                elements.Add(SpellElement.Frost);
            }
            if (modifiers.holyModifier)
            {
                elements.Add(SpellElement.Holy);
            }
            if (modifiers.crimsonModifier)
            {
                elements.Add(SpellElement.Crimson);
            }
            if (modifiers.corruptModifier)
            {
                elements.Add(SpellElement.Corrupt);
            }
            if (elements.Count > 0)
            {
                return(Element = elements[Main.rand.Next(elements.Count)]);
            }
            return(SpellElement.None);
        }
    //get rock paper scissor damage multiplier
    public static float spellResistanceMultiplier(GameObject player, SpellElement spellElem)
    {
        Transform defensiveSpell;
        SpellProperties properties;
        DefensiveSpellBehaviour dSpellBehave;

        if(defensiveSpell = player.transform.Find("defensiveSpell")){
            properties = defensiveSpell.GetComponent<SpellProperties>();
            dSpellBehave = defensiveSpell.GetComponent<DefensiveSpellBehaviour>();
            switch(properties.spellElem){
                case SpellElement.fire:
                    if(spellElem == SpellElement.earth)
                        return dSpellBehave.strongAgainstMultiplier;
                    else if(spellElem == SpellElement.water)
                        return dSpellBehave.weakAgainstMultiplier;
                    else
                        return 1.0f;
                case SpellElement.water:
                    if(spellElem == SpellElement.fire)
                        return dSpellBehave.strongAgainstMultiplier;
                    else if(spellElem == SpellElement.earth)
                        return dSpellBehave.weakAgainstMultiplier;
                    else
                        return 1.0f;
                case SpellElement.earth:
                    if(spellElem == SpellElement.water)
                        return dSpellBehave.strongAgainstMultiplier;
                    else if(spellElem == SpellElement.fire)
                        return dSpellBehave.weakAgainstMultiplier;
                    else
                        return 1.0f;
            }
        }
        return 1.0f;
    }
Ejemplo n.º 3
0
        public void RunSpell(Player player, Vector2 position, Item item, Vector2 originalVelocity, float shootSpeed, int damage, float knockBack)
        {
            int totalImportantRuns = getTotalEffectImportantRuns();

            if (totalImportantRuns >= 1)
            {
                for (int i = 0; i <= totalImportantRuns; i++)
                {
                    DoEffect(player, position, item, originalVelocity, shootSpeed, damage, knockBack, i, totalImportantRuns);
                }
            }
            else
            {
                DoEffect(player, position, item, originalVelocity, shootSpeed, damage, knockBack, 0, 0);
            }
            if (Style == SpellStyle.Default || Style == SpellStyle.HoldRelease)
            {
                player.statMana -= getTotalManaCost(player);
            }
            else
            {
                player.statMana -= getTotalManaCost(player, getChargePercentage());
            }
            cooldown       = getTotalCooldown();
            chargeProgress = 0;
            Element        = SpellElement.None;
        }
Ejemplo n.º 4
0
 public void TakeDamage(int baseAmount, SpellElement damageType)
 {
     damageable.TakeDamage(ComputeDamage(baseAmount, damageType));
     if (damageType == SpellElement.Ice)
     {
         remainingSlowSeconds = 5f;
     }
 }
Ejemplo n.º 5
0
 public Spell(SpellType type, SpellElement element, SpellEffect[] effects, String name, String description)
 {
     this.type = type;
     this.element = element;
     this.effects = effects;
     this.name = name;
     this.description = description;
 }
Ejemplo n.º 6
0
 public ISpell Get(SpellElement element)
 {
     if (spells.ContainsKey(element))
     {
         return(spells[element]);
     }
     return(noneSpell);
 }
Ejemplo n.º 7
0
 public Basic_spell(byte cost, string name, string _description, SpellTypes type, SpellElement elem)
 {
     spellCost   = cost;
     spellName   = name;
     description = _description;
     spellType   = type;
     spellElem   = elem;
 }
Ejemplo n.º 8
0
    public virtual void OnSetType(SpellVisuals spellVisuals)
    {
        SpellElement t = BattleManager.GetResourcesManager().typeElement;

        SpellVisualsProperties type = spellVisuals.GetProperty(t);

        type.textUI.text = typeName;
    }
Ejemplo n.º 9
0
    public void TakeDamage(int baseAmount, SpellElement damageType)
    {
        int damage = ComputeDamage(baseAmount, damageType);

        if (damage > 0)
        {
            GameManager.S.Audio.AttackShield(audioSource);
            damageable.TakeDamage(damage);
        }
    }
Ejemplo n.º 10
0
    //Separation between takedamage and compute damage important because on taking/receiving damage,
    //computing the damage is only one of many things that could happen.
    private int ComputeDamage(int baseAmount, SpellElement damageType)
    {
        int amount = baseAmount;

        if (affinity != SpellElement.None && damageType == affinity)
        {
            amount = Mathf.RoundToInt(amount * resistanceMultiplier);
        }
        return(amount);
    }
    //multiply damage if offensive spell type is defensive spell type
    public static float spellDamageMultiplier(GameObject player, SpellElement spellElem)
    {
        Transform defensiveSpell;
        SpellProperties properties;
        DefensiveSpellBehaviour dSpellBehave;

        if(defensiveSpell = player.transform.Find("defensiveSpell")){
            properties = defensiveSpell.GetComponent<SpellProperties>();
            if(properties.spellElem == spellElem){
                dSpellBehave = defensiveSpell.GetComponent<DefensiveSpellBehaviour>();
                return dSpellBehave.damageMultiplier;
            }
        }
        return 1.0f;
    }
Ejemplo n.º 12
0
        private string GetElementalResist(SpellElement elementalResist)
        {
            if (elementalResist == SpellElement.None)
            {
                return("");
            }
            if (elementalResist == SpellElement.All)
            {
                return("All");
            }

            var list = new List <SpellElement>();

            if (elementalResist.HasFlag(SpellElement.Earth))
            {
                list.Add(SpellElement.Earth);
            }
            if (elementalResist.HasFlag(SpellElement.Lightning))
            {
                list.Add(SpellElement.Lightning);
            }
            if (elementalResist.HasFlag(SpellElement.Ice))
            {
                list.Add(SpellElement.Ice);
            }
            if (elementalResist.HasFlag(SpellElement.Fire))
            {
                list.Add(SpellElement.Fire);
            }
            if (elementalResist.HasFlag(SpellElement.Death))
            {
                list.Add(SpellElement.Death);
            }
            if (elementalResist.HasFlag(SpellElement.Time))
            {
                list.Add(SpellElement.Time);
            }
            if (elementalResist.HasFlag(SpellElement.Poison))
            {
                list.Add(SpellElement.Poison);
            }
            if (elementalResist.HasFlag(SpellElement.Status))
            {
                list.Add(SpellElement.Status);
            }

            return(string.Join(", ", list));
        }
Ejemplo n.º 13
0
    public SpellVisualsProperties GetProperty(SpellElement e)
    {
        SpellVisualsProperties result = null;

        for (int i = 0; i < properties.Count; i++)
        {
            if (properties[i].element == e)
            {
                result = properties[i];
                break;
            }
        }


        return(result);
    }
Ejemplo n.º 14
0
    private Spell HeavySpell(bool left)
    {
        Spell spell = null;

        SpellElement element = left ? elementLeft : elementRight;

        switch (element)
        {
        case SpellElement.FIRE:
            if (timers[1] <= 0)
            {
                spell     = Instantiate(heavyFire);
                timers[1] = heavyFire.cooldown;
            }
            break;

        case SpellElement.WATER:
            if (timers[4] <= 0)
            {
                spell     = Instantiate(heavyWater);
                timers[4] = heavyWater.cooldown;
            }
            break;

        case SpellElement.EARTH:
            if (timers[7] <= 0)
            {
                spell     = Instantiate(heavyEarth);
                timers[7] = heavyEarth.cooldown;
            }
            break;

        case SpellElement.AIR:
            if (timers[10] <= 0)
            {
                spell      = Instantiate(heavyAir);
                timers[10] = heavyAir.cooldown;
            }
            break;
        }

        return(spell);
    }
Ejemplo n.º 15
0
    //Functions for dealing with the spell types
    private Spell QuickSpell(bool left)
    {
        Spell spell = null;

        SpellElement element = left ? elementLeft : elementRight;

        switch (element)
        {
        case SpellElement.FIRE:
            if (timers[0] <= 0)
            {
                spell     = Instantiate(quickFire);
                timers[0] = quickFire.cooldown;
            }
            break;

        case SpellElement.WATER:
            if (timers[3] <= 0)
            {
                spell     = Instantiate(quickWater);
                timers[3] = quickWater.cooldown;
            }
            break;

        case SpellElement.EARTH:
            if (timers[6] <= 0)
            {
                spell     = Instantiate(quickEarth);
                timers[6] = quickEarth.cooldown;
            }
            break;

        case SpellElement.AIR:
            if (timers[9] <= 0)
            {
                spell     = Instantiate(quickAir);
                timers[9] = quickAir.cooldown;
            }
            break;
        }

        return(spell);
    }
Ejemplo n.º 16
0
    private Spell SpecialSpell(bool left)
    {
        Spell spell = null;

        SpellElement element = left ? elementLeft : elementRight;

        switch (element)
        {
        case SpellElement.FIRE:
            if (timers[2] <= 0)
            {
                spell     = Instantiate(specialFire);
                timers[2] = specialFire.cooldown;
            }
            break;

        case SpellElement.WATER:
            if (timers[5] <= 0)
            {
                spell     = Instantiate(specialWater);
                timers[5] = specialWater.cooldown;
            }
            break;

        case SpellElement.EARTH:
            if (timers[8] <= 0)
            {
                spell     = Instantiate(specialEarth);
                timers[8] = specialEarth.cooldown;
            }
            break;

        case SpellElement.AIR:
            if (timers[11] <= 0)
            {
                spell      = Instantiate(specialAir);
                timers[11] = specialAir.cooldown;
            }
            break;
        }

        return(spell);
    }
        public IEnumerable <(Spell Id, MagicSpell Info)> FindSpells(SpellRoutine routine, SpellTargeting targeting,
                                                                    SpellElement element     = SpellElement.Any,
                                                                    SpellStatus status       = SpellStatus.Any,
                                                                    OOBSpellRoutine oobSpell = OOBSpellRoutine.None
                                                                    )
        {
            IEnumerable <MagicSpell> foundSpells;

            if (routine == SpellRoutine.Life)
            {
                foundSpells = SpellInfos.Where(s =>
                                               (s.routine == SpellRoutine.CureAilment) &&
                                               (s.targeting == targeting || targeting == SpellTargeting.Any) &&
                                               (s.effect == (byte)SpellStatus.Death));
            }
            else if (routine == SpellRoutine.Smoke)
            {
                foundSpells = SpellInfos.Where(s =>
                                               (s.routine == SpellRoutine.CureAilment) &&
                                               (s.targeting == targeting || targeting == SpellTargeting.Any) &&
                                               (s.effect == 0));
            }
            else if (routine == SpellRoutine.InflictStatus || routine == SpellRoutine.PowerWord || routine == SpellRoutine.CureAilment)
            {
                foundSpells = SpellInfos.Where(s =>
                                               (s.routine == routine) &&
                                               (s.targeting == targeting || targeting == SpellTargeting.Any) &&
                                               (s.elem == element || element == SpellElement.Any) &&
                                               (s.effect == (byte)status || status == SpellStatus.Any));
            }
            else
            {
                foundSpells = SpellInfos.Where(s =>
                                               (s.routine == routine) &&
                                               (s.targeting == targeting || targeting == SpellTargeting.Any) &&
                                               (s.elem == element || element == SpellElement.Any) &&
                                               (s.oobSpellRoutine == oobSpell || oobSpell == OOBSpellRoutine.None));
            }

            return(foundSpells.Select(s => ((Spell)Convert.ToByte((int)Spell.CURE + s.Index), s)).ToList());
        }
Ejemplo n.º 18
0
 private void Start()
 {
     //Randomly pick a spell type affinity and set forcefield color accordingly
     if (affinity == SpellElement.None)
     {
         int i = Random.Range(0, 2);
         if (i == 0)
         {
             affinity = SpellElement.Fire;
             Color col = Color.red;
             col.a = 0.7f;
             GetComponent <Renderer>().material.SetColor("_MainColor", col);
         }
         else if (i == 1)
         {
             affinity = SpellElement.Ice;
             Color col = Color.blue;
             col.a = 0.7f;
             GetComponent <Renderer>().material.SetColor("_MainColor", col);
         }
     }
 }
Ejemplo n.º 19
0
    public void TakeDamage(int baseAmount, SpellElement damageType)
    {
        int damage = ComputeDamage(baseAmount, damageType);

        //Have Obelisk's light fade as it loses health
        float H;
        float S;
        float V = colorIntensity;
        float not_used;

        Color col = transform.GetChild(0).GetChild(1).GetComponent <Renderer>().material.GetColor("_EmissionColor");

        Color.RGBToHSV(col, out H, out S, out not_used);
        Color newCol = Color.HSVToRGB(H, S, V);

        transform.GetChild(0).transform.GetChild(1).GetComponent <Renderer>().material.SetColor("_EmissionColor", newCol);


        if (damage > 0)
        {
            GameManager.S.Audio.AttackObelisk(audioSource);
            damageable.TakeDamage(damage);
        }
    }
Ejemplo n.º 20
0
        public static Color SetupColor(Color defaultColor, SpellElement Element)
        {
            switch (Element)
            {
            case (SpellElement.None):
            {
                return(defaultColor);
            }

            case (SpellElement.Fiery):
            {
                return(new Color(255, 142, 47));
            }

            case (SpellElement.Frost):
            {
                return(new Color(21, 144, 222));
            }

            case (SpellElement.Holy):
            {
                return(new Color(236, 83, 179));
            }

            case (SpellElement.Corrupt):
            {
                return(new Color(181, 255, 56));
            }

            case (SpellElement.Crimson):
            {
                return(new Color(255, 47, 47));
            }
            }
            return(defaultColor);
        }
Ejemplo n.º 21
0
        public static int GetDust(int value, int defaultDust, SpellElement Element)
        {
            switch (Element)
            {
            case (SpellElement.None):
            {
                return(defaultDust);
            }

            case (SpellElement.Fiery):
            {
                return(fireDusts[value]);
            }

            case (SpellElement.Frost):
            {
                return(frostDusts[value]);
            }

            case (SpellElement.Holy):
            {
                return(holyDusts[value]);
            }

            case (SpellElement.Corrupt):
            {
                return(corruptDusts[value]);
            }

            case (SpellElement.Crimson):
            {
                return(crimsonDusts[value]);
            }
            }
            return(0);
        }
Ejemplo n.º 22
0
    // set the element type of the spell
    //and update the material used by the renderer
    void setSpellProperties(Dictionary<int, object> spellParams)
    {
        parent = (Transform)spellParams[(int)SpellParameter.parent];
        spellType = (SpellType)spellParams[(int)SpellParameter.type];
        spellElem = (SpellElement)spellParams[(int)SpellParameter.element];

        if(spellType == SpellType.offensive){
            spellDamage *= (float)spellParams[(int)SpellParameter.damageMultiplier];

            gameObject.name = "offensiveSpell";
            oSpellBehave.enabled = true;
            renderer.material = spellMat[(int)spellElem];
            trail.renderer.material = trailMat[(int)spellElem];
            Destroy(dSpellBehave);
        //Defensice spell
        }else{
            gameObject.name = "defensiveSpell";
            dSpellBehave.enabled = true;
            renderer.enabled = false;
            transform.parent = parent;
            Destroy(oSpellBehave);
            Destroy(trail);
        }
    }
Ejemplo n.º 23
0
    private void SelectSpell(ISpellGesture gesture)
    {
        //Extract element and tier from the gesture
        SpellElement?elem = gesture.Element;
        SpellTier?   tier = gesture.Tier;

        //If elem/tier exist, store their value
        SpellElement = elem.GetValueOrDefault(SpellElement);
        SpellTier    = tier.GetValueOrDefault(SpellTier);

        //If an element and tier have been selected, transition to the Adjust state
        if (SpellElement != SpellElement.None && SpellTier != SpellTier.None)
        {
            foreach (Spell spellPrefab in spellPrefabs)
            {
                if (spellPrefab.Element == SpellElement && spellPrefab.Tier == SpellTier)
                {
                    CurrentSpell = Instantiate(spellPrefab, gesture.AttachmentPoint);
                    State        = SpellCastingState.Adjust;
                    AdjustSpell(gesture);
                    break;
                }
            }

            if (CurrentSpell == null)
            {
                Debug.LogWarningFormat(
                    "No spell prefab found for (Element, Tier) = ({0}, {1})",
                    SpellElement.ToString(), SpellTier.ToString()
                    );

                SpellElement = SpellElement.None;
                SpellTier    = SpellTier.None;
            }
        }
    }
 private void AddElement(Armor a, SpellElement e, List <SpellElement> elements)
 {
     a.ElementalResist |= (byte)e;
     elements.Remove(e);
     allElements.Remove(e);
 }
Ejemplo n.º 25
0
 public List <SpellConfig> GetUnlockedSpellsByElement(SpellElement element)
 {
     return(SpellCategories.FirstOrDefault(c => c.Element == element)?.Spells.Where(d => d.IsUnlocked).ToList());
 }
Ejemplo n.º 26
0
    //set spell properties based off passed gesture
    void handleGesture(GestureEnum gest)
    {
        if(gest == GestureEnum.V_DOWN){
            elem = SpellElement.earth;
            type = SpellType.invalid;
        }else if(gest == GestureEnum.V_UP){
            elem = SpellElement.fire;
            type = SpellType.invalid;
        }else if(gest == GestureEnum.SQUARE){
            elem = SpellElement.water;
            type = SpellType.invalid;
        }else if(gest == GestureEnum.HORIZONTAL_LINE)
            type = SpellType.offensive;
        else if(gest == GestureEnum.VERTICAL_LINE)
            type = SpellType.defensive;

        if(elem != SpellElement.invalid){
            ui.SetEquippedSpell(elem);
            if(type != SpellType.invalid)
                castSpell();
        }
    }
Ejemplo n.º 27
0
 //spell data
 void clearSpellData()
 {
     elem = SpellElement.invalid;
     type = SpellType.invalid;
 }
Ejemplo n.º 28
0
    private int ComputeDamage(int baseAmount, SpellElement damageType)
    {
        int amount = baseAmount;

        return(amount);
    }
Ejemplo n.º 29
0
 public void TakeDamage(int baseAmount, SpellElement damageType)
 {
     damageable.TakeDamage(ComputeDamage(baseAmount, damageType));
 }
Ejemplo n.º 30
0
 public SpellEffectInstance(SpellEffect spellEffect)
 {
     this.spellEffect = spellEffect;
     Element          = spellEffect.ChooseElement();
 }
Ejemplo n.º 31
0
        public static void SpellEffectHit(NPC target, Player player, int damage, float potency, SpellElement Element)
        {
            switch (Element)
            {
            case (SpellElement.None):
            {
                break;
            }

            case (SpellElement.Fiery):
            {
                target.AddBuff(BuffID.OnFire, (int)(10 * damage * potency));
                break;
            }

            case (SpellElement.Frost):
            {
                target.AddBuff(BuffID.Frostburn, (int)(10 * damage * potency));
                break;
            }

            case (SpellElement.Holy):
            {
                int mana = (int)(damage / 10 * potency);
                player.ManaEffect(mana);
                player.statMana += mana;
                target.AddBuff(BuffID.Confused, (int)(10 * damage * potency));
                break;
            }

            case (SpellElement.Corrupt):
            {
                target.AddBuff(BuffID.CursedInferno, (int)(20 * damage * potency));
                break;
            }

            case (SpellElement.Crimson):
            {
                target.AddBuff(BuffID.Ichor, (int)(20 * damage * potency));
                break;
            }
            }
        }
Ejemplo n.º 32
0
 public void TakeDamage(int baseDamage, SpellElement damageType)
 {
     onHit.Invoke();
 }
Ejemplo n.º 33
0
 public void Add(SpellElement element, ISpell spell)
 {
     spells.Add(element, spell);
 }
Ejemplo n.º 34
0
 public List <SpellConfig> GetByElement(SpellElement element)
 {
     return(SpellCategories.FirstOrDefault(c => c.Element == element)?.Spells);
 }