void Awake() { durationManager = this; }
public void Use(ElementAction action) { if (!this.OnCooldown && !action.OnCooldown) { MonoBehaviour[] scripts = action.activationObject.GetComponents <MonoBehaviour>(); MonoBehaviour script = null; foreach (MonoBehaviour mb in scripts) { if (mb.GetType().ToString() == action.selectedComponentName) { script = (MonoBehaviour)action.activationObject.GetComponent(action.selectedComponentName); break; } } if (script != null) { //Methods if (action.selectedOption == 0) { action.cachedMethod = script.GetType().GetMethod(action.activationMethodName); List <object> parameterList = new List <object>(); //Manage Parameters if (action.sendThisItem) { parameterList.Add(this); } if (action.stringParameters.Count > 0) { action.stringParameters.ForEach(x => parameterList.Add(x)); } if (parameterList.Count > 0) { action.cachedMethod.Invoke(script, parameterList.ToArray()); } else { action.cachedMethod.Invoke(script, null); } } //Fields else if (action.selectedOption == 1) { action.cachedField = script.GetType().GetField(action.selectedFieldName); if (action.cachedField != null) { if (action.cachedField.GetValue(script) is int) { int intVal = int.Parse(action.fieldValue); int oldVal = (int)action.cachedField.GetValue(script); action.cachedField.SetValue(script, oldVal + intVal); if (action.hasDuration) { DurationManager.Add(action); } } else if (action.cachedField.GetValue(script) is float) { float intVal = float.Parse(action.fieldValue); float oldVal = (float)action.cachedField.GetValue(script); action.cachedField.SetValue(script, oldVal + intVal); if (action.hasDuration) { DurationManager.Add(action); } } else if (action.cachedField.GetValue(script) is double) { double intVal = double.Parse(action.fieldValue); double oldVal = (double)action.cachedField.GetValue(script); action.cachedField.SetValue(script, oldVal + intVal); if (action.hasDuration) { DurationManager.Add(action); } } } } //Order cooldowntimes List <CooldownSettings> sortedList = action.cooldownSettings.OrderByDescending(o => o.cooldownTime).ToList(); foreach (CooldownSettings cds in sortedList) { //This action if (cds.options[cds.selOption] == "This Action") { if (action.cooldownGO != null) { MonoBehaviour.Destroy(action.cooldownGO); } GameObject go = new GameObject(name + " Cooldown"); action.cooldownGO = go.AddComponent <CooldownManager>(); action.cooldownGO.Init(action, cds); if (sortedList.IndexOf(cds) > 0) { action.cooldownGO.exclusions.Add(this); } } else if (cds.options[cds.selOption] == "Type") { if (InventoryDatabase.Instance != null) { ElementType e = InventoryDatabase.FindElementType(cds.selectedType); if (e != null) { if (e.cooldownGO != null) { MonoBehaviour.Destroy(e.cooldownGO); } GameObject go = new GameObject(name + " Cooldown"); e.cooldownGO = go.AddComponent <CooldownManager>(); e.cooldownGO.Init(e, cds); if (sortedList.IndexOf(cds) > 0) { e.cooldownGO.exclusions.Add(this); } } } } else if (cds.options[cds.selOption] == "This Element") { if (InventoryDatabase.Instance != null) { if (this.cooldownGO != null) { MonoBehaviour.Destroy(this.cooldownGO); } GameObject go = new GameObject(name + " Cooldown"); this.cooldownGO = go.AddComponent <CooldownManager>(); this.cooldownGO.Init(this, cds); if (sortedList.IndexOf(cds) > 0) { this.cooldownGO.exclusions.Add(this); } } } } if (action.destroyAfterUse) { if (stack > 1) { stack--; } else { //Destroy this item slot.inventoryElement = Empty; } } } } else { Debug.Log(this.name + " is on cooldown."); } }
// Use this for initialization void Start() { // ----------------------------------------- // ------------ INITIALIZATIONS ------------ // ----------------------------------------- CanvasHandCursor = GameObject.Find("CanvasHandCursor"); // Disable handcursor in execution mode TODO all disable in testmode, enable in production bodyManager = GameObject.Find("BodyManager"); KinectManager = GameObject.Find("KinectManager"); if (KinectManager == null) { return; } _kinectManager = KinectManager.GetComponent <KinectManager>(); _interactionManager = _kinectManager.GetComponent <InteractionManager>(); if (CanvasHandCursor.activeSelf) { _interactionManager.enabled = false; CanvasHandCursor.gameObject.SetActive(false); } Debug.Log("IsUserDetected: " + _kinectManager.IsUserDetected()); _exerciseExecutionValidationManager = ExerciseExecutionValidationManager.GetComponent <ExerciseExecutionValidationManager>(); // Reference to exercise data of current user // _currentExerciseData = UserDataObject.currentUser.exerciseData[PlayerPrefs.GetInt("CurrentExerciseId")]; _currentExerciseData = UserDataObject.GetCurrentExercise(); _lastExercise = UserDataObject.GetLastTierExercise(); // Duration manager _durationManager = durationManager.GetComponent <DurationManager>(); _minTimeAlreadyReached = false; _repsIterator = 0; _methodCheckedArray = new bool[UserDataObject.GetCurrentChecksArray().Length]; // ----------------------------------------- // ------------- UI COMPONENTS ------------- // ----------------------------------------- // Exercise name titleText.text = UserDataObject.GetCurrentExerciseName().ToUpper(); standingLegText.text = UserDataObject.GetCurrentSide().direction; successPanel = successPanel.GetComponent <CanvasGroup>(); // TODO implement success animation for rep foreach (var check in UserDataObject.GetCurrentChecksArray()) { GameObject gameObjectCheckItem = Instantiate(checkItem); CheckItem currentCheckItem = gameObjectCheckItem.GetComponent <CheckItem>(); currentCheckItem.methodName = check.methodName; currentCheckItem.description.text = check.description; checkItemList.Add(currentCheckItem); gameObjectCheckItem.transform.SetParent(checkSpacer, false); } // Array of Toggles _toggleArray = new Toggle[UserDataObject.GetCurrentRepetitionsArray().Length]; // Create and check toggles for each rep of current exercise foreach (var repetition in UserDataObject.GetCurrentRepetitionsArray()) { GameObject gameObjectToggle = Instantiate(toggle); Toggle currentToggle = gameObjectToggle.GetComponent <Toggle>(); _toggleArray[Array.IndexOf(UserDataObject.GetCurrentRepetitionsArray(), repetition)] = currentToggle; // Check if exercise not already accomplished if (!_currentExerciseData.accomplished) { // look for accomplished reps, check regarding toggles and set current rep if (repetition.accomplished) { _repsIterator += 1; currentToggle.GetComponent <Toggle>().isOn = true; } else if (_currentRepetition == null) { _currentRepetition = repetition; } } else // If exercise already accomplished { // Set first rep as current rep if (_currentRepetition == null) { repetition.attempts = 0; repetition.confidence = 0.0f; repetition.userTime = 0.0f; _currentRepetition = repetition; } } // Append GO to group gameObjectToggle.transform.SetParent(toggleGroup, false); } textReps.text = "Reps " + _repsIterator + "/" + UserDataObject.GetCurrentRepetitionsArray().Length; // Set ID of current repetition PlayerPrefs.SetInt("CurrentRepetitionId", Array.IndexOf(UserDataObject.GetCurrentRepetitionsArray(), _currentRepetition)); // ----------------------------------------- // ---------------- KINECT ----------------- // ----------------------------------------- _bodyManager = bodyManager.GetComponent <BodyManager>(); if (_bodyManager == null) { return; } _kinectSensor = _bodyManager.GetSensor(); _bodies = _bodyManager.GetBodies(); Debug.Log(_bodyManager + " | " + _bodies); // Initialize gesture detector object _gestureDetectorList = new List <GestureDetector>(); for (int bodyIndex = 0; bodyIndex < _bodies.Length; bodyIndex++) { _gestureDetectorList.Add(new GestureDetector(_kinectSensor)); } // Foot joints for getting positions _jointFootRight = KinectInterop.JointType.FootRight; _jointFootLeft = KinectInterop.JointType.FootLeft; _startingHeightDifference = UserDataObject.GetCurrentExerciseStartingHeightDifference(); heightTestIterator = 0; // Initial foot position if (_kinectManager.IsUserDetected()) { long userId = _kinectManager.GetPrimaryUserID(); if (_kinectManager.IsJointTracked(userId, (int)_jointFootRight) && _kinectManager.IsJointTracked(userId, (int)_jointFootLeft)) { _initialStartingHeightLeft = _kinectManager.GetJointKinectPosition(userId, (int)_jointFootLeft).y; _initialStartingHeightRight = _kinectManager.GetJointKinectPosition(userId, (int)_jointFootRight).y; initialLeftFootText.text += _initialStartingHeightLeft.ToString(); initialRightFootText.text += _initialStartingHeightRight.ToString(); } } _bothFeetUp = false; _inStartingPosition = false; if (UserDataObject.GetCurrentExerciseFileName() == "WalkForward") { _progressMinConfidence = 0.8f; } if (UserDataObject.GetCurrentExerciseFileName() == "BobOne") { _progressMinConfidence = 0.4f; } Debug.Log("_progressMinConfidence: " + _progressMinConfidence); }