コード例 #1
0
    void OnTriggerEnter(Collider other)
    {
        /////////////////DEALING DAMAGE TO AN ENEMY/////////////////////////////////////////////////////////////////////////////////////

        if (other.gameObject.CompareTag("Enemy"))
        {
            GameObject enemy = other.transform.parent.gameObject;
            while (enemy.GetComponent <IsEnemyCentral>() == null)
            {
                enemy = enemy.transform.parent.gameObject;
            }

            if (GameModeHandler.gamemode == GameModeHandler.GameMode.Battle)
            {
                float       damage      = GetDamageToEnemy();
                DamageTaker damageTaker = enemy.GetComponent <DamageTaker>();
                damageTaker.TakeDamage(damage);
            }
            else
            {
                BattleInfo battleInfo = enemy.GetComponent <BattleInfo>();
                battleController.InitiateBattle(enemy, battleInfo);
            }
        }

        /////////////////DEALING DAMAGE TO A PUNCHING BAG/////////////////////////////////////////////////////////////////////////////////////

        if (other.gameObject.CompareTag("PunchingBag"))
        {
            GameObject enemy = other.transform.parent.gameObject;
            while (enemy.GetComponent <DamageTaker>() == null)
            {
                enemy = enemy.transform.parent.gameObject;
            }                                                                                                //todo change how a punching bag takes damage?

            float       damage      = GetDamageToEnemy();
            DamageTaker damageTaker = enemy.GetComponent <DamageTaker>();
            damageTaker.TakeDamage(damage);
        }

        /////////////////TAKING DAMAGE FROM A HAZARD (TRIGGER) /////////////////////////////////////////////////////////////////////////////////////

        HazardData hazardInfo = other.gameObject.GetComponent <HazardData>(); //GETTING HIT BY A HAZARD

        if (hazardInfo != null && hazardInfo.enabled)
        {
            playerDamageTaker.TakeDamage(hazardInfo.damageToPlayer);
        }
    }
コード例 #2
0
    private IEnumerator FireCoroutine(Transform target)
    {
        if (target != null)
        {
            if (anim != null && anim.runtimeAnimatorController != null)
            {
                foreach (AnimationClip clip in anim.runtimeAnimatorController.animationClips)
                {
                    if (clip.name == "Attack")
                    {
                        anim.SetTrigger("attack");
                        break;
                    }
                }
            }

            yield return(new WaitForSeconds(fireDelay));

            if (target != null)
            {
                DamageTaker damageTaker = target.GetComponent <DamageTaker>();
                if (damageTaker != null)
                {
                    damageTaker.TakeDamage(damage);
                }

                if (sfx != null && AudioManager.instance != null)
                {
                    AudioManager.instance.PlayAttack(sfx);
                }
            }
        }
    }
コード例 #3
0
 /// <summary>
 /// Raises the destroy event.
 /// </summary>
 void OnDestroy()
 {
     // If scene is in progress
     if (isQuitting == false)
     {
         // Find all colliders in specified radius
         Collider2D[] cols = Physics2D.OverlapCircleAll(transform.position, radius);
         foreach (Collider2D col in cols)
         {
             // If collision allowed by scene
             if (LevelManager.IsCollisionValid(gameObject.tag, col.gameObject.tag) == true)
             {
                 // If target can receive damage
                 DamageTaker damageTaker = col.gameObject.GetComponent <DamageTaker>();
                 if (damageTaker != null)
                 {
                     damageTaker.TakeDamage(damage);
                 }
             }
         }
         if (explosion != null)
         {
             // Create explosion visual effect
             Destroy(Instantiate <GameObject>(explosion, transform.position, transform.rotation), explosionDuration);
         }
     }
 }
コード例 #4
0
ファイル: AoeDamage.cs プロジェクト: Valeench10/Jaknados
 /// <summary>
 /// Raises the destroy event.
 /// </summary>
 void OnDestroy()
 {
     // If scene is in progress
     if (isQuitting == false)
     {
         // Find all colliders in specified radius
         Collider2D[] cols = Physics2D.OverlapCircleAll(transform.position, radius);
         foreach (Collider2D col in cols)
         {
             if (IsTagAllowed(col.tag) == true)
             {
                 // If target can receive damage
                 DamageTaker damageTaker = col.gameObject.GetComponent <DamageTaker>();
                 if (damageTaker != null)
                 {
                     // Target takes damage equal bullet damage * AOE Damage Rate
                     damageTaker.TakeDamage((int)(Mathf.Ceil(aoeDamageRate * (float)bullet.GetDamage())));
                 }
             }
         }
         if (explosion != null)
         {
             // Create explosion visual effect
             Destroy(Instantiate <GameObject>(explosion, transform.position, transform.rotation), explosionDuration);
         }
         if (sfx != null && AudioManager.instance != null)
         {
             // Play sfx
             AudioManager.instance.PlaySound(sfx);
         }
     }
 }
コード例 #5
0
ファイル: HealEffect.cs プロジェクト: Valeench10/Jaknados
    /// <summary>
    /// Start this instance.
    /// </summary>
    void Start()
    {
        DefendersSpawner defendersSpawner = tower.GetComponent <DefendersSpawner>();

        if (defendersSpawner != null)
        {
            // Get all active defenders
            foreach (GameObject defender in defendersSpawner.defPoint.GetDefenderList())
            {
                DamageTaker damageTaker = defender.GetComponent <DamageTaker>();
                // Heal it
                damageTaker.TakeDamage(-damageTaker.hitpoints);
                if (healFxPrefab != null)
                {
                    // Create heal visual effect
                    Destroy(Instantiate(healFxPrefab, defender.transform), fxDuration);
                }
            }
        }
        else
        {
            Debug.Log("This tower can not use heal skills");
        }
        Destroy(gameObject);
    }
コード例 #6
0
ファイル: AoeHeal.cs プロジェクト: Valeench10/Jaknados
    /// <summary>
    /// Heal all targets in radius.
    /// </summary>
    private bool Heal()
    {
        bool res = false;

        // Searching for units
        Collider2D[] cols = Physics2D.OverlapCircleAll(transform.position, radius.radius * transform.localScale.x);
        foreach (Collider2D col in cols)
        {
            if (IsTagAllowed(col.tag) == true)
            {
                // If it has Damege Taker component
                DamageTaker target = col.gameObject.GetComponent <DamageTaker>();
                if (target != null)
                {
                    // If target injured
                    if (target.currentHitpoints < target.hitpoints)
                    {
                        res = true;
                        target.TakeDamage(-healAmount);
                        if (healVisualPrefab != null)
                        {
                            // Create visual healing effect on target
                            GameObject effect = Instantiate(healVisualPrefab, target.transform);
                            // And destroy it after specified timeout
                            Destroy(effect, healVisualDuration);
                        }
                    }
                }
            }
        }
        return(res);
    }
コード例 #7
0
    /// <summary>
    /// Make damage specified by delays and amount.
    /// </summary>
    /// <returns>The coroutine.</returns>
    private IEnumerator DamageCoroutine()
    {
        foreach (float delay in delaysBeforeDamage)
        {
            yield return(new WaitForSeconds(delay));

            // Search for targets
            Collider2D[] hits = Physics2D.OverlapCircleAll(transform.position, radius);
            foreach (Collider2D col in hits)
            {
                if (col.CompareTag("Enemy") == true || col.CompareTag("FlyingEnemy") == true)
                {
                    DamageTaker damageTaker = col.GetComponent <DamageTaker>();
                    if (damageTaker != null)
                    {
                        damageTaker.TakeDamage(damage);
                    }
                }
            }
            if (sfx != null && AudioManager.instance != null)
            {
                // Play sound effect
                AudioManager.instance.PlaySound(sfx);
            }
        }

        Destroy(gameObject);
    }
コード例 #8
0
 public void DamageTo(DamageTaker tar)
 {
     tar.TakeDamage(this, damage, tr.position);
     if (OnGiveDamage != null)
     {
         OnGiveDamage(tar, damage, tr.position);
     }
 }
コード例 #9
0
    //穿过物体造成伤害
    void OnTriggerEnter2D(Collider2D other)
    {
        DamageTaker damageTaker = other.GetComponent <DamageTaker>();

        if (damageTaker != null)
        {
            damageTaker.TakeDamage(damage);
        }
    }
コード例 #10
0
    private void OnTriggerEnter2D(Collider2D collision)
    {
        DamageTaker damageTaker = collision.gameObject.GetComponent <DamageTaker>();

        if (damageTaker)
        {
            damageTaker.TakeDamage(damage);
        }
    }
コード例 #11
0
    /// <summary>
    /// Damage targets on trigger enter
    /// </summary>
    /// <param name="other">Other.</param>
    void OnTriggerEnter2D(Collider2D other)
    {
        // If target can receive damage
        DamageTaker damageTaker = other.GetComponent <DamageTaker> ();

        if (damageTaker != null)
        {
            damageTaker.TakeDamage(damage);
        }
    }
コード例 #12
0
 /// <summary>
 /// Damage targets on trigger enter
 /// </summary>
 /// <param name="other">Other.</param>
 void OnTriggerEnter2D(Collider2D other)
 {
     if (IsTagAllowed(other.tag) == true)
     {
         // If target can receive damage
         DamageTaker damageTaker = other.GetComponent <DamageTaker> ();
         if (damageTaker != null)
         {
             damageTaker.TakeDamage(damage);
         }
     }
 }
コード例 #13
0
ファイル: Ab1.cs プロジェクト: baptisteCable/LightBringer
        private void ApplyAllDamageAB()
        {
            Collider closestCol = null;
            float    minDist    = float.PositiveInfinity;
            float    dist;

            int id = Random.Range(int.MinValue, int.MaxValue);

            // find the closest collider (and the extraDamage ones)
            foreach (KeyValuePair <Collider, Vector3> pair in encounteredCols)
            {
                if (pair.Key != null)
                {
                    // Extra damage: deal damage
                    DamageTaker dt = pair.Key.GetComponent <DamageTaker>();
                    if (dt != null && dt.extraDmg)
                    {
                        ApplyDamageAB(pair.Key, pair.Value, id);
                    }
                    else
                    {
                        dist = (pair.Key.ClosestPoint(pair.Value) - pair.Value).magnitude;
                        if (dist < minDist)
                        {
                            minDist    = dist;
                            closestCol = pair.Key;
                        }
                    }
                }
            }

            if (closestCol != null)
            {
                DamageTaker dt = closestCol.GetComponent <DamageTaker>();
                if (dt.bouncing)
                {
                    // Stun character
                    playerMotor.psm.ApplyCrowdControl(
                        new CrowdControl(CrowdControlType.Stun, DamageType.Self, DamageElement.None),
                        STUN_DURATION
                        );

                    // effect
                    dt.TakeDamage(new Damage(DAMAGE_AB, DamageType.Melee, DamageElement.Light, playerMotor.transform.position),
                                  playerMotor, playerMotor.transform.position, id);
                }
                else
                {
                    ApplyDamageAB(closestCol, encounteredCols[closestCol], id);
                }
            }
        }
コード例 #14
0
 //尝试治愈
 private void TryToHeal(DamageTaker target)
 {
     if (coolDownCounter >= coolDown)
     {
         coolDownCounter = 0f;
         target.TakeDamage(-healAmount);
         if (healVisual != null)
         {
             GameObject effect = Instantiate(healVisual, target.transform);
             Destroy(effect, healVisualDuration);
         }
     }
 }
コード例 #15
0
ファイル: Puff.cs プロジェクト: b0npls/ErikIsAGoodTutorial
 void OnTriggerEnter2D(Collider2D collid)
 {
     if (collid.gameObject.layer == LayerMask.NameToLayer("ground"))
     {
         Destroy(gameObject);
     }
     else if (collid.gameObject.tag != gameObject.tag)
     {
         DamageTaker dt = collid.GetComponentInParent <DamageTaker>();
         dt.TakeDamage(2, 50);
         Destroy(gameObject);
     }
 }
コード例 #16
0
 /// <summary>
 /// Damage targets on trigger enter
 /// </summary>
 /// <param name="other">Other.</param>
 void OnTriggerEnter2D(Collider2D other)
 {
     // If collision allowed by scene
     if (LevelManager.IsCollisionValid(gameObject.tag, other.gameObject.tag) == true)
     {
         // If target can receive damage
         DamageTaker damageTaker = other.GetComponent <DamageTaker> ();
         if (damageTaker != null)
         {
             damageTaker.TakeDamage(damage);
         }
     }
 }
コード例 #17
0
    void DoDamage(GameObject other)
    {
        DamageTaker damaged = other.GetComponent <DamageTaker>();

        if (damaged && damaged.alignment != alignment)
        {
            damaged.TakeDamage(damage, gameObject);
        }

        if (destroyOnImpact)
        {
            Destroy(gameObject);
        }
    }
コード例 #18
0
 private void Hack(Transform target)
 {
     if (target != null)
     {
         DamageTaker damageTaker = target.GetComponent <DamageTaker>();
         if (damageTaker != null)
         {
             damageTaker.TakeDamage(damage);
         }
         if (_animator != null)
         {
             _animator.SetTrigger("attackMelee");
         }
     }
 }
コード例 #19
0
    private void OnTriggerStay2D(Collider2D collision)
    {
        DamageTaker damageTaker = collision.gameObject.GetComponent <DamageTaker>();

        if (damageTaker)
        {
            currentDamageFrame++;

            if (currentDamageFrame >= touchDamageFrame)
            {
                damageTaker.TakeDamage(damage);
                currentDamageFrame = 0;
            }
        }
    }
コード例 #20
0
ファイル: Healer.cs プロジェクト: Alexchandriyaa/TowerDefense
 /// <summary>
 /// Heal specified target if cooldown expired.
 /// </summary>
 /// <param name="target">Target.</param>
 private void TryToHeal(DamageTaker target)
 {
     // If cooldown expired
     if (cooldownCounter >= cooldown)
     {
         cooldownCounter = 0f;
         target.TakeDamage(-healAmount);
         if (healVisualPrefab != null)
         {
             // Create visual healing effect on target
             GameObject effect = Instantiate(healVisualPrefab, target.transform);
             // And destroy it after specified timeout
             Destroy(effect, healVisualDuration);
         }
     }
 }
コード例 #21
0
 protected virtual void PerformHit(DamageTaker objHit)
 {
     if (objHit)
     {
         this.OnDamageHit.Invoke(this, objHit);
         objHit.TakeDamage(this, this.ignoreInvulnerability);
         if (this.disableDamageAfterHit)
         {
             this.CanDealDamage = false;
         }
     }
     else
     {
         this.OnNoDamageHit.Invoke(this);
     }
 }
コード例 #22
0
 /// <summary>
 /// Make melee attack
 /// </summary>
 /// <param name="target">Target.</param>
 private void Smash(Transform target)
 {
     if (target != null)
     {
         // If target can receive damage
         DamageTaker damageTaker = target.GetComponent <DamageTaker>();
         if (damageTaker != null)
         {
             damageTaker.TakeDamage(damage);
         }
         if (anim != null)
         {
             anim.Play("AttackMelee");
         }
     }
 }
コード例 #23
0
    void OnTriggerEnter2D(Collider2D collid)
    {
        //Debug.Log ("giverAttack - collid.gameObjectTag: " + collid.gameObject.tag + ", myTag: " + gameObject.tag);

        if (collid.gameObject.tag != gameObject.tag)
        {
            //Debug.Log("giver's attack is doing damage to : "+collid.name);
            DamageTaker d = collid.GetComponentInChildren <DamageTaker> ();
            //Debug.Log ("giverAttack: is doing damage to - d " + d.ToString ());
            if (d != null)
            {
                d.TakeDamage(5f, 100);
            }
            else
            {
                Debug.Log("Giver's damagee is null");
            }
        }
    }
コード例 #24
0
    void OnTriggerEnter2D(Collider2D collid)
    {
        //Debug.Log ("treeAttack - collid: " + collid.ToString());
        //Debug.Log ("treeAttack - collid.gameObjectTag: " + collid.gameObject.tag + ", myTag: " + gameObject.tag);
        if (collid.gameObject.tag != gameObject.tag)
        {
            DamageTaker d = collid.GetComponentInChildren <DamageTaker> ();
            //Debug.Log("tree's attack is doing damage to : "+d.ToString());

            if (d != null)
            {
                d.TakeDamage(5f, 50);
            }
            else
            {
                Debug.Log("oops treeAttack's damagee is null");
            }
        }
    }
コード例 #25
0
 void OnTriggerEnter2D(Collider2D collid)
 {
     if (collid.gameObject.layer == LayerMask.NameToLayer("ground"))
     {
         Debug.Log("grounded");
     }
     else if (collid.gameObject.tag != gameObject.tag)
     {
         DamageTaker d = collid.GetComponentInParent <DamageTaker>();
         if (d != null)
         {
             d.TakeDamage(1f, 50);
         }
         else
         {
             Debug.Log("What the heck");
         }
     }
 }
コード例 #26
0
    /// <summary>
    /// Update this instance.
    /// </summary>
    void FixedUpdate()
    {
        counter += Time.fixedDeltaTime;
        // Add acceleration
        speed += Time.fixedDeltaTime * speedUpOverTime;
        if (target != null)
        {
            aimPoint = target.position;
        }
        // Calculate distance from firepoint to aim
        Vector2 originDistance = aimPoint - originPoint;
        // Calculate remaining distance
        Vector2 distanceToAim = aimPoint - (Vector2)myVirtualPosition;

        // Move towards aim
        myVirtualPosition = Vector2.Lerp(originPoint, aimPoint, counter * speed / originDistance.magnitude);
        // Add ballistic offset to trajectory
        transform.position = AddBallisticOffset(originDistance.magnitude, distanceToAim.magnitude);
        // Rotate bullet towards trajectory
        LookAtDirection2D((Vector2)transform.position - myPreviousPosition);
        myPreviousPosition = transform.position;
        sprite.enabled     = true;
        // Close enough to hit
        if (distanceToAim.magnitude <= hitDistance)
        {
            if (target != null)
            {
                // If bullet must deal damage to single target
                if (aoeDamageOnly == false)
                {
                    // If target can receive damage
                    DamageTaker damageTaker = target.GetComponent <DamageTaker>();
                    if (damageTaker != null)
                    {
                        damageTaker.TakeDamage(damage);
                    }
                }
            }
            // Destroy bullet
            Destroy(gameObject);
        }
    }
コード例 #27
0
    private IEnumerator DamageCoroutine()
    {
        foreach (float delay in delayDamage)
        {
            yield return(new WaitForSeconds(delay));

            Collider2D[] hits = Physics2D.OverlapCircleAll(transform.position, radius);
            foreach (Collider2D hit in hits)
            {
                if (hit.CompareTag("Enemy") == true)
                {
                    DamageTaker damageTaker = hit.GetComponent <DamageTaker>();
                    if (damageTaker != null)
                    {
                        damageTaker.TakeDamage(damage);
                    }
                }
            }
        }
        Destroy(gameObject);
    }
コード例 #28
0
ファイル: AOEHealer.cs プロジェクト: JesusYou/TowerDefense
    //治愈半径内全部目标
    private bool AOEHeal()
    {
        bool res = false;

        Collider2D[] cols = Physics2D.OverlapCircleAll(transform.position, healRadius);
        foreach (Collider2D col in cols)
        {
            if (IsTagAllowed(col.tag) == true)
            {
                //判断对象是否需要治疗
                DamageTaker target = col.gameObject.GetComponent <DamageTaker>();
                if (target.currentHitPoint < target.hitPoint)
                {
                    res = true;
                    //进行治愈
                    target.TakeDamage(-healAmount);
                    ShowHealVisual(target);
                }
            }
        }
        return(res);
    }
コード例 #29
0
    void FixedUpdate()
    {
        counter += Time.fixedDeltaTime;
        speed   += Time.fixedDeltaTime * acceleration;
        if (target != null)
        {
            targetPosition = target.position;
        }
        //记录初始距离
        Vector2 targetDistance = targetPosition - firePosition;
        //计算剩余距离
        Vector2 remainingDistance = targetPosition - (Vector2)currentPosition;

        //向目标移动
        currentPosition = Vector2.Lerp(firePosition, targetPosition, counter * speed / targetDistance.magnitude);
        //添加偏移
        transform.position = AddBallisticOffset(targetDistance.magnitude, remainingDistance.magnitude);
        //子弹旋转
        DirectionRotation((Vector2)transform.position - previousPosition);
        previousPosition = transform.position;
        sprite.enabled   = true;
        if (remainingDistance.magnitude <= hitDistance)
        {
            if (target != null)
            {
                if (onlyAOEDamage == false)
                {
                    DamageTaker damageTaker = target.GetComponent <DamageTaker>();
                    if (damageTaker != null)
                    {
                        damageTaker.TakeDamage(damage);
                    }
                }
            }
            Destroy(gameObject);
        }
    }
コード例 #30
0
    private IEnumerator FireCoroutine(Transform target)
    {
        if (target != null)
        {
            // If unit has animator
            if (anim != null && anim.runtimeAnimatorController != null)
            {
                // Search for clip
                foreach (AnimationClip clip in anim.runtimeAnimatorController.animationClips)
                {
                    if (clip.name == "Attack")
                    {
                        // Play animation
                        anim.SetTrigger("attack");
                        break;
                    }
                }
            }
            // Delay to synchronize with animation
            yield return(new WaitForSeconds(fireDelay));

            if (target != null)
            {
                // If target can receive damage
                DamageTaker damageTaker = target.GetComponent <DamageTaker>();
                if (damageTaker != null)
                {
                    damageTaker.TakeDamage(damage);
                }
                // Play sound effect
                if (sfx != null && AudioManager.instance != null)
                {
                    AudioManager.instance.PlayAttack(sfx);
                }
            }
        }
    }