Пример #1
0
    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;
            }
        }
    }
Пример #2
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;
    }
Пример #3
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;
        }
    }