You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.4 KiB
C#
88 lines
2.4 KiB
C#
6 months ago
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
using UnityEngine.Events;
|
||
|
|
||
|
namespace Autohand.Demo{
|
||
|
public class Door : PhysicsGadgetHingeAngleReader
|
||
|
{
|
||
|
[Header("Door should start closed")]
|
||
|
public Rigidbody body;
|
||
|
Vector3 closedPosition;
|
||
|
Quaternion closedRotation;
|
||
|
|
||
|
[Tooltip("The door needs to reach this level of open before it can be reset")]
|
||
|
public float minThreshold = 0.05f;
|
||
|
public float midThreshold = 0.05f;
|
||
|
[Tooltip("The door needs to reach this level of open before it can be reset")]
|
||
|
public float maxThreshold = 0.05f;
|
||
|
[Space]
|
||
|
public UnityEvent OnMax;
|
||
|
public UnityEvent OnMid;
|
||
|
public UnityEvent OnMin;
|
||
|
|
||
|
bool min = false;
|
||
|
bool max = false;
|
||
|
bool mid = true;
|
||
|
|
||
|
private void Awake(){
|
||
|
if(!body && GetComponent<Rigidbody>())
|
||
|
body = GetComponent<Rigidbody>();
|
||
|
|
||
|
closedPosition = transform.position;
|
||
|
closedRotation = transform.rotation;
|
||
|
}
|
||
|
|
||
|
protected void FixedUpdate(){
|
||
|
if(!max && mid && GetValue()+maxThreshold >= 1) {
|
||
|
Max();
|
||
|
}
|
||
|
|
||
|
if(!min && mid && GetValue()-minThreshold <= -1){
|
||
|
Min();
|
||
|
}
|
||
|
|
||
|
if (GetValue() <= midThreshold && max && !mid) {
|
||
|
Mid();
|
||
|
}
|
||
|
|
||
|
if (GetValue() >= -midThreshold && min && !mid) {
|
||
|
Mid();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void Max(){
|
||
|
mid = false;
|
||
|
max = true;
|
||
|
OnMax?.Invoke();
|
||
|
}
|
||
|
|
||
|
void Mid(){
|
||
|
min = false;
|
||
|
max = false;
|
||
|
mid = true;
|
||
|
OnMid?.Invoke();
|
||
|
}
|
||
|
|
||
|
void Min() {
|
||
|
min = true;
|
||
|
mid = false;
|
||
|
OnMin?.Invoke();
|
||
|
}
|
||
|
|
||
|
public void ClosedDoor() {
|
||
|
transform.position = closedPosition;
|
||
|
transform.rotation = closedRotation;
|
||
|
if(body.collisionDetectionMode == CollisionDetectionMode.ContinuousDynamic)
|
||
|
body.collisionDetectionMode = CollisionDetectionMode.Continuous;
|
||
|
body.isKinematic = true;
|
||
|
}
|
||
|
|
||
|
private void OnDrawGizmosSelected() {
|
||
|
if(!body && GetComponent<Rigidbody>())
|
||
|
body = GetComponent<Rigidbody>();
|
||
|
}
|
||
|
}
|
||
|
}
|