WUT_Computer_Science/theProject/Assets/Scripts/Soldier.cs

96 lines
2.7 KiB
C#
Raw Normal View History

2022-05-16 13:39:57 +02:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Soldier : MonoBehaviour
{
2022-05-16 15:09:43 +02:00
public enum SoldierType
2022-05-16 15:01:00 +02:00
{
Ally,
Enemy
}
2022-05-16 14:12:43 +02:00
[SerializeField] private Transform target;
2022-05-16 15:01:00 +02:00
[SerializeField] private SoldierType enemyType;
[SerializeField] private SoldierType ourType;
2022-05-16 14:12:43 +02:00
[SerializeField] private float healthPoints = 1;
2022-05-16 15:23:39 +02:00
[SerializeField] private float rangeAttack = 100;
2022-05-16 14:12:43 +02:00
[SerializeField] private float rangeView = 1;
[SerializeField] private float damageAttack = 1;
[SerializeField] private float speedAttack = 1;
2022-05-16 13:39:57 +02:00
// Start is called before the first frame update
void Start(){
setEnemyTag();
}
2022-05-16 15:09:43 +02:00
public void setOwnTag(SoldierType type)
{
2022-05-16 15:09:43 +02:00
ourType = type;
}
public void setEnemyTag()
{
2022-05-16 15:09:43 +02:00
if(ourType == SoldierType.Ally) enemyType = SoldierType.Enemy;
else enemyType = SoldierType.Ally;
2022-05-16 13:39:57 +02:00
}
void Awake()
{
TickSystem.OnTick += HandleTick;
}
private void HandleTick(TickSystem.OnTickEventArgs tickEventArgs)
{
UpdateTarget();
}
2022-05-16 13:39:57 +02:00
void UpdateTarget ()
{
// Enemies are the game objects tagged with the "Enemy"
2022-05-16 15:23:39 +02:00
//GameObject[] enemies = GameObject.FindGameObjectsWithTag(enemyType);
Soldier[] soldiers = GameObject.FindObjectsOfType<Soldier>();
List<GameObject> enemiesList = new List<GameObject>();
foreach (Soldier obj in soldiers)
{
if (obj.ourType == enemyType)
enemiesList.Add(obj.gameObject);
}
GameObject[] enemies = enemiesList.ToArray();
2022-05-16 14:12:43 +02:00
Debug.Log(enemies.Length);
2022-05-16 13:39:57 +02:00
// We have not found enemy yet so the distance to enemy is "infinite"
float shortestDistance = Mathf.Infinity;
GameObject nearestEnemy = null;
foreach ( GameObject enemy in enemies)
{
// Go through each enemy existing
// Calculate distance to this enemy
float distanceToEnemy = Vector3.Distance(transform.position, enemy.transform.position);
if (distanceToEnemy < shortestDistance)
{
shortestDistance = distanceToEnemy;
nearestEnemy = enemy;
}
}
if (nearestEnemy != null && shortestDistance <= rangeAttack)
{
2022-05-16 14:12:43 +02:00
target = nearestEnemy.transform;
2022-05-16 13:39:57 +02:00
}
}
// Update is called once per frame
void Update()
{
if (target == null) return;
}
/* https://www.youtube.com/watch?v=QKhn2kl9_8I 08:54 Soldier attack
void OnDrawGizmosSelected ()
{
}
*/
}