-
Notifications
You must be signed in to change notification settings - Fork 0
/
BarrierController.cs
68 lines (56 loc) · 2.29 KB
/
BarrierController.cs
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
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class BarrierController : MonoBehaviour {
[SerializeField]
private List<Barrier> barriers = new List<Barrier>();
void Start () {
}
void Update () {
}
public bool applyForceVectorToBarrier(Vector3 forceVector, GameObject theBarrier, Vector3 playerPosition){
Barrier barrier = getBarrierInstanceFromBarrierGameObject(theBarrier);
if (!barrier.isSpecial() || (barrier.isSpecial() && playerIsCloseToBarrierOrSibling(barrier, playerPosition))){
barrier.markAsDestroyed();
barrier.applyForceVector(forceVector);
return true;
}
return false;
}
private bool playerIsCloseToBarrierOrSibling(Barrier barrier, Vector3 playerPosition){
float maxDistance = 100f;
return (Vector3.Distance(barrier.transform.position, playerPosition) < maxDistance ||
(barrier.sibling != null && Vector3.Distance(barrier.sibling.transform.position, playerPosition) < maxDistance));
}
public void attemptToMarkBarrierAsDestroyed(GameObject theBarrier, int attackStrength, bool special=false){
Barrier barrier = getBarrierInstanceFromBarrierGameObject(theBarrier);
barrier.willBeDestroyedByRushAttack(attackStrength, special);
}
public List<GameObject> getAllBarriersFor(GameObject theBarrier){
Barrier barrier = getBarrierInstanceFromBarrierGameObject(theBarrier);
List<GameObject> allBarriers = new List<GameObject>();
allBarriers.Add(theBarrier);
if (barrier.sibling != null) allBarriers.Add(barrier.sibling);
return allBarriers;
}
public List<Barrier> activeBarriers(){
return barriers;
}
public GameObject rendezvousPointForBarrier(GameObject theBarrier){
Barrier barrier = getBarrierInstanceFromBarrierGameObject(theBarrier);
return barrier.rendezvousPoint;
}
public void resurrectBarrier(GameObject aBarrier){
Barrier barrier = getBarrierInstanceFromBarrierGameObject(aBarrier);
barrier.markAsDestroyed(false);
barrier.trapSchool();
}
public Barrier getBarrierInstanceFromBarrierGameObject(GameObject theBarrier){
foreach(Barrier barrier in barriers){
if (barrier.gameObject == theBarrier || barrier.gameObject == theBarrier.transform.parent.gameObject){
return barrier;
}
}
return null;
}
}