From 06d467fcf0a96ad6a24c76bc934e9f1bd5385cae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A1rk=C3=B6zi=20Gergely=20J=C3=A1nos?= <cycss7@inf.elte.hu> Date: Mon, 11 Apr 2022 13:39:38 +0200 Subject: [PATCH] fix turrets: walls rotating, friendlies targeted --- Assets/Scripts/Logic/Data/World/Tower.cs | 1 + .../Event/World/Barrack/IBarrackEvent.cs | 2 -- Assets/Scripts/Presentation/World/Tower.cs | 20 +++++++++++-------- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/Assets/Scripts/Logic/Data/World/Tower.cs b/Assets/Scripts/Logic/Data/World/Tower.cs index 617f510..908a84f 100644 --- a/Assets/Scripts/Logic/Data/World/Tower.cs +++ b/Assets/Scripts/Logic/Data/World/Tower.cs @@ -17,6 +17,7 @@ public class Tower : Building { float closestDistance = float.PositiveInfinity; Vector2 turretPosition = Position.ToVectorCentered(); foreach (Unit unit in World.Units) { + if (unit.Owner == Owner) continue; float distance = unit.Position.Distance2(turretPosition); if (closestDistance > distance) { closestDistance = distance; diff --git a/Assets/Scripts/Logic/Event/World/Barrack/IBarrackEvent.cs b/Assets/Scripts/Logic/Event/World/Barrack/IBarrackEvent.cs index 1384319..49b9eb3 100644 --- a/Assets/Scripts/Logic/Event/World/Barrack/IBarrackEvent.cs +++ b/Assets/Scripts/Logic/Event/World/Barrack/IBarrackEvent.cs @@ -1,5 +1,3 @@ -using Logic.Data.World; - namespace Logic.Event.World.Barrack { public interface IBarrackEvent { public Data.World.Barrack Barrack { get; } diff --git a/Assets/Scripts/Presentation/World/Tower.cs b/Assets/Scripts/Presentation/World/Tower.cs index 43a8e38..66eb4e6 100644 --- a/Assets/Scripts/Presentation/World/Tower.cs +++ b/Assets/Scripts/Presentation/World/Tower.cs @@ -23,14 +23,9 @@ public class Tower : Structure { private World _world; private void FixedUpdate() { - Logic.Data.World.Unit logicTarget = _data.Target ?? _data.ClosestEnemy; - if (logicTarget != null && logicTarget.IsAlive) { - Vector3 target = _world.LogicToPresentation(logicTarget).transform.position; - Vector3 direction = (target - rotatingTurret.position).normalized; - float angle = Mathf.Rad2Deg * Mathf.Atan2(direction.y, direction.x); - Quaternion desired = Quaternion.AngleAxis(angle - 90, Vector3.forward); - rotatingTurret.rotation = Quaternion.RotateTowards(rotatingTurret.rotation, desired, - Time.fixedDeltaTime * turretRotationSpeed); + if (_data.Type.Range > 0) { + Logic.Data.World.Unit logicTarget = _data.Target ?? _data.ClosestEnemy; + if (logicTarget != null) RotateTurret(logicTarget); } } @@ -56,5 +51,14 @@ public class Tower : Structure { public void DestroyTower() { Destroy(gameObject); } + + private void RotateTurret(Logic.Data.World.Unit logicTarget) { + Vector3 target = _world.LogicToPresentation(logicTarget).transform.position; + Vector3 direction = (target - rotatingTurret.position).normalized; + float angle = Mathf.Rad2Deg * Mathf.Atan2(direction.y, direction.x); + Quaternion desired = Quaternion.AngleAxis(angle - 90, Vector3.forward); + rotatingTurret.rotation = Quaternion.RotateTowards(rotatingTurret.rotation, desired, + Time.fixedDeltaTime * turretRotationSpeed); + } } } -- GitLab