-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDoor.cs
91 lines (72 loc) · 2.27 KB
/
Door.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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
using UnityEngine;
using System.Collections;
public class Door : MonoBehaviour {
public enum doorStates {
opened,
closing,
closed,
opening
}
private const int lastEnum = doorStates.opening-doorStates.opened;
public float timeOffset;
public float[] intervals = new float[]{1f,1f,1f,1f};
public float openY;
public float closedY;
private Vector3 closedPosition;
private Vector3 openPosition;
public bool bJammed = false;
public doorStates curState = doorStates.closed;
public float doorTimer;
private Collider col;
private void Start() {
col = GetComponent<Collider>();
closedY = transform.position.y;
closedPosition = openPosition = transform.position;
//openY+=closedY;
openPosition.y+=openY;
SwitchToNextState();
}
private void Update() {
Vector3 initialDoorPosition = transform.position;
doorTimer+=Time.deltaTime;
if (curState == doorStates.closing && !bJammed) {
//transform.position+=(closedPosition-transform.position)*(Time.deltaTime/intervals[(int)(curState)]);
transform.position = Vector3.Lerp(transform.position, closedPosition, doorTimer/intervals[(int)(curState)]);
}
else if(curState == doorStates.opening && !bJammed) {
//transform.position+=(openPosition-transform.position)*(Time.deltaTime/intervals[(int)(curState)]);
transform.position = Vector3.Lerp(transform.position, openPosition, doorTimer/intervals[(int)(curState)]);
}
if(doorTimer>intervals[(int)(curState)]) {
doorTimer-= intervals[(int)(curState)];
SwitchToNextState();
}
}
private void SwitchToNextState() {
curState++;
if((int)curState>lastEnum) curState = (doorStates)0;
if(curState == doorStates.closed) col.isTrigger = false;
else col.isTrigger = true;
SwitchToState(curState);
bJammed = false;
}
private void SwitchToState(doorStates stt) {
curState = stt;
//StopAllCoroutines();
//StartCoroutine(MoveDoor(curState,intervals[(int)curState]));
}
private void OnTriggerEnter(Collider collisionInfo) {
if(curState == doorStates.closing) {
if(collisionInfo.gameObject.tag == Tags.Druid) {
if(Druid.instance.curShape == shapeshiftStates.stone) {
JammTheDoor();
}
else Druid.instance.HitByTheDoor(this);
}
}
}
private void JammTheDoor() {
bJammed = true;
//SwitchToState(doorStates.closed);
}
}