void doEmit()
    {
        releasePower = chargedPower;
        chargedPower = 0;

        if (releasePower > 0)
        {
            //setUp speedUtil
            if (explosionCube == null)
            {
                float total_distance = (releasePower * 60F * 0.8F);
                myMove.setTarget(releasePower, total_distance, chargeDuration);
            }
            else
            {
                //if explosionCube is here, the speedUnit will no need
                if (weapon != null)
                {
                    foreach (WeaponController wp in weapon)
                    {
                        wp.Action_attack_rotate(360F * 3, 1.5F);
                    }
                }
            }
        }
    }
    public void AIActionMoveTo(Vector3 n_point)
    {
        KnockBackHelper comp_kb = GetComponent <KnockBackHelper>();

        if (comp_kb != null)
        {
            SpeedUnit n_speedUnit = new SpeedUnit();
            n_speedUnit.setTarget(getMaxMoveSpeed(), attack_radius / 2, getSpeedUpDuration());

            comp_kb.doMoveToPositionWithUpdate(n_speedUnit, n_point);
            Debug.Log("Do move to " + n_point);
        }
    }
    /// <summary>
    /// Players the action move to.
    /// </summary>
    /// <param name="n_point">N point.</param>

    public void PlayerActionMoveTo(Vector3 n_point)
    {
        //tend to target position
        AngleProvidor comp_tend          = GetComponent <AngleProvidor>();
        float         lookAtPos_distance = comp_tend.LookAtWithTargetPosition(n_point, false);

        //do transform the n_point with maximu move distance
        if (lookAtPos_distance > attack_radius / 2)
        {
            Debug.Log("lookat Position " + n_point + " is too far. ");
            n_point = comp_tend.GetTendPositionWithOutNewTarget(attack_radius / 2);
        }

        KnockBackHelper comp_kb = GetComponent <KnockBackHelper>();

        if (comp_kb != null)
        {
            SpeedUnit n_speedUnit = new SpeedUnit();
            n_speedUnit.setTarget(getMaxMoveSpeed(), attack_radius / 2, getSpeedUpDuration());

            comp_kb.doMoveToPositionWithUpdate(n_speedUnit, n_point);
            Debug.Log("Do move to " + n_point);
        }
    }