From 47fdfdbc66f5f06f1a02ed899758db066e0d951d Mon Sep 17 00:00:00 2001 From: Stedd Date: Sat, 1 Oct 2022 18:17:16 +0200 Subject: [PATCH] Added Turret targeting --- Assets/Entities/Enemies/Enemy.prefab | 2 +- Assets/Entities/Structures/Turret/Turret.cs | 113 ++++++++------- .../Entities/Structures/Turret/Turret.prefab | 6 +- Assets/Scenes/Playground 1.unity | 134 +++++++++++++++++- 4 files changed, 192 insertions(+), 63 deletions(-) diff --git a/Assets/Entities/Enemies/Enemy.prefab b/Assets/Entities/Enemies/Enemy.prefab index 040fe6a..d35f538 100644 --- a/Assets/Entities/Enemies/Enemy.prefab +++ b/Assets/Entities/Enemies/Enemy.prefab @@ -406,7 +406,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a8e2a3a5a069cea4cbe59c093201d8dc, type: 3} m_Name: m_EditorClassIdentifier: - _health: 0 + _health: 10 _maxHealth: 0 _isInvulnerable: 0 _centerPosition: {fileID: 3291032053430181389} diff --git a/Assets/Entities/Structures/Turret/Turret.cs b/Assets/Entities/Structures/Turret/Turret.cs index 88e1f5f..4f28fae 100644 --- a/Assets/Entities/Structures/Turret/Turret.cs +++ b/Assets/Entities/Structures/Turret/Turret.cs @@ -1,3 +1,4 @@ +using System; using AsteroidGame.Entities.Enemies.Scripts; using UnityEngine; @@ -14,14 +15,13 @@ namespace AsteroidGame.Entities [SerializeField] private TargetStrategy _targetStrategy = TargetStrategy.LowestHealth; [Header("Stats")] - [SerializeField] - private float _score = 0f; + [SerializeField] private float _kills = 0f; + [SerializeField] private float _damageDealt = 0f; [Header("RigConnections")] [SerializeField] private Transform _turretHead; [SerializeField] private Transform _barrel; - #region Privates [Header("Target")] [SerializeField] private SEnemyBaseRuntimeSet _activeEnemies; [SerializeField] private EnemyBase _targetEnemy; @@ -31,10 +31,6 @@ namespace AsteroidGame.Entities ClosestEnemy, LowestHealth }; - - [SerializeField] private Transform[] _buildingParts; - - #endregion #region Publics @@ -50,11 +46,6 @@ namespace AsteroidGame.Entities #endregion - private void Awake() - { - _targetEnemy = FindObjectOfType(); - } - private void Start() { // enemyHandler = FindObjectOfType(); @@ -64,7 +55,7 @@ namespace AsteroidGame.Entities private void Update() { - _turretHead.transform.LookAt(_targetEnemy.GetCenterPosition()); + FindEnemyTarget(); } private void UpdateWeaponParameters(float fireRate, float projectileSpeed) @@ -78,49 +69,57 @@ namespace AsteroidGame.Entities // Update is called once per frame - // private void FindAndShootEnemy() - // { - // float bestValue = Mathf.Infinity; - // bool targetFound = false; - // List enemies = enemyHandler.ReturnAllEnemies(); - // - // foreach (GameObject enemy in enemies) - // { - // float distanceToTarget = Vector3.Magnitude(enemy.transform.position - transform.position); - // - // bool withinRange = distanceToTarget < weaponRange; - // if (withinRange) - // { - // if (targetStrategy == TargetStrategy.ClosestEnemy) - // { - // bool isClosest = distanceToTarget < bestValue; - // if (isClosest) - // { - // targetFound = true; - // bestValue = distanceToTarget; - // targetEnemy = enemy; - // } - // } - // if (targetStrategy == TargetStrategy.LowestHealth) - // { - // float enemyHealth = enemy.GetComponent().Health; - // - // bool isLowestHealth = enemyHealth < bestValue; - // if (isLowestHealth) - // { - // targetFound = true; - // bestValue = enemyHealth; - // targetEnemy = enemy; - // } - // } - // } - // } - // - // if (targetFound) - // { - // weapon.transform.LookAt(targetEnemy.transform.position); - // ShootProjectile(true); - // } - // } + private void FindEnemyTarget() + { + float currentBestValue = Mathf.Infinity; + var targetFound = false; + + foreach (EnemyBase enemy in _activeEnemies._list) + { + float distanceToTarget = Vector3.Magnitude(enemy.GetCenterPosition() - GetCenterPosition()); + + bool withinRange = distanceToTarget < _weaponRange; + if (withinRange) + { + switch (_targetStrategy) + { + case TargetStrategy.ClosestEnemy: + { + bool isClosest = distanceToTarget < currentBestValue; + if (isClosest) + { + targetFound = true; + currentBestValue = distanceToTarget; + _targetEnemy = enemy; + } + + break; + } + case TargetStrategy.LowestHealth: + { + float enemyHealth = enemy.GetHealth(); + + bool isLowestHealth = enemyHealth < currentBestValue; + if (isLowestHealth) + { + targetFound = true; + currentBestValue = enemyHealth; + _targetEnemy = enemy; + } + + break; + } + default: + throw new ArgumentOutOfRangeException(); + } + } + } + + if (targetFound) + { + _turretHead.transform.LookAt(_targetEnemy.GetCenterPosition()); + // ShootProjectile(true); + } + } } } \ No newline at end of file diff --git a/Assets/Entities/Structures/Turret/Turret.prefab b/Assets/Entities/Structures/Turret/Turret.prefab index 8dc6c18..930a503 100644 --- a/Assets/Entities/Structures/Turret/Turret.prefab +++ b/Assets/Entities/Structures/Turret/Turret.prefab @@ -757,14 +757,14 @@ MonoBehaviour: _maxPower: 10 _currentPower: 0 _structureBaseSet: {fileID: 11400000, guid: bccdf438a1004a444bc24492728d6fbd, type: 2} - _weaponRange: 40 + _weaponRange: 10 _damage: 1 _fireRate: 1 _projectileSpeed: 5 _targetStrategy: 1 - _score: 0 + _kills: 0 + _damageDealt: 0 _turretHead: {fileID: 5103935544653627402} _barrel: {fileID: 5103935545559248087} _activeEnemies: {fileID: 11400000, guid: 5f6dc84d75dbd9a459e519de42279066, type: 2} _targetEnemy: {fileID: 0} - _buildingParts: [] diff --git a/Assets/Scenes/Playground 1.unity b/Assets/Scenes/Playground 1.unity index d115918..283531a 100644 --- a/Assets/Scenes/Playground 1.unity +++ b/Assets/Scenes/Playground 1.unity @@ -266,6 +266,8 @@ Transform: - {fileID: 2079460687} - {fileID: 1715656626} - {fileID: 991542217} + - {fileID: 1421503444} + - {fileID: 1494435109} m_Father: {fileID: 0} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -391,6 +393,134 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c2b4fe01faa847f4b976b5539477e1ec, type: 3} +--- !u!1001 &1421503443 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 157782261} + m_Modifications: + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_LocalPosition.x + value: 5.96 + objectReference: {fileID: 0} + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_LocalPosition.y + value: -0.98203504 + objectReference: {fileID: 0} + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_LocalPosition.z + value: -1.35 + objectReference: {fileID: 0} + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5599539567497807159, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_Name + value: Enemy (1) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} +--- !u!4 &1421503444 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + m_PrefabInstance: {fileID: 1421503443} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1494435108 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 157782261} + m_Modifications: + - target: {fileID: 1411216412654489461, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: _health + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_LocalPosition.x + value: 4.51 + objectReference: {fileID: 0} + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_LocalPosition.y + value: -0.98203504 + objectReference: {fileID: 0} + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_LocalPosition.z + value: 1.03 + objectReference: {fileID: 0} + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5599539567497807159, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + propertyPath: m_Name + value: Enemy (2) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} +--- !u!4 &1494435109 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} + m_PrefabInstance: {fileID: 1494435108} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1715656625 PrefabInstance: m_ObjectHideFlags: 0 @@ -404,7 +534,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} propertyPath: m_LocalPosition.x - value: -0.3173442 + value: -6.3 objectReference: {fileID: 0} - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} propertyPath: m_LocalPosition.y @@ -412,7 +542,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} propertyPath: m_LocalPosition.z - value: 0.039061546 + value: 11.95 objectReference: {fileID: 0} - target: {fileID: 2692714622321691895, guid: 4af571b983b23f94f8d5ca4dbda27de5, type: 3} propertyPath: m_LocalRotation.w