113 lines
3.4 KiB
C#
113 lines
3.4 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using DG.Tweening;
|
|
using UnityEngine.EventSystems;
|
|
|
|
public class RoomDoor : MonoBehaviour
|
|
{
|
|
public bool is_open;
|
|
[SerializeField] private bool is_rotating;
|
|
|
|
public Vector3 close_angle = new Vector3(-90, 0, 0);
|
|
public Vector3 open_angle = new Vector3(-90, 0, 90);
|
|
|
|
public RoomDoor another_door;
|
|
|
|
void Start()
|
|
{
|
|
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
//Debug.Log(transform.name + " " + !is_rotating);
|
|
}
|
|
|
|
private void OnMouseDown()
|
|
{
|
|
if (!EventSystem.current.IsPointerOverGameObject())
|
|
{
|
|
var v = transform.parent.GetComponent<ClickEvent>();
|
|
if (!v || (v && v.gameObject == GameManager.Inst.nowCabine))
|
|
{
|
|
if (is_open)
|
|
{
|
|
DoorClose();
|
|
}
|
|
else
|
|
{
|
|
DoorOpen();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="_force_open"> ÊÇ·ñÇ¿ÖÆ´ò¿ª</param>
|
|
public void DoorOpen(bool _force_open = false)
|
|
{
|
|
if (_force_open)
|
|
{
|
|
DOTween.Kill(transform);
|
|
is_rotating = true;
|
|
//DOTween.To(() => transform.localEulerAngles, v => transform.localEulerAngles = v, open_angle, 0.5f).OnComplete(() => { is_rotating = false; is_open = true; });
|
|
transform.DOLocalRotate(open_angle, 0.5f).OnComplete(() =>
|
|
{
|
|
is_rotating = false; is_open = true;
|
|
});
|
|
if (another_door)
|
|
another_door.DoorOpen();
|
|
}
|
|
else
|
|
{
|
|
if (!is_rotating)
|
|
{
|
|
//DOTween.Kill(transform, false);
|
|
is_rotating = true;
|
|
//DOTween.To(() => transform.localEulerAngles, v => transform.localEulerAngles = v, open_angle, 0.5f).OnComplete(() => { is_rotating = false; is_open = true; });
|
|
transform.DOLocalRotate(open_angle, 0.5f).OnComplete(() =>
|
|
{
|
|
is_rotating = false; is_open = true;
|
|
});
|
|
if (another_door)
|
|
another_door.DoorOpen();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void DoorClose(bool _force_close = false)
|
|
{
|
|
if (_force_close)
|
|
{
|
|
DOTween.Kill(transform);
|
|
is_rotating = true;
|
|
//DOTween.To(() => transform.localEulerAngles, v => transform.localEulerAngles = v, close_angle, 0.5f).OnComplete(() => { is_rotating = false; is_open = false; });
|
|
transform.DOLocalRotate(close_angle, 0.5f).OnComplete(() =>
|
|
{
|
|
is_rotating = false; is_open = false;
|
|
});
|
|
if (another_door)
|
|
another_door.DoorClose();
|
|
}
|
|
else
|
|
{
|
|
if (!is_rotating)
|
|
{
|
|
//DOTween.Kill(transform, false);
|
|
is_rotating = true;
|
|
//DOTween.To(() => transform.localEulerAngles, v => transform.localEulerAngles = v, close_angle, 0.5f).OnComplete(() => { is_rotating = false; is_open = false; });
|
|
transform.DOLocalRotate(close_angle, 0.5f).OnComplete(() =>
|
|
{
|
|
is_rotating = false; is_open = false;
|
|
});
|
|
if (another_door)
|
|
another_door.DoorClose();
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|