using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NPCController : PermanentTriggerBase
{
public SpriteRenderer spriteRenderer;
public Animator animator;
public string animatorParameters;
public Transform target;
private float distance;
public float minDistance;
///
/// 是否靠近
///
public bool isClose = false;
public Func canTalk;
public Action talkAction;
private void Update()
{
if (target != null)
distance = Vector3.Distance(transform.position, target.position);
if (distance < minDistance)
{
transform.LookAt(target.position);
transform.eulerAngles = new Vector3(0, transform.eulerAngles.y, 0);
isClose = true;
if (GameManager.UIMgr.GetPanel())//HQB Bug报人物靠近后,靠近交互对象的提示还在s
{
GameManager.UIMgr.HidePanel();
}
}
else
{
isClose = false;
}
}
protected override void OnMEnter()
{
base.OnMEnter();
if (!isClose) return;
//if (GameManager.RunModelMgr?.ModeType != E_ModeType.Study)
//{
_highlight.SetHighlighted(true);
//}
}
protected override void OnMExit()
{
//if (GameManager.RunModelMgr?.ModeType != E_ModeType.Study)
_highlight.SetHighlighted(false);
base.OnMExit();
}
protected override void OnMDown()
{
base.OnMDown();
if (canTalk != null && !canTalk.Invoke())
{
return;
}
if (!isClose)
{
if (GameManager.UIMgr.GetPanel() != null)
GameManager.UIMgr.GetPanel().Init("提示:请靠近交互对象");
if (GameManager.UIMgr.GetPanel() == null)
{
GameManager.UIMgr.ShowPanel(E_UI_Layer.System, (p) =>
{
p.Init($"提示:请靠近交互对象");
});
}
return;
}
//if (GameManager.ProcessMgr.IsRightSubProcessStepsTriggerID(triggerName, false) == 0)
//{
talkAction?.Invoke();
_highlight.SetHighlighted(false);
if (spriteRenderer != null)
spriteRenderer.gameObject.SetActive(false);
if (animator != null)
{
animator.SetInteger(animatorParameters, 1);
}
//}
}
public void StopAnimator()
{
if (animator != null)
{
animator.SetInteger(animatorParameters, 0);
}
}
}