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