public void Initialize(HeroData data) { Data = data; NextMovementNode = 1; deathCount = 0; isBeingRecalled = false; recallCoroutine = null; movementNodes = new List <Vector3>(); targetingPriority = PrimaryTargetingType.FIRST; if (data.GetAbilityFromSlot(0) != null) { ActorAbility firstAbility = data.GetAbilityFromSlot(0); AddAbilityToList(firstAbility); } if (data.GetAbilityFromSlot(1) != null) { ActorAbility secondAbility = data.GetAbilityFromSlot(1); AddAbilityToList(secondAbility); } if (data.GetAbilityFromSlot(2) != null) { ActorAbility soulAbility = data.GetAbilityFromSlot(2); if (soulAbility.abilityBase.isSoulAbility) { soulAbility.SetAbilityOwner(this); soulAbilities.Add(soulAbility); soulAbility.currentSoulCooldownTimer = 0; } } }
public void AddAbilityToList(ActorAbility ability) { instancedAbilitiesList.Add(ability); ability.SetAbilityOwner(this); GameObject newObject = Instantiate(ResourceManager.Instance.AbilityContainerPrefab, transform); AbilityColliderContainer abilityContainer = newObject.GetComponent <AbilityColliderContainer>(); abilityContainer.ability = ability; abilityContainer.parentActor = this; abilityContainer.transform.position = transform.position; ability.abilityCollider = abilityContainer; var collider = newObject.AddComponent <CircleCollider2D>(); collider.radius = ability.TargetRange; abilityContainer.abilityCollider = collider; collider.isTrigger = true; collider.gameObject.layer = ability.targetLayer; }
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; } }