Exemplo n.º 1
0
    public void OnAbilityHit(int ID, bool displayImpactEffect, bool destroyAbility)
    {
        m_sceneAbilities.RemoveAll(item => item = null);
        SpellData spell = m_sceneAbilities.Find(item => item.InstantiateID() == ID);

        if (spell != null)
        {
            if (destroyAbility)
            {
                m_sceneAbilities.Remove(spell);
                if (displayImpactEffect)
                {
                    spell.AbilityImpactEffect();
                }
                Destroy(spell.gameObject);
            }
            else
            {
                spell.AbilityImpactEffect();
            }
        }
    }
Exemplo n.º 2
0
    void FixedUpdate()
    {
        if (isFired)
        {
            timeSinceStart += Time.deltaTime;
            if (timeSinceStart > spellData.travelDuration())
            {
                spellData.owner.SendAbilityHit(spellData.InstantiateID(), true, true);
                spellData.AbilityImpactEffect();
                Destroy(this.gameObject);
            }

            float timePassed = (float)(PhotonNetwork.time - m_creationTime);
            transform.position = m_startPosition + spellDir * spellData.speed() * timePassed;

            if (rotateTowardsDirection)
            {
                RotateTowardsDir();
            }
        }
    }
Exemplo n.º 3
0
    public void Impact(Collider other)
    {
        if (other.CompareTag("Ability"))
        {
            if (spellData.ownerID() == other.GetComponent <SpellData>().ownerID())
            {
                return;
            }
            spellData.owner.SendAbilityHit(spellData.InstantiateID(), true, true);
            spellData.AbilityImpactEffect();
            Destroy(this.gameObject);
        }
        else if (other.CompareTag("Environmental"))
        {
            spellData.owner.SendAbilityHit(spellData.InstantiateID(), true, true);
            spellData.AbilityImpactEffect();
            Destroy(this.gameObject);
        }
        else if (other.CompareTag("Player"))
        {
            CharacterManager_NET player = other.GetComponent <CharacterManager_NET>();
            if (player.m_PhotonView.isMine)
            {
                if (player.playerID != spellData.ownerID())
                {
                    switch (damageType)
                    {
                    case DamageType.DOT:
                        player.playerHealth().TakeDamageOverTime(amountOfTicks, spellData.damage(), timeBetweenTicks, player, spellData.ownerID());
                        break;

                    case DamageType.Instant:
                        player.playerHealth().TakeDamage(spellData.damage(), spellData.ownerID(), player, transform, spellData.knockbackForce());
                        break;

                    case DamageType.None:
                        break;
                    }

                    if (canPush)
                    {
                        Push(other.GetComponent <Rigidbody>(), spellData.knockbackForce(), false);
                    }

                    if (canFreeze)
                    {
                        other.GetComponent <PlayerHealth_NET>().Freeze(spellData.freezeDuration());
                    }

                    if (canSlow)
                    {
                        other.GetComponent <PlayerMovement>().slowPlayerMovementSpeed(spellData.slowMovementSpeed(), spellData.slowDuration());
                    }

                    if (canLifeSteal)
                    {
                        spellData.owner.GetComponent <PlayerHealth_NET>().AddLife(spellData.damage() * spellData.lifeStealAmount());
                    }

                    if (canCurse)
                    {
                        player.playerHealth().Curse(spellData.curseDuration(), spellData.curseDmgAdjuster());
                    }
                    if (canSwapPos)
                    {
                        Vector3 hitPlayerPos = other.transform.position;
                        spellData.owner.charMananager.SetPlayerPosition(spellData.owner.transform.position, player.playerID);
                        spellData.owner.charMananager.SetPlayerPosition(hitPlayerPos, spellData.ownerID());
                    }

                    spellData.owner.SendAbilityHit(spellData.InstantiateID(), true, true);
                    if (destroyOnImpact)
                    {
                        Destroy(this.gameObject);
                    }

                    spellData.AbilityImpactEffect();
                }
                else
                {
                    return;
                }
            }
        }
    }