Example #1
0
    /// <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);
    }
Example #2
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 (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);
         }
     }
 }
Example #3
0
 private void BounceOnDownHit(DamageDealer dealer, DamageTaker taker)
 {
     if (((MeleeDamageDealer)dealer).HitDirection == Vector2.down)
     {
         this.controller.Velocity.y = Mathf.Sqrt(2f * this.meleeBounceHeight * this.gravity);
     }
 }
Example #4
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);
         }
     }
 }
Example #5
0
	void Awake()
	{
		damageTaker = GetComponent<DamageTaker>();
		enemyMotion = GetComponent<EnemyMotion>();
		enemySprite = enemyMotion.GetComponent<SpriteRenderer>();
		enemyTransform = enemyMotion.spriteTransform;
	}
Example #6
0
    /// <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);
    }
Example #7
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);
                }
            }
        }
    }
Example #8
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);
    }
 void Start()
 {
     rb                = GetComponent <Rigidbody>();
     horizMovement     = GetComponent <PlayerHorizMovement>();
     playerDamageTaker = GetComponent <DamageTaker>();
     battleController  = GameObject.Find("*BATTLE CONTROLLER*").GetComponent <BattleController>();
     storedPosition    = transform.position;
 }
Example #10
0
 //显示治疗效果
 private void ShowHealVisual(DamageTaker target)
 {
     if (healVisual != null)
     {
         GameObject effect = Instantiate(healVisual, target.transform);
         Destroy(effect, healVisualDuration);
     }
 }
 public void DamageTo(DamageTaker tar)
 {
     tar.TakeDamage(this, damage, tr.position);
     if (OnGiveDamage != null)
     {
         OnGiveDamage(tar, damage, tr.position);
     }
 }
Example #12
0
    //穿过物体造成伤害
    void OnTriggerEnter2D(Collider2D other)
    {
        DamageTaker damageTaker = other.GetComponent <DamageTaker>();

        if (damageTaker != null)
        {
            damageTaker.TakeDamage(damage);
        }
    }
Example #13
0
    public void OnDamage(DamageDealer dealer, DamageTaker taker)
    {
        float newHealth = this.numHearts - dealer.Damage;

        while (this.numHearts > 0 && this.numHearts > newHealth)
        {
            this.hearts[--this.numHearts].enabled = false;
        }
    }
Example #14
0
    private void OnTriggerEnter2D(Collider2D collision)
    {
        DamageTaker damageTaker = collision.gameObject.GetComponent <DamageTaker>();

        if (damageTaker)
        {
            damageTaker.TakeDamage(damage);
        }
    }
Example #15
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);
        }
    }
Example #16
0
 private void Flash(DamageDealer dealer, DamageTaker taker)
 {
     this.material.SetFloat(flashAmountId, this.maxFlashAmount);
     this.material.SetColor(flashColorId, this.flashColor);
     if (this.useInvulnerabilityDuration)
     {
         this.duration = this.taker.InvulnerabilityDuration;
     }
     this.StartCoroutine(this.UpdateFlash());
 }
Example #17
0
    private void OnDeath(DamageDealer dealer, DamageTaker taker)
    {
        this.sprite.enabled = false;
        this.GetComponent <FlashOnHit>().enabled = false;
        this.gameObject.SetActive(false);
        GameObject death = Instantiate(this.deathPrefab);

        death.transform.position = this.transform.position;
        GameManager.LevelManager.StartCoroutine(this.Death(death));
    }
Example #18
0
 private void OnDamageHit(DamageDealer dealer, DamageTaker taker)
 {
     if (this.state == State.Fired)
     {
         this.ChangeState(State.HitDamageTaker);
         // TODO: do something (e.g. animation) between hit and destroy states.
         // For now, immediately change to destroy state:
         this.ChangeState(State.ToBeDestroyed);
     }
 }
Example #19
0
    public virtual void OnGiveDamage(DamageTaker taker, float damage, Vector2 dealPoint)
    {
        base.OnGiveDamage(taker, damage, dealPoint);
        UnitComponent target = taker.GetComponent <UnitComponent>();

        if (target)
        {
            target.AddVelocity("hitted", (target.GetPosition() - (Vector2)tr.position).normalized * 3f, 0.5f, true);
        }
        OnDie();
    }
Example #20
0
    public override void OnInit()
    {
        base.OnInit();
        GetComponentInChildren <DamageDealer>().Init(OnGiveDamage);
        DamageTaker damageTaker = GetComponentInChildren <DamageTaker>();

        if (damageTaker)
        {
            damageTaker.Init(OnTakeDamage);
        }
    }
Example #21
0
    public void OnPlayerDie(DamageDealer dealer, DamageTaker taker)
    {
        this.DisableInput();
        this.sprite.enabled = false;
        this.GetComponent <FlashOnHit>().enabled = false;
        this.SafeDisable();
        //this.gameObject.SetActive(false);
        GameObject death = Instantiate(this.vfx.deathPrefab);

        death.transform.position = this.transform.position;
        GameManager.LevelManager.StartCoroutine(this.Death(death));
    }
Example #22
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);
         }
     }
 }
Example #23
0
        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);
                }
            }
        }
Example #24
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);
         }
     }
 }
Example #25
0
 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);
     }
 }
Example #26
0
    public void OnEnemyDie(DamageDealer dealer, DamageTaker taker)
    {
        // TODO: Play death before return
        EnemyTracker tracker = taker.GetComponent <EnemyTracker>();

        this.roomDifficulty -= tracker.difficulty;
        this.enemyCount--;
        GenericItem death = this.silhouettes.Pop(tracker.transform.position);

        death.instance.GetComponent <SpriteRenderer>().sprite = tracker.GetComponent <SpriteRenderer>().sprite;
        this.level.StartCoroutine(DoDeath(death));
        tracker.Return();
    }
Example #27
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);
         }
     }
 }
Example #28
0
    void DoDamage(GameObject other)
    {
        DamageTaker damaged = other.GetComponent <DamageTaker>();

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

        if (destroyOnImpact)
        {
            Destroy(gameObject);
        }
    }
    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);
        }
    }
Example #30
0
 //获取治疗对象
 void OnTriggerStay2D(Collider2D other)
 {
     if (IsTagAllowed(other.tag) == true)
     {
         DamageTaker target = other.gameObject.GetComponent <DamageTaker>();
         if (target != null)
         {
             //判断对象是否需要治疗
             if (target.currentHitPoint < target.hitPoint)
             {
                 TryToHeal(target);
             }
         }
     }
 }
Example #31
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");
         }
     }
 }
    //private LineRenderer lineRenderer;
    // Use this for initialization
    void Start()
    {
        //lineRenderer = GetComponent<LineRenderer> ();
        //lineRenderer.SetVertexCount (laserNumSegments);
        //lineRenderer.SetPosition (0, Vector3.zero);

        GameObject newGun = (GameObject)Instantiate (gun, Vector3.zero, Quaternion.identity);
        newGun.transform.parent = transform;
        newGun.transform.localPosition = Vector3.zero;
        newGun.transform.localRotation = Quaternion.identity;
        laserGun = newGun.GetComponent<LaserGun> ();

        damageTaker = GetComponent<DamageTaker> ();
        cameraTracker = Camera.main.GetComponent<CameraTracker> ();
        gameRules = Camera.main.GetComponent<GameRules> ();
    }
Example #33
0
	void Awake()
	{
		damageDealer = GetComponent<DamageDealer>();
		damageTaker = GetComponent<DamageTaker>();
		enemyAnimator = GetComponent<EnemyAnimator>();
	}
Example #34
0
	void Awake()
	{
		damageDealer = GetComponent<DamageDealer>();
		damageTaker = GetComponent<DamageTaker>();
		audioSource = GetComponent<AudioSource>();
	}
Example #35
0
	void SuspendMotion(DamageTaker dmgTaker)
	{
		SuspendMotion();
	}
Example #36
0
	void StartFuse(DamageTaker dmgTaker)
	{
		StartFuse();
	}
Example #37
0
	// Use this for initialization
	public override void Start () {
		base.Start ();
		gameObjectRenderer = GetComponent<Renderer> ();
		damageTaker = GetComponent<DamageTaker> ();
	}