Beispiel #1
0
 void Awake()
 {
     durationManager = this;
 }
Beispiel #2
0
    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);
    }