/// <summary> /// When enemy is damaged keep hiding! /// </summary> /// <param name="sender">Sender.</param> /// <param name="args">Arguments.</param> virtual protected void EnemyDamaged(object sender, DamageInfoEventArgs args) { if (!isCharging && useChargeState && hideStateTimer > 0) { if (chargeMovement != null) { chargeMovement.SetDirection(args.DamageInfo.Direction); } isCharging = true; hideStateTimer = -1.0f; // Turn on hurtbox if (characterHitBox != null && args.DamageInfo.DamageCauser is Character) { characterHitBox.Character = (Character)args.DamageInfo.DamageCauser; characterHitBox.GetComponent <Collider2D>().enabled = true; } } else { hideStateTimer = hideStateTime; isCharging = false; // Turn off hurt box if (characterHitBox != null) { characterHitBox.GetComponent <Collider2D>().enabled = false; } } }
/// <summary> /// Init this enemy AI. /// </summary> override public void Init(Enemy enemy) { base.Init(enemy); // Listen to damage events and if we get them hide enemy.Damaged += EnemyDamaged; enemy.Collided += EnemyDamaged; // If we need it try and find a charge movement if (useChargeState) { EnemyMovement_Distributor distributor = enemy.GetComponentInChildren <EnemyMovement_Distributor>(); if (distributor != null) { foreach (EnemyStateToMovement estm in distributor.statesToMovements) { if (estm.state == EnemyState.CHARGING) { chargeMovement = estm.movement; break; } } } else { chargeMovement = enemy.GetComponentInChildren <EnemyMovement_Charge>(); } } // Try to find a cahracter hurt box so we can collect coins and damage other enemies characterHitBox = GetComponentInChildren <CharacterHitBox>(); if (characterHitBox != null) { // Don't hit ourselves EnemyHurtBox myHurtBox = enemy.GetComponentInChildren <EnemyHurtBox>(); if (myHurtBox != null) { Physics2D.IgnoreCollision(characterHitBox.GetComponent <Collider2D>(), myHurtBox.GetComponent <Collider2D>()); } // Init hit box characterHitBox.Init(new DamageInfo(1, DamageType.PHYSICAL, Vector2.zero)); } }