//////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> // Called each frame. /// </summary> protected override void Update() { base.Update(); // Rotating turret weapon if (Head != null && Barrel != null) { // A valid target is known if (_AttackTarget != null && _ObjectState == WorldObjectStates.Active) { if (_AttackTarget.IsAlive()) { // Aim the turret's head at the target (Z AXIS ONLY) Vector3 hDirection = (_AttackTarget.transform.position - transform.position).normalized; hDirection.y = 0; Quaternion hLookAtRot = Quaternion.LookRotation(hDirection); Head.transform.rotation = Quaternion.Lerp(Head.transform.rotation, hLookAtRot, WeaponAimingSpeed * Time.deltaTime); // Aim the turret's barrel at the target (Y AXIS ONLY) Vector3 bDirection = (_AttackTarget.transform.position - transform.position).normalized; bDirection.z = 0; Quaternion bLookAtRot = Quaternion.LookRotation(Barrel.transform.forward, bDirection); Barrel.transform.rotation = Quaternion.Lerp(Barrel.transform.rotation, bLookAtRot, WeaponAimingSpeed * Time.deltaTime); if (TowerWeapon != null) { // Fire the turret's weapon if (TowerWeapon.CanFire()) { TowerWeapon.FireWeapon(); } } } // Target is dead so null it out (so that the turret returns to the default state) else { _AttackTarget = null; } } // Return to the default rotation else { Head.transform.rotation = Quaternion.Lerp(Head.transform.rotation, _DefaultRotation, WeaponAimingSpeed * Time.deltaTime); } } }