private bool GetActualTarget(ref Vector2 actualTargetPosition, ref float actualTargetOrthoSize)
    {
        bool targetValid = false;

        switch (targetMode)
        {
        case TARGET_MODE_POSITION:
            actualTargetPosition  = new Vector2(targetPositionX, targetPositionY);
            actualTargetOrthoSize = originalOrthographicSize;
            targetValid           = true;
            break;

        case TARGET_MODE_PLAYER:
            if (targetPlayerTransform != null)
            {
                actualTargetPosition  = new Vector2(targetPlayerTransform.position.x, targetPlayerTransform.position.y);
                actualTargetPosition += targetPlayer.GetVelocity() * VELOCITY_TO_OFFSET_FACTOR;
                actualTargetOrthoSize = originalOrthographicSize + targetPlayer.GetVelocity().sqrMagnitude *VELOCITY_TO_ORTHO_FACTOR;
                if (actualTargetOrthoSize > maxOrthographicSize)
                {
                    actualTargetOrthoSize = maxOrthographicSize;
                }
                targetValid = true;
            }
            break;

        case TARGET_MODE_NPC:
            if (targetNPCTransform != null)
            {
                actualTargetPosition  = new Vector2(targetNPCTransform.position.x, targetNPCTransform.position.y);
                actualTargetPosition += targetNPC.GetVelocity() * VELOCITY_TO_OFFSET_FACTOR;
                actualTargetOrthoSize = originalOrthographicSize + targetNPC.GetVelocity().sqrMagnitude *VELOCITY_TO_ORTHO_FACTOR;
                if (actualTargetOrthoSize > maxOrthographicSize)
                {
                    actualTargetOrthoSize = maxOrthographicSize;
                }
                targetValid = true;
            }
            break;

        case TARGET_MODE_MIDWAY:
            if ((targetPlayerTransform != null) && (targetNPCTransform != null))
            {
                actualTargetPosition = new Vector2((targetPlayerTransform.position.x + targetNPCTransform.position.x) / 2f,
                                                   (targetPlayerTransform.position.y + targetNPCTransform.position.y) / 2f);
                actualTargetOrthoSize = originalOrthographicSize;
                targetValid           = true;
            }
            break;

        case TARGET_MODE_EDITOR:
            actualTargetPosition  = new Vector2(transform.position.x, transform.position.y);
            actualTargetOrthoSize = originalOrthographicSize;
            targetValid           = true;
            break;
        }
        if (farCamera)
        {
            actualTargetOrthoSize += farCameraOrthoIncrease;
        }
        return(targetValid);
    }