101 lines
4.7 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |