Beispiel #1
0
    public void UpdateAbilities()
    {
        if (!GameManager.Instance.isInBattle)
        {
            ClearTemporaryBonuses(false);
        }

        //update aura/buffs first
        foreach (AbilitySlot abilitySlot in abilitySlotList)
        {
            if (abilitySlot.Ability == null)
            {
                continue;
            }

            ActorAbility actorAbility = abilitySlot.Ability;
            if (actorAbility.abilityBase.abilityType == AbilityType.SELF_BUFF || actorAbility.abilityBase.abilityType == AbilityType.AURA)
            {
                actorAbility.UpdateAbilityLevel(GetAbilityLevel(actorAbility.abilityBase));
                actorAbility.UpdateAbilityStats(this);
            }
        }

        //update other abilities so they are updated with buff effects
        foreach (AbilitySlot abilitySlot in abilitySlotList)
        {
            if (abilitySlot.Ability == null)
            {
                continue;
            }

            ActorAbility actorAbility = abilitySlot.Ability;

            if (actorAbility.abilityBase.abilityType == AbilityType.SELF_BUFF || actorAbility.abilityBase.abilityType == AbilityType.AURA)
            {
                continue;
            }

            actorAbility.UpdateAbilityLevel(GetAbilityLevel(actorAbility.abilityBase));
            actorAbility.UpdateAbilityStats(this);
        }
    }
Beispiel #2
0
    public void SetBase(EnemyBase enemyBase, RarityType rarity, int level)
    {
        enemyRarity = rarity;
        Data.SetBase(enemyBase, rarity, level, this);

        targetingPriority = enemyBase.targetingPriority;

        float sizeScaling = enemyBase.sizeScaling;
        MaterialPropertyBlock propertyBlock;

        if (isBoss)
        {
            if (!enemyBase.isBoss)
            {
                Data.AddStatBonus(BonusType.MAX_HEALTH, GroupType.NO_GROUP, ModifyType.MULTIPLY, 1100);
                Data.AddStatBonus(BonusType.GLOBAL_DAMAGE, GroupType.NO_GROUP, ModifyType.MULTIPLY, 70);
                Data.AddStatBonus(BonusType.AFFLICTED_STATUS_THRESHOLD, GroupType.NO_GROUP, ModifyType.MULTIPLY, -50f);
                sizeScaling *= 1.28f;
            }
            propertyBlock = ResourceManager.Instance.bossMaterialBlock;
        }
        else if (rarity == RarityType.RARE)
        {
            Data.AddStatBonus(BonusType.MAX_HEALTH, GroupType.NO_GROUP, ModifyType.MULTIPLY, 500);
            Data.AddStatBonus(BonusType.GLOBAL_DAMAGE, GroupType.NO_GROUP, ModifyType.MULTIPLY, 30);
            Data.AddStatBonus(BonusType.AFFLICTED_STATUS_THRESHOLD, GroupType.NO_GROUP, ModifyType.MULTIPLY, -50f);
            this.transform.localScale = new Vector3(1.14f * enemyBase.sizeScaling, 1.14f * enemyBase.sizeScaling);
            sizeScaling *= 1.14f;
            AddRandomStatAffixes(3);
            propertyBlock = ResourceManager.Instance.rareMaterialBlock;
        }
        else if (rarity == RarityType.UNCOMMON)
        {
            Data.AddStatBonus(BonusType.MAX_HEALTH, GroupType.NO_GROUP, ModifyType.MULTIPLY, 200);
            Data.AddStatBonus(BonusType.GLOBAL_DAMAGE, GroupType.NO_GROUP, ModifyType.MULTIPLY, 10);
            Data.AddStatBonus(BonusType.AFFLICTED_STATUS_THRESHOLD, GroupType.NO_GROUP, ModifyType.MULTIPLY, -25f);
            AddRandomStatAffixes(1);
            propertyBlock = ResourceManager.Instance.uncommonMaterialBlock;
        }
        else
        {
            propertyBlock = ResourceManager.Instance.normalMaterialBlock;
        }

        propertyBlock.SetTexture("_MainTex", GetComponent <SpriteRenderer>().sprite.texture);
        //GetComponent<Renderer>().SetPropertyBlock(propertyBlock);
        GetComponent <SpriteRenderer>().SetPropertyBlock(propertyBlock);

        this.transform.localScale = Vector3.one * sizeScaling;

        instancedAbilitiesList.Clear();
        foreach (EnemyBase.EnemyAbilityBase ability in enemyBase.abilitiesList)
        {
            AbilityBase abilityBase = ResourceManager.Instance.GetAbilityBase(ability.abilityName);

            if (Data.BaseEnemyData.enemyType == EnemyType.NON_ATTACKER && abilityBase.abilityType != AbilityType.AURA && abilityBase.abilityType != AbilityType.SELF_BUFF)
            {
                continue;
            }

            int layer;
            if (abilityBase.targetType == AbilityTargetType.ENEMY)
            {
                layer = LayerMask.NameToLayer("AllyDetect");
            }
            else if (abilityBase.targetType == AbilityTargetType.ALLY)
            {
                layer = LayerMask.NameToLayer("EnemyDetect");
            }
            else
            {
                layer = LayerMask.NameToLayer("BothDetect");
            }

            ActorAbility actorAbility = new ActorAbility(abilityBase, layer);
            actorAbility.SetDamageAndSpeedModifier((ability.damageMultiplier - 1f) * 100f, (ability.attackPerSecMultiplier - 1f) * 100f);
            actorAbility.UpdateAbilityLevel(Data.GetAbilityLevel());
            actorAbility.SetAbilityOwner(this);
            AddAbilityToList(actorAbility);
            Data.abilities.Add(actorAbility);
            actorAbility.UpdateAbilityStats(Data);
            actorAbility.StartFiring(this);
            actorAbility.abilityCollider.transform.localScale = Vector3.one / sizeScaling;
        }
    }