|
|
|
|
using System.Collections;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
public class MapDoor : MonoBehaviour
|
|
|
|
|
{
|
|
|
|
|
[System.Serializable]
|
|
|
|
|
public class Teleport
|
|
|
|
|
{
|
|
|
|
|
public MapBlock blk;
|
|
|
|
|
public MapDoor door;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//private void OnEnable()
|
|
|
|
|
//{
|
|
|
|
|
// if (anim != null)
|
|
|
|
|
// {
|
|
|
|
|
// anim.clip = clipOpen;
|
|
|
|
|
// Util.AnimationPlay(null, anim, anim.clip.name, true, null);
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
//private void OnDisable()
|
|
|
|
|
//{
|
|
|
|
|
// if (anim != null)
|
|
|
|
|
// Util.AnimationStop(anim, clipOpen.name);
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
public GameObject doorModel;
|
|
|
|
|
public Animation anim;
|
|
|
|
|
public AnimationClip clipOpen;
|
|
|
|
|
public AnimationClip clipClose;
|
|
|
|
|
public Transform way;
|
|
|
|
|
[Space(10)]
|
|
|
|
|
public MapBlock doorBlock;
|
|
|
|
|
public MapDoor doorConnect;
|
|
|
|
|
public void Connect(MapBlock blk, MapDoor door)
|
|
|
|
|
{
|
|
|
|
|
OPEN = false;
|
|
|
|
|
|
|
|
|
|
doorBlock = blk;
|
|
|
|
|
doorConnect = door;
|
|
|
|
|
doorModel.SetActive(door != null);
|
|
|
|
|
|
|
|
|
|
if (anim != null)
|
|
|
|
|
Util.AnimationStop(anim, clipOpen.name);
|
|
|
|
|
}
|
|
|
|
|
public void OnEvent(int type, object value)
|
|
|
|
|
{
|
|
|
|
|
switch ((MapEvent)type)
|
|
|
|
|
{
|
|
|
|
|
case MapEvent.DoorInit:
|
|
|
|
|
{
|
|
|
|
|
CHECK = OPEN = false;
|
|
|
|
|
|
|
|
|
|
if (anim != null)
|
|
|
|
|
Util.AnimationPlay(this, anim, clipOpen.name, true, null);
|
|
|
|
|
//Util.AnimationStop(anim, clipOpen.name);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case MapEvent.DoorState:
|
|
|
|
|
{
|
|
|
|
|
if (!(bool)value && OPEN)
|
|
|
|
|
{
|
|
|
|
|
DoorClose();
|
|
|
|
|
}
|
|
|
|
|
//아래 코드 실행 시 이동 했던 문만 열려있음
|
|
|
|
|
//else if ((bool)value && OPEN)
|
|
|
|
|
//아래 코드 실행 시 일반 블럭의 문은 항상 열림
|
|
|
|
|
else if ((bool)value && !NEED_KEY)
|
|
|
|
|
{
|
|
|
|
|
//OPEN = false;
|
|
|
|
|
DoorOpen(null, null);
|
|
|
|
|
}
|
|
|
|
|
else if((bool)value && OPEN && NEED_KEY)
|
|
|
|
|
{
|
|
|
|
|
DoorOpen(null, null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CHECK = (bool)value;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case MapEvent.Register_OnItemUse:
|
|
|
|
|
{
|
|
|
|
|
ItemUseRegister register = (ItemUseRegister)value;
|
|
|
|
|
OnItemUse = register.OnItemUse;
|
|
|
|
|
OnTeleport = register.OnTeleport;
|
|
|
|
|
OnLock = register.OnLock;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
[Space(10)]
|
|
|
|
|
public Collider col;
|
|
|
|
|
void DoorPass(bool PASS)
|
|
|
|
|
{
|
|
|
|
|
if (col != null)
|
|
|
|
|
col.enabled = !PASS;
|
|
|
|
|
}
|
|
|
|
|
void DoorClose()
|
|
|
|
|
{
|
|
|
|
|
DoorPass(false);
|
|
|
|
|
|
|
|
|
|
anim.clip = clipClose;
|
|
|
|
|
Util.AnimationPlay(this, anim, anim.clip.name, false, null);
|
|
|
|
|
}
|
|
|
|
|
public void DoorOpen(GameObject target, System.Action OnEnd = null)
|
|
|
|
|
{
|
|
|
|
|
if (!OPEN)
|
|
|
|
|
{
|
|
|
|
|
anim.clip = clipOpen;
|
|
|
|
|
Util.AnimationPlay(this, anim, anim.clip.name, false, () =>
|
|
|
|
|
{
|
|
|
|
|
DoorPass(true);
|
|
|
|
|
OPEN = true;
|
|
|
|
|
|
|
|
|
|
Teleport_Character(target, OnEnd);
|
|
|
|
|
|
|
|
|
|
if (doorConnect == null && effectPortal != null)
|
|
|
|
|
effectPortal.SetActive(true);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (doorConnect != null)
|
|
|
|
|
{
|
|
|
|
|
doorConnect.OPEN = true;
|
|
|
|
|
Util.AnimationStop(doorConnect.anim, doorConnect.clipClose.name);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (anim.clip == clipClose)
|
|
|
|
|
{
|
|
|
|
|
anim.clip = clipOpen;
|
|
|
|
|
Util.AnimationPlay(this, anim, anim.clip.name, false, () =>
|
|
|
|
|
{
|
|
|
|
|
DoorPass(true);
|
|
|
|
|
OPEN = true;
|
|
|
|
|
|
|
|
|
|
Teleport_Character(target, OnEnd);
|
|
|
|
|
|
|
|
|
|
if (doorConnect == null && effectPortal != null)
|
|
|
|
|
effectPortal.SetActive(true);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (doorConnect != null)
|
|
|
|
|
{
|
|
|
|
|
doorConnect.OPEN = true;
|
|
|
|
|
Util.AnimationStop(doorConnect.anim, doorConnect.clipClose.name);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
OPEN = true;
|
|
|
|
|
|
|
|
|
|
Teleport_Character(target, OnEnd);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void Teleport_Character(GameObject target, System.Action OnEnd)
|
|
|
|
|
{
|
|
|
|
|
if (target != null)
|
|
|
|
|
{
|
|
|
|
|
tel.blk = doorBlock;
|
|
|
|
|
tel.door = doorConnect;
|
|
|
|
|
|
|
|
|
|
if (OnTeleport != null)
|
|
|
|
|
OnTeleport(tel);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (OnEnd != null)
|
|
|
|
|
OnEnd();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public GameObject effectPortal;
|
|
|
|
|
public void PortalSetting(GameObject effect)
|
|
|
|
|
{
|
|
|
|
|
doorBlock = null;
|
|
|
|
|
doorConnect = null;
|
|
|
|
|
|
|
|
|
|
effectPortal = effect;
|
|
|
|
|
|
|
|
|
|
effectPortal.transform.SetParent(transform);
|
|
|
|
|
effectPortal.transform.localPosition = new Vector3(0, 1, 2);
|
|
|
|
|
|
|
|
|
|
effectPortal.SetActive(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Space(10)]
|
|
|
|
|
public bool CHECK = false;
|
|
|
|
|
public bool OPEN = false;
|
|
|
|
|
[Space(10)]
|
|
|
|
|
public bool NEED_KEY = false;
|
|
|
|
|
ItemUse OnItemUse;
|
|
|
|
|
System.Action<Teleport> OnTeleport;
|
|
|
|
|
System.Action<bool> OnLock;
|
|
|
|
|
Teleport tel = new Teleport();
|
|
|
|
|
void OnTriggerEnter(Collider other)
|
|
|
|
|
{
|
|
|
|
|
if (CHECK && other.CompareTag("Our"))
|
|
|
|
|
{
|
|
|
|
|
if(!OPEN && NEED_KEY && !OnItemUse("Key", 1))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (OnLock != null)
|
|
|
|
|
OnLock(true);
|
|
|
|
|
|
|
|
|
|
DoorOpen(other.gameObject);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|