namespace VRTK.Examples { using UnityEngine; public class Openable_Door : VRTK_InteractableObject { public bool flipped = false; public bool rotated = false; private float sideFlip = -1; private float side = -1; private float smooth = 270.0f; private float doorOpenAngle = -90f; private bool open = false; private Vector3 defaultRotation; private Vector3 openRotation; public override void StartUsing(VRTK_InteractUse usingObject) { base.StartUsing(usingObject); SetDoorRotation(usingObject.transform.position); SetRotation(); open = !open; } protected void Start() { defaultRotation = transform.eulerAngles; SetRotation(); sideFlip = (flipped ? 1 : -1); } protected override void Update() { base.Update(); if (open) { transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.Euler(openRotation), Time.deltaTime * smooth); } else { transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.Euler(defaultRotation), Time.deltaTime * smooth); } } private void SetRotation() { openRotation = new Vector3(defaultRotation.x, defaultRotation.y + (doorOpenAngle * (sideFlip * side)), defaultRotation.z); } private void SetDoorRotation(Vector3 interacterPosition) { side = ((rotated == false && interacterPosition.z > transform.position.z) || (rotated == true && interacterPosition.x > transform.position.x) ? -1 : 1); } } }