Exemple #1
0
    private void SetEquationUpdateActive(bool isActive)
    {
        if (isActive)
        {
            if (mEquationRout != null)
            {
                StopCoroutine(mEquationRout);
            }
            mEquationRout = StartCoroutine(DoEquationUpdate());
        }
        else
        {
            if (mEquationRout != null)
            {
                StopCoroutine(mEquationRout);
                mEquationRout = null;
            }

            if (equationOp1Anim)
            {
                equationOp1Anim.Stop();
            }
            if (equationOp2Anim)
            {
                equationOp2Anim.Stop();
            }
            if (equationAnsAnim)
            {
                equationAnsAnim.Stop();
            }

            if (equationOp1Text)
            {
                equationOp1Text.text = "";
            }
            if (equationOp2Text)
            {
                equationOp2Text.text = "";
            }
            if (equationAnsText)
            {
                equationAnsText.text = "";
            }

            if (equationOpGO)
            {
                equationOpGO.SetActive(false);
            }
            if (equationEqGO)
            {
                equationEqGO.SetActive(false);
            }

            mEquationGrp = null;
        }
    }
Exemple #2
0
    void OnGroupEval(BlobConnectController.Group grp)
    {
        //check if correct
        float op1, op2, eq;

        grp.GetNumbers(out op1, out op2, out eq);

        bool isCorrect = false;

        switch (grp.connectOp.op)
        {
        case OperatorType.Multiply:
            isCorrect = op1 * op2 == eq;
            break;

        case OperatorType.Divide:
            isCorrect = op1 / op2 == eq;
            break;
        }

        Blob        blobLeft = grp.blobOpLeft, blobRight = grp.blobOpRight, blobEq = grp.blobEq;
        BlobConnect connectOp = grp.connectOp, connectEq = grp.connectEq;

        if (isCorrect)
        {
            //do sparkly thing for blobs
            blobLeft.state  = Blob.State.Correct;
            blobRight.state = Blob.State.Correct;
            blobEq.state    = Blob.State.Correct;

            //clean out op
            connectOp.state = BlobConnect.State.Correct;
            connectEq.state = BlobConnect.State.Correct;

            if (mDragIndicatorRout != null)
            {
                HideDrag();
            }
        }
        else
        {
            //do error thing for blobs
            blobLeft.state  = Blob.State.Error;
            blobRight.state = Blob.State.Error;
            blobEq.state    = Blob.State.Error;

            //clean out op
            connectOp.state = BlobConnect.State.Error;
            connectEq.state = BlobConnect.State.Error;

            //restart drag show
            if (mDragIndicatorRout != null)
            {
                OnSignalDragShow();
            }
        }

        connectControl.ClearGroup(grp);

        if (isCorrect && signalInvokeCorrect)
        {
            signalInvokeCorrect.Invoke();
        }
    }
Exemple #3
0
 void OnGroupAdded(BlobConnectController.Group grp)
 {
     mEquationGrp = grp;
 }
Exemple #4
0
    IEnumerator DoEquationUpdate()
    {
        var wait = new WaitForSeconds(0.1f);

        var playCtrl = PlayController.instance;

        //TODO: assumes simple equation: num op num = answer
        while (playCtrl)
        {
            bool isOpActive = false;
            bool isEqActive = false;

            //grab blob that is dragging, and one that is highlighted
            Blob blobDragging  = playCtrl.connectControl.curBlobDragging;
            Blob blobHighlight = null;

            var blobs = playCtrl.blobSpawner.blobActives;
            for (int i = 0; i < blobs.Count; i++)
            {
                var blob = blobs[i];
                if (blob.isHighlighted)
                {
                    if (blob != blobDragging)
                    {
                        blobHighlight = blob;
                    }
                }
            }

            //check for group
            if (mEquationGrp == null || !playCtrl.connectControl.IsGroupActive(mEquationGrp))
            {
                if (playCtrl.connectControl.curGroupDragging != null)
                {
                    mEquationGrp = playCtrl.connectControl.curGroupDragging;
                }
                else if (playCtrl.connectControl.activeGroup != null)
                {
                    mEquationGrp = playCtrl.connectControl.activeGroup;
                }
                else
                {
                    mEquationGrp = null;
                }
            }

            if (mEquationGrp != null)
            {
                //change grp?
                if (playCtrl.connectControl.curGroupDragging != null)
                {
                    mEquationGrp = playCtrl.connectControl.curGroupDragging;
                }
                else if (blobHighlight)
                {
                    //check if highlighted blob is in a group
                    var otherGrp = playCtrl.connectControl.GetGroup(blobHighlight);
                    if (otherGrp != null)
                    {
                        mEquationGrp = otherGrp;
                    }
                }

                var grp = mEquationGrp;

                if (equationOp1Anim)
                {
                    equationOp1Anim.Stop();
                }
                if (equationOp2Anim)
                {
                    equationOp2Anim.Stop();
                }

                isOpActive = true;

                string op1Text = grp.blobOpLeft ? grp.blobOpLeft.number.ToString() : "";
                string op2Text = grp.blobOpRight ? grp.blobOpRight.number.ToString() : "";

                //check answer blob
                if (grp.blobEq)
                {
                    if (equationAnsAnim)
                    {
                        equationAnsAnim.Stop();
                    }

                    if (equationAnsText)
                    {
                        equationAnsText.text = grp.blobEq.number.ToString();
                    }
                }
                else
                {
                    if (equationAnsAnim)
                    {
                        equationAnsAnim.Play(0);
                    }

                    //update answer text
                    if (equationAnsText)
                    {
                        Blob blobSelect = null;

                        if (playCtrl.connectControl.curGroupDragging == grp)
                        {
                            //select highlighted blob if it's not in our group
                            if (blobHighlight && !grp.IsBlobInGroup(blobHighlight))
                            {
                                blobSelect = blobHighlight;
                            }

                            isEqActive = true;
                        }
                        else if (playCtrl.connectControl.curGroupDragging == null)
                        {
                            //grab dragging blob and ensure it is highlighting one of the blobs in our group
                            if (playCtrl.connectControl.curBlobDragging)
                            {
                                if (grp.blobOpLeft && grp.blobOpLeft.isHighlighted)
                                {
                                    //need to swap operand texts
                                    var _txt = op1Text;
                                    op1Text = op2Text;
                                    op2Text = _txt;
                                }

                                blobSelect = playCtrl.connectControl.curBlobDragging;

                                isEqActive = (grp.blobOpLeft && grp.blobOpLeft.isHighlighted) || (grp.blobOpRight && grp.blobOpRight.isHighlighted);
                            }
                        }

                        if (blobSelect)
                        {
                            equationAnsText.text = blobSelect.number.ToString();
                        }
                        else
                        {
                            equationAnsText.text = "";
                        }
                    }
                }

                if (equationOp1Text)
                {
                    equationOp1Text.text = op1Text;
                }
                if (equationOp2Text)
                {
                    equationOp2Text.text = op2Text;
                }
            }
            else
            {
                if (equationOp1Anim)
                {
                    equationOp1Anim.Play(0);
                }
                if (equationOp2Anim)
                {
                    equationOp2Anim.Play(0);
                }
                if (equationAnsAnim)
                {
                    equationAnsAnim.Stop();
                }

                if (blobDragging)
                {
                    if (equationOp1Text)
                    {
                        equationOp1Text.text = blobDragging.number.ToString();
                    }

                    isOpActive = true;

                    if (blobHighlight)
                    {
                        if (equationOp2Text)
                        {
                            equationOp2Text.text = blobHighlight.number.ToString();
                        }
                    }
                    else
                    {
                        if (equationOp2Text)
                        {
                            equationOp2Text.text = "";
                        }
                    }
                }
                else if (blobHighlight)
                {
                    if (equationOp1Text)
                    {
                        equationOp1Text.text = blobHighlight.number.ToString();
                    }
                    if (equationOp2Text)
                    {
                        equationOp2Text.text = "";
                    }
                }
                else
                {
                    if (equationOp1Text)
                    {
                        equationOp1Text.text = "";
                    }
                    if (equationOp2Text)
                    {
                        equationOp2Text.text = "";
                    }
                }

                if (equationAnsText)
                {
                    equationAnsText.text = "";
                }
            }

            if (equationOpGO)
            {
                equationOpGO.SetActive(isOpActive);
            }
            if (equationEqGO)
            {
                equationEqGO.SetActive(isEqActive);
            }

            yield return(wait);
        }

        mEquationRout = null;
        SetEquationUpdateActive(false);
    }
Exemple #5
0
    void OnGroupEval(BlobConnectController.Group grp)
    {
        float op1, op2, eq;

        grp.GetNumbers(out op1, out op2, out eq);

        var op = grp.connectOp.op;

        bool isCorrect = false;

        switch (op)
        {
        case OperatorType.Multiply:
            isCorrect = op1 * op2 == eq;
            break;

        case OperatorType.Divide:
            isCorrect = op1 / op2 == eq;
            break;
        }

        Blob        blobLeft = grp.blobOpLeft, blobRight = grp.blobOpRight, blobEq = grp.blobEq;
        BlobConnect connectOp = grp.connectOp, connectEq = grp.connectEq;

        if (isCorrect)
        {
            //do sparkly thing for blobs
            blobLeft.state  = Blob.State.Correct;
            blobRight.state = Blob.State.Correct;
            blobEq.state    = Blob.State.Correct;

            blobSpawner.RemoveFromActive(blobLeft);
            blobSpawner.RemoveFromActive(blobRight);
            blobSpawner.RemoveFromActive(blobEq);

            //clean out op
            connectOp.state = BlobConnect.State.Correct;
            connectEq.state = BlobConnect.State.Correct;

            //increment and refresh combo
            if (mComboRout == null)
            {
                mComboRout = StartCoroutine(DoComboUpdate());
            }

            comboCurTime = 0f;
            comboCount++;

            //add score
            if (isHintShown)
            {
                curScore += GameData.instance.correctDecayPoints;
            }
            else
            {
                curScore += GameData.instance.correctPoints * comboCount;
            }

            //go to next round
            mIsAnswerCorrectWait = false;
        }
        else
        {
            //do error thing for blobs
            blobLeft.state  = Blob.State.Error;
            blobRight.state = Blob.State.Error;
            blobEq.state    = Blob.State.Error;

            //clean out op
            connectOp.state = BlobConnect.State.Error;
            connectEq.state = BlobConnect.State.Error;

            //decrement combo count
            if (mComboRout != null)
            {
                if (comboCount > 0)
                {
                    comboCount--;
                }

                if (comboCount == 0)
                {
                    StopCoroutine(mComboRout);
                    mComboRout = null;
                }

                comboCurTime = 0f;
            }

            mistakeCount++;
            mMistakeRoundCount++;
        }

        connectControl.ClearGroup(grp);

        groupEvalCallback?.Invoke(new Operation {
            operand1 = (int)op1, operand2 = (int)op2, op = op
        }, (int)eq, isCorrect);
    }