private void LateUpdate()
        {
            this.IsAttacking = false;

            if (this.comboSystem != null)
            {
                int phase = this.comboSystem.GetCurrentPhase();
                this.IsAttacking = phase >= 0f;

                if (this.blade != null && phase == 1)
                {
                    GameObject[] hits = this.blade.CaptureHits();
                    for (int i = 0; i < hits.Length; ++i)
                    {
                        int hitInstanceID = hits[i].GetInstanceID();

                        if (this.targetsEvaluated.Contains(hitInstanceID))
                        {
                            continue;
                        }
                        if (hits[i].transform.IsChildOf(this.transform))
                        {
                            continue;
                        }

                        HitResult hitResult = HitResult.ReceiveDamage;

                        CharacterMelee targetMelee = hits[i].GetComponent <CharacterMelee>();
                        MeleeClip      attack      = this.comboSystem.GetCurrentClip();

                        if (targetMelee != null)
                        {
                            hitResult = targetMelee.OnReceiveAttack(this, attack);
                        }

                        IgniterMeleeOnReceiveAttack[] triggers = (
                            hits[i].GetComponentsInChildren <IgniterMeleeOnReceiveAttack>()
                            );

                        bool hitSuccess = triggers.Length > 0;
                        if (hitSuccess)
                        {
                            for (int j = 0; j < triggers.Length; ++j)
                            {
                                triggers[j].OnReceiveAttack(this, attack, hitResult);
                            }
                        }

                        if (hitSuccess || targetMelee != null)
                        {
                            Vector3 position = this.blade.GetImpactPosition();
                            attack.ExecuteActionsOnHit(position, hits[i].gameObject);
                        }

                        if (attack.pushForce > float.Epsilon)
                        {
                            Rigidbody[] rigidbodies = hits[i].GetComponents <Rigidbody>();
                            for (int j = 0; j < rigidbodies.Length; ++j)
                            {
                                Vector3 direction = rigidbodies[j].transform.position - transform.position;
                                rigidbodies[j].AddForce(direction.normalized * attack.pushForce, ForceMode.Impulse);
                            }
                        }

                        this.targetsEvaluated.Add(hitInstanceID);
                    }
                }
            }
        }