Health/Assets/Scripts/PoseCheck/HeadTurnLeft.cs

68 lines
1.8 KiB
C#

using OpenCVForUnity.CoreModule;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HeadTurnLeft : PoseBase
{
private bool _isRunning = false;
public HeadTurnLeft(ModelType name) : base(name) { }
public override bool CheckPose(List<Point> points)
{
if (!CheckPoint(points, "Nose"))
return false;
//左转头检测
if (CheckPoint(points, "LEar") && !CheckPoint(points, "REar"))
{
return true;
}
if (Math.Abs(points[YogaConfig.BODY_PARTS["LEar"]].x - points[YogaConfig.BODY_PARTS["Nose"]].x) > Math.Abs(points[YogaConfig.BODY_PARTS["REar"]].x - points[YogaConfig.BODY_PARTS["Nose"]].x))
{
return true;
}
return false;
}
public override void ShowHint()
{
YogaManager.Instance.ShowHint?.Invoke("请左转头");
EventManager.Instance.Dispatch("PlayAnimation", AvatarAction.HeadTurnLeft);
}
public override void ProcessSuccessCallBack(Action callback)
{
if (_isRunning)
return;
YogaManager.Instance.StartCoroutine(SuccessAction(callback));
}
public override void ProcessFailCallBack()
{
//YogaManager.Instance.UpdateStatus?.Invoke(string.Empty);
}
private IEnumerator SuccessAction(Action callback)
{
_isRunning = true;
yield return new WaitForSeconds(3f);
if (!CheckPose(YogaManager.Instance.Points))
{
YogaManager.Instance.UpdateStatus?.Invoke("请左转头");
_isRunning = false;
yield break;
}
YogaManager.Instance.UpdateStatus?.Invoke("很好,你已经左转头了!");
yield return new WaitForSeconds(1f);
_isRunning = true;
callback?.Invoke();
}
}