示例#1
0
    public void IncreaseAttack(Unit target, float percent, int rounds)
    {
        GameObject     playerObj    = GameObject.FindGameObjectWithTag("PlayerUnit").gameObject;
        Player         player       = playerObj.GetComponent <Player>();
        IncreaseAttack statusEffect = (IncreaseAttack)player.statusEffects.Find(x => x.type == StatusEffectType.IncreaseAttackSingleUse);

        if (statusEffect != null)
        {
            statusEffect.rounds    = rounds;
            statusEffect.magnitude = percent;
        }
        else
        {
            statusEffect           = new IncreaseAttack();
            statusEffect.rounds    = rounds;
            statusEffect.magnitude = percent;
            player.statusEffects.Add(statusEffect);
        }
        GameObject textObj = Instantiate(playerBattleEndText, playerObj.transform.position + new Vector3(0, 2f, 0), Quaternion.identity);

        textObj.GetComponent <BattleEndText>().SetText("+ Attack");
        textObj.GetComponent <BattleEndText>().SetColor(Color.green);
        if (nextTurnExecuting == false)
        {
            nextTurnExecuting = true;
            Invoke("NextTurn", 1.5f);
        }
    }
示例#2
0
    public void InflictDamage(Unit target, Unit caster, float damage)
    {
        //Applies status effects
        if (target.statusEffects.Count > 0)
        {
            StatusEffect statusEffect;

            statusEffect = target.statusEffects.Find(x => x.type == StatusEffectType.ReduceDamage);
            if (statusEffect != null)
            {
                ReduceDamage reduceDamage = (ReduceDamage)statusEffect;
                damage -= damage * reduceDamage.magnitude;
            }
        }

        if (caster != null)
        {
            if (caster.statusEffects.Count > 0)
            {
                StatusEffect statusEffect = caster.statusEffects.Find(x => x.type == StatusEffectType.IncreaseAttackSingleUse);
                if (statusEffect != null)
                {
                    IncreaseAttack increaseAttack = (IncreaseAttack)statusEffect;
                    damage = (float)damage * (1f + increaseAttack.magnitude);
                    caster.statusEffects.Remove(statusEffect);
                }
            }
        }

        target.CurrentHealth -= (int)damage;
        var pos   = target.gameObject.transform.position;
        var o     = Instantiate(damageText, pos + new Vector3(0.25f, target.gameObject.GetComponent <SpriteRenderer>().bounds.size.y / 2, 0), Quaternion.identity);
        var dText = o.GetComponent <DamageText>();

        dText.SetText((int)damage);
        if (turn == Turn.Player)
        {
            dText.destroyed.AddListener(CheckUnitStatuses);
        }
        else
        {
            dText.destroyed.AddListener(CheckUnitStatuses);
        }
    }
示例#3
0
    public void InflictDamageToAllUnits(UnitType unitType, Unit caster, float damage)
    {
        if (caster != null)
        {
            if (caster.statusEffects.Count > 0)
            {
                StatusEffect statusEffect = caster.statusEffects.Find(x => x.type == StatusEffectType.IncreaseAttackSingleUse);
                if (statusEffect != null)
                {
                    IncreaseAttack increaseAttack = (IncreaseAttack)statusEffect;
                    damage = (float)damage * (1f + increaseAttack.magnitude);
                    caster.statusEffects.Remove(statusEffect);
                }
            }
        }

        if (unitType == UnitType.Enemy)
        {
            bool eventSet = false;
            foreach (GameObject enemy in enemies)
            {
                Unit target = (Unit)enemy.GetComponent <Enemy>();

                target.CurrentHealth -= (int)damage;
                var pos   = target.gameObject.transform.position;
                var o     = Instantiate(damageText, pos + new Vector3(0.25f, target.gameObject.GetComponent <SpriteRenderer>().bounds.size.y / 2, 0), Quaternion.identity);
                var dText = o.GetComponent <DamageText>();
                dText.SetText((int)damage);
                if (!eventSet)
                {
                    dText.destroyed.AddListener(CheckUnitStatuses);
                }
                eventSet = true;
            }
        }
    }