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); } }
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; } }