unity rotation issue on parent rotation

i made a video of it:

here is the code:

public class WeaponMover : MonoBehaviour
{
	public Transform target;
	public GameObject turretRotateObj;
	public GameObject towerRotateObj;

	public float maxTowerRotationSpeed = 360.0f;
	public float maxTurretRotationSpeed = 360.0f;

	public float smoothFactorTower = 0.125f;
	public float smoothFactorTurret = 0.125f;

	public float maxTowerRotation = 130.0f;
	public float maxTurretRotation = 50.0f;

	private Vector3 m_newRotation;
	private Vector3 m_angles;
	private float m_minTowerAngle;
	private float m_maxTowerAngle;
	private float m_minTurretAngle;
	private float m_maxTurretAngle;
	private float m_velTower;
	private float m_velTurret;

	private bool m_isTransNecTower = false;
	private bool m_isTransNecTurret = false;

	// initialization
	void Start()
	{
		m_newRotation = Vector3.zero;
		m_angles = Vector3.zero;

		m_maxTowerAngle = towerRotateObj.transform.eulerAngles.y + maxTowerRotation/2;
		m_minTowerAngle = towerRotateObj.transform.eulerAngles.y - maxTowerRotation/2;

		m_maxTurretAngle = turretRotateObj.transform.eulerAngles.z + maxTurretRotation/2;
		m_minTurretAngle = turretRotateObj.transform.eulerAngles.z - maxTurretRotation/2;

		// check if rotation happens between 0/360
		// tower
		if(m_minTowerAngle <= 0.0f)
			m_minTowerAngle += 360.0f;

		if(m_maxTowerAngle >= 360.0f)
			m_maxTowerAngle -= 360.0f;

		if(m_minTowerAngle > m_maxTowerAngle)
			m_isTransNecTower = true;

		// turret
		if(m_minTurretAngle <= 0.0f)
			m_minTurretAngle += 360.0f;

		if(m_maxTurretAngle >= 360.0f)
			m_maxTurretAngle -= 360.0f;

		if(m_minTurretAngle > m_maxTurretAngle)
			m_isTransNecTurret = true;
	}

	void Update()
	{
		m_newRotation = Quaternion.LookRotation(target.position - towerRotateObj.transform.position).eulerAngles;
		m_angles = towerRotateObj.transform.rotation.eulerAngles;
		towerRotateObj.transform.rotation = Quaternion.Euler(m_angles.x,
			ClampAngle(Mathf.SmoothDampAngle(m_angles.y, 
				m_newRotation.y - 90.0f, 
				ref m_velTower, 
				smoothFactorTower, 
				maxTowerRotationSpeed), m_minTowerAngle, m_maxTowerAngle, m_isTransNecTower),
			m_angles.z);

		m_newRotation = Quaternion.LookRotation(target.position - turretRotateObj.transform.position).eulerAngles;
		m_angles = turretRotateObj.transform.rotation.eulerAngles;
		turretRotateObj.transform.rotation = Quaternion.Euler(m_angles.x,
			m_angles.y,
			ClampAngle(Mathf.SmoothDampAngle(m_angles.z, 
				-m_newRotation.x, 
				ref m_velTurret,
				smoothFactorTurret, 
				maxTurretRotationSpeed), m_minTurretAngle, maxTurretRotation, m_isTransNecTurret));
	}

	private float ClampAngle(float angle, float min, float max, bool isTranslationNecessary)
	{
		if(!isTranslationNecessary)
		{
			if(angle < min )
				return min;

			if(angle > max)
				return max;
		}
		else
		{
			if(angle > max && angle < min)
			{
				if(min - angle > angle - max)
					return max;
				else
					return min;
			}
		}

		return angle;
	}
}

the script lies on the parent of all objects that are building the tower. i am rotating the parent… any ideas??

here a screenshot of the hierachey:
the GUN is the parent with the script(empty gameobject)
Suspension gets dropped to the towerRotateObj and Gun gets dropped on the turretRotateObj.
Suspension and Gun are also empty gameobjects. they are just some kind of group objects

4304-unbenannt.png

if you can write code that well, for sure you can pick through the code and zero any faulty variable… anyway you can add a line that updates the positions so they stay in line, even every 1 second or every 5 seconds, that would solve it. keep the transforms in line. rebuild the prefab if it is definately faulty. u write very good code you have to troubleshoot too. sometimes