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; } }
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(); } }
void OnGroupAdded(BlobConnectController.Group grp) { mEquationGrp = grp; }
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); }
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); }