using NUnit.Framework.Internal; using OpenCVForUnity.CoreModule; using OpenCVForUnity.DnnModule; using OpenCVForUnity.UnityUtils; using OpenCVForUnity.UnityUtils.Helper; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Linq; using UnityEngine; public class YogaManager : MonoSingleton { private List _points = new List(); public List Points { get => _points; private set => _points = value; } private int _currentActionCount; //当前动作计数 public int CurrentActionCount { get => _currentActionCount;} private int _currentSuccessActionCount; //当前成功动作计数 public int CurrentSuccessActionCount { get => _currentSuccessActionCount; } private int _maxActionCount = 0; public int MaxActionCount { get => _maxActionCount; } private int _actionIndex; //用户选择界面选择的动作索引 public int ActionIndex { get => _actionIndex; internal set => _actionIndex = value; } private Dictionary _actions = new Dictionary(); public void InitData() { _actions[AvatarAction.HeadTurnLeft] = new HeadTurnLeft(); _actions[AvatarAction.HeadTurnRight] = new HeadTurnRight(); _currentActionCount = 0; _currentSuccessActionCount = 0; _maxActionCount = 3; EventManager.Instance.Dispatch("UpdateProgress", CurrentSuccessActionCount, CurrentActionCount, MaxActionCount); } private void OnEnable() { EventManager.Instance.AddEventListener("ActionSuccess", OnActionSuccess); EventManager.Instance.AddEventListener("ActionFailed", OnActionFailed); } private void OnDisable() { EventManager.Instance.RemoveEventListener("ActionSuccess", OnActionSuccess); EventManager.Instance.RemoveEventListener("ActionFailed", OnActionFailed); } private void OnActionSuccess() { _currentSuccessActionCount++; _currentActionCount++; //args[0] = successCount args[1] = excutedCount args[2] = totalCount EventManager.Instance.Dispatch("UpdateProgress", CurrentSuccessActionCount, CurrentActionCount, MaxActionCount); } private void OnActionFailed() { _currentActionCount++; EventManager.Instance.Dispatch("UpdateProgress", CurrentSuccessActionCount, CurrentActionCount, MaxActionCount); } public bool IsCorrectAction(List personPoints, AvatarAction actionType) { if (!_actions.ContainsKey(actionType)) { Debug.LogError("ActionType is not exist"); return false; } var result = _actions[actionType].CheckPose(personPoints); Debug.LogWarning("ActionType: " + actionType + " result: " + result); return result; } }