public bool Hit() { bool successfullKick = false; bool hitSomething = false; List <Collider2D> hitColliders = new List <Collider2D>(); GameObject attachedObject = GameData.playerGrapplingHandler.attachedObject; GameData.playerGrapplingHandler.ReleaseHook(); if (currentKick.HitTest(attachedObject, ref hitColliders) && (attachedObject.CompareTag("Enemy") || attachedObject.CompareTag("Ring"))) { if (attachedObject.CompareTag("Enemy")) { EnemyHandler enemy = attachedObject.GetComponent <EnemyHandler>(); successfullKick = !enemy.TestCounter(); if (successfullKick) { if (!currentKick.isAOE) { currentKick.DealDamageToEnemy(enemy); } else { foreach (Collider2D collider in hitColliders) { if (collider.CompareTag("Enemy")) { currentKick.DealDamageToEnemy(collider.GetComponent <EnemyHandler>()); } } } if (Vector2.Distance(transform.position, attachedObject.transform.position) < currentKick.perfectTimingMaximumDistance) { currentKick.ApplyPerfectTimingEffect(enemy); } if (reAimMode) { StartCoroutine(ReAim()); } else { StartCoroutine(Repropulsion()); } } } else { hitSomething = true; foreach (Collider2D collider in hitColliders) { if (collider.CompareTag("Enemy")) { currentKick.DealDamageToEnemy(collider.GetComponent <EnemyHandler>()); } } } } isKicking = false; if (!hitSomething) { GameData.playerMovement.Propel(GetComponent <Rigidbody2D>().velocity *GameData.playerGrapplingHandler.velocityKeptReleasingHook / 100, true, true); } else { StartCoroutine(ReAim()); } return(successfullKick); }