-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathBiodegradableTower.cs
More file actions
108 lines (88 loc) · 3.26 KB
/
BiodegradableTower.cs
File metadata and controls
108 lines (88 loc) · 3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BiodegradableTower : Tower
{
protected override Enemy GetEnemy()
{
currentEnemiesInRange.RemoveAll(x => x == null);
if (currentEnemiesInRange.Count == 0)
return null;
if (currentEnemiesInRange.Count == 1)
return currentEnemiesInRange[0];
switch (targetPriority)
{
case TargetPriority.First:
{
return currentEnemiesInRange[0];
}
case TargetPriority.Close:
{
Enemy closest = null;
float defaultDistance = 99;
for (int x = 0; x < currentEnemiesInRange.Count; x++)
{
float distanceOfEnemy = (transform.position - currentEnemiesInRange[x].transform.position).sqrMagnitude;
if (distanceOfEnemy < defaultDistance)
{
closest = currentEnemiesInRange[x];
defaultDistance = distanceOfEnemy;
}
}
return closest;
}
case TargetPriority.Strong:
{
Enemy strongest = null;
int strongestHealth = 0;
foreach (Enemy enemy in currentEnemiesInRange)
{
if (enemy.health > strongestHealth)
{
strongest = enemy;
strongestHealth = enemy.health;
}
}
return strongest;
}
}
return null;
}
protected override void Update()
{
if (Time.time - lastAttackTime > attackRate)
{
lastAttackTime = Time.time;
currentEnemy = GetEnemy();
if (currentEnemy != null)
Attack();
}
}
protected override void Attack()
{
if (rotateTowardsTarget){
transform.LookAt(currentEnemy.transform);
transform.eulerAngles = new Vector3(0, transform.eulerAngles.y, 0);
}
GameObject bullet = Instantiate(projectilePrefab, projectileSpawnPos.position, Quaternion.identity);
if(currentEnemy.CompareTag("Biodegradable")){
bullet.GetComponent<Projectile>().Initialize(currentEnemy, projectileDamage * 2, projectileSpeed);
}else{
bullet.GetComponent<Projectile>().Initialize(currentEnemy, projectileDamage, projectileSpeed);
}
}
protected override void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Biodegradable") || other.CompareTag("NonBiodegradable") || other.CompareTag("Recycled"))
{
currentEnemiesInRange.Add(other.GetComponent<Enemy>());
}
}
protected override void OnTriggerExit(Collider other)
{
if (other.CompareTag("Biodegradable") || other.CompareTag("NonBiodegradable") || other.CompareTag("Recycled"))
{
currentEnemiesInRange.Remove(other.GetComponent<Enemy>());
}
}
}