101 lines
4.7 KiB
C#

using DG.Tweening;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/*******************************************************************************
*Create By CG
*Function 在一定范围内触碰后悬停
*******************************************************************************/
namespace ZXK.GYJQR
{
public class FanWeiXuanTingCtrl : Step_0
{
[HideInInspector]
public BoundTrigger boundTrigger;//边缘检测对象
[HideInInspector]
public bool isComplete = false;//是否完成边缘检测
public FanWeiXuanTingCtrl(AZBS itemAttr) : base(itemAttr) { }
/// <summary>
/// 执行路径位移的逻辑(临时效果)
/// </summary>
public void OnTempExcutePathMove(string jumpStepName, string followMouseGeoName)
{
PathManager pm = outLineParts[0].GetComponent<PathManager>() ? outLineParts[0].GetComponent<PathManager>() : outLineParts[0].AddComponent<PathManager>();
pm.onMouseDown = new UnityEngine.Events.UnityEvent();
pm.onMouseDown.AddListener(() =>
{
if (!CG.UTility.PopUpMng._TriAble) return;
GameObject mouseGeo = ModelManager.Instance.SeekAZBSPart(followMouseGeoName);
mouseGeo.GetComponent<Rigidbody>().useGravity = false;
mouseGeo.GetComponent<BoxCollider>().isTrigger = true;
//mouseGeo.GetComponent<FollowMouse>().isFollow = false;
mouseGeo.GetComponent<Rigidbody>().isKinematic = true;
Vector3 targetPos = outLineParts[0].transform.Find("BoundTrigger/TargetPosTemp").position;
mouseGeo.transform.DOMove(targetPos, 2.0f).onComplete += () =>
{
StepEnd();
StepManager.Instance.SwitchStep(jumpStepName);
};
pm.onMouseDown.RemoveAllListeners();
});
}
/// <summary>
/// 执行路径位移的逻辑
/// </summary>
public void OnExcutePathMove(string boundTriGeoName, string checkInGeoName, string jumpStepName)
{
boundTrigger = ModelManager.Instance.SeekAZBSPart(boundTriGeoName).transform.GetChild(0).GetComponent<BoundTrigger>();
ModelManager.Instance.SeekPathModeWithName(checkInGeoName).GetComponent<FollowMouse>()._boundTrigger = boundTrigger;
boundTrigger.enabled = true;
boundTrigger.onNearEdge.AddListener(() =>
{
if (!CG.UTility.PopUpMng._TriAble) return;
MouseEventListener mel = ModelManager.Instance.SeekPathModeWithName(checkInGeoName).GetComponent<MouseEventListener>();
mel.GetComponent<Rigidbody>().useGravity = false;
mel.GetComponent<BoxCollider>().isTrigger = true;
mel.GetComponent<FollowMouse>().isFollow = false;
mel.GetComponent<Rigidbody>().isKinematic = true;
mel.transform.position = boundTrigger.transform.Find("TargetPosTemp").position;
CG.UTility.MonoManager.Instance.DestroyImmediate(mel.GetComponent<FollowMouse>());
CG.UTility.MonoManager.Instance.DestroyImmediate(mel);
boundTrigger.enabled = false;
boundTrigger.onNearEdge.RemoveAllListeners();
boundTrigger.onOutEdge.RemoveAllListeners();
StepManager.Instance.SwitchStep(jumpStepName);
StepEnd();
});
boundTrigger.onOutEdge.AddListener(() =>
{
MouseEventListener mel = ModelManager.Instance.SeekPathModeWithName(checkInGeoName).GetComponent<MouseEventListener>();
if (mel == null)
{
return;
}
mel.GetComponent<Rigidbody>().useGravity = true;
mel.GetComponent<BoxCollider>().isTrigger = false;
mel.GetComponent<FollowMouse>().isFollow = false;
boundTrigger.enabled = false;
boundTrigger.onNearEdge.RemoveAllListeners();
boundTrigger.onOutEdge.RemoveAllListeners();
});
}
public void MouseDownCheck(string checkInGeoTag)
{
if (!isComplete && boundTrigger != null && boundTrigger.enabled)
{
if (!CG.UTility.PopUpMng._TriAble) return;
if (boundTrigger.OnNearEdge(checkInGeoTag))
{
boundTrigger.onOutEdge.RemoveAllListeners();
boundTrigger.onNearEdge?.Invoke();
isComplete = true;
}
else
{
boundTrigger.onOutEdge?.Invoke();
}
}
}
}
}