Health/Assets/Scripts/PoseCheck/HeadTurnRight.cs

65 lines
1.8 KiB
C#

using OpenCVForUnity.CoreModule;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HeadTurnRight : PoseBase
{
private bool _isRunning = false;
public HeadTurnRight(ModelType name) : base(name) { }
public override bool CheckPose(List<Point> points)
{
if (!CheckPoint(points, "Nose"))
return false;
//右转头检测
if (!CheckPoint(points, "REar") && CheckPoint(points, "LEar"))
return true;
if (Math.Abs(points[YogaConfig.BODY_PARTS["REar"]].x - points[YogaConfig.BODY_PARTS["Nose"]].x) > Math.Abs(points[YogaConfig.BODY_PARTS["LEar"]].x - points[YogaConfig.BODY_PARTS["Nose"]].x))
{
return true;
}
return false;
}
public override void ShowHint()
{
YogaManager.Instance.ShowHint?.Invoke("请右转头");
EventManager.Instance.Dispatch("PlayAnimation", AvatarAction.HeadTurnRight);
}
public override void ProcessFailCallBack()
{
//YogaManager.Instance.UpdateStatus?.Invoke(string.Empty);
}
public override void ProcessSuccessCallBack(Action callback)
{
if (_isRunning)
return;
YogaManager.Instance.StartCoroutine(SuccessAction(callback));
}
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();
}
}