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