public void CheckSolution() { if (!_isActive) { return; } ResetRecall(); int value = _screen.CalculateCurrentValue(); if (_screen.launchValid && value == Session.instance.currentLevel.value) { _screen.queue.EndlessExit(true, true); EndRecall(); _screen.tutorial.Show("showHintGo", true, _screen.hud.launchBtn.position, _screen.hud.launchBtn); _screen.expression.ResetHintingFades(); // reset hinting fades _currentFocus = null; //_screen.input.EnableAllInput(true); _screen.input.EnableAllInput(false, GameplayInput.SUBMIT, GameplayInput.SUBMIT_NUMPAD, GameplayInput.TOGGLE_NUMBER_PAD, GameplayInput.NUMBER_PAD_ARROWS); _screen.input.EnableCountingAndPause(true); _screen.queue.EndlessExit(true, true); _ones.ClearHints(); _tens.ClearHints(); SetActive(false); } }
public bool CheckAdditionalCarryover() { if (!isActive) { return(false); } _screen.UpdateAddends(); if (_ones.numCreatures != _ones.targetNumCreatures) { bool bIsCarryover = Session.instance.currentLevel.requiresMultipleCarryover && (Session.instance.currentLevel.isTargetNumber ? _ones.targetNumCreatures == 10 : _ones.targetNumCreatures == _ones.numCreatures + 10); if (bIsCarryover) { StartMultipleCarryover(); return(true); } else { _ones.StartHintCounting(_screen.EnableOnesDragIn); _currentFocus = _ones; _tens.ClearHints(); _screen.tutorial.HideAll(); _screen.queue.EndlessEnter(true, false); _screen.expression.GetComponent <Animator>().SetBool("hintFadeTens", true); _screen.input.EnableAllInput(false); return(true); } } return(CheckTens()); }
public bool CheckCarryover(PlaceValueCtrl ctrl, bool inbForceCountOnes = false) { if (!_isActive) { return(false); } if (ctrl != _ones) { return(false); } if (Session.instance.currentLevel.isAdditionProblem) { if (_ones.numCreatures == _ones.targetNumCreatures) { _screen.queue.EndlessExit(true, false); if (_ones.numCreatures > 9) { _ones.ClearHints(); _screen.tutorial.Show("showHintDragCarryover", true, Vector3.zero); //showHintToTens EndRecall(); _screen.input.EnableAllInput(false, GameplayInput.CONVERT_TO_TENS); _screen.input.EnableCountingAndPause(true); _screen.convertNestCtrl.GetComponent <ConvertNestCtrl>().ToggleVisibility(true, this.isActive); _screen.expression.GetComponent <Animator>().SetBool("hintFadeTens", false); _screen.expression.GetComponent <Animator>().SetBool("hintFadeOnes", false); _screen.expression.GetComponent <Animator>().SetBool("hintFadeTensExtra", false); _currentFocus = null; return(true); } else if (inbForceCountOnes) { return(false); } else if (Session.instance.currentLevel.tensQueueEnabled) { return(CheckTens()); } else { return(CheckAdditionalCarryover()); } } } else if (Session.instance.currentLevel.isSubtractionProblem) { if (_ones.numCreatures == _screen.valueOnesAddend) { return(CheckTens()); } } return(false); }
private void StartCounting() { if (!_isActive) { return; } CheckSolution(); if (!_isActive) { return; } if (Session.instance.currentLevel.isSubtractionProblem) { _isBorrowing = CheckBorrowing(); if (!_isBorrowing) { _ones.StartHintCounting(_screen.EnableOnesDragOut); _currentFocus = _ones; _screen.expression.GetComponent <Animator>().SetBool("hintFadeTens", true); _screen.tutorial.HideAll(); _tens.ClearHints(); } } else if (Session.instance.currentLevel.isAdditionProblem) { _isBorrowing = false; if (CheckCarryover(_screen.onesColumn, true)) { return; } bool bIsCarryover = Session.instance.currentLevel.isTargetNumber ? _ones.targetNumCreatures == 10 : _ones.targetNumCreatures == _ones.numCreatures + 10; if (bIsCarryover && Session.instance.currentLevel.requiresMultipleCarryover) { if (Session.instance.currentLevel.isTargetNumber) { StartMultipleCarryover(); return; } _ones.targetNumCreatures = _ones.numCreatures; } _ones.StartHintCounting(_screen.EnableOnesDragIn); _currentFocus = _ones; _screen.expression.GetComponent <Animator>().SetBool("hintFadeTens", true); _tens.ClearHints(); _screen.tutorial.HideAll(); } }
void OnMouseDrag() { if (!isDragging) { return; } Vector3 currPos = new Vector3(Input.mousePosition.x - mDragOffset.x, Input.mousePosition.y - mDragOffset.y, mDragDist.z); Vector3 worldPos = Camera.main.ScreenToWorldPoint(currPos); // clamp worldPos to stay within the bounds of the display worldPos.x = Mathf.Clamp(worldPos.x, CameraUtils.cameraRect.xMin + this.GetComponent <SpriteRenderer>().bounds.extents.x, CameraUtils.cameraRect.xMax - this.GetComponent <SpriteRenderer>().bounds.extents.x); worldPos.y = Mathf.Clamp(worldPos.y, CameraUtils.cameraRect.yMin + this.GetComponent <SpriteRenderer>().bounds.extents.y, CameraUtils.cameraRect.yMax - this.GetComponent <SpriteRenderer>().bounds.extents.x); this.transform.position = worldPos; PlaceValueCtrl ones = container.controller.screen.GetComponent <MyScreen>().onesColumn; PlaceValueCtrl tens = container.controller.screen.GetComponent <MyScreen>().tensColumn; // check for bounding box intersections between group and place value columns bool onesPlacement = this.GetComponent <SpriteRenderer>().bounds.Intersects(ones.bounds) && (ones.numCreatures + numOnes + numTens * 10) <= ones.creatureMax && (!isMultipleOfTen || ones.allowDragConvert); bool tensPlacement = this.GetComponent <SpriteRenderer>().bounds.Intersects(tens.bounds) && (tens.numCreatures + numTens) <= tens.creatureMax && !onesPlacement; // force a show of drop states if the number will be distributed between both columns if (numOnes != 0 && numTens != 0) { onesPlacement = tensPlacement = onesPlacement || tensPlacement; } // update place value column over states ones.UpdateDragOver(onesPlacement, (numOnes == 0 ? numTens * 10 : numOnes)); if (numTens != 0) { tens.UpdateDragOver(tensPlacement, numTens); } }
bool CheckBorrowing() { if (!_isActive) { return(false); } //if (_ones.numCreatures < _ones.addend) { if (_ones.numCreatures < _screen.valueOnesAddend) { _screen.tutorial.Show("showHintDragBorrow", true, Vector3.zero); //showHintToTens _screen.input.EnableAllInput(false, GameplayInput.CONVERT_TO_ONES, GameplayInput.TENS_COLUMN); _screen.input.EnableCountingAndPause(true); _screen.convertNestCtrl.ShowEmptyTenFrame(true); _screen.expression.GetComponent <Animator>().SetBool("hintFadeTens", false); _screen.expression.GetComponent <Animator>().SetBool("hintFadeOnes", false); _currentFocus = null; return(true); } return(false); }
void RemoveFromContainerAddToPlaceValue(PlaceValueCtrl placeValueColumn, bool correctedColumn = false) { bool valid = false; if (placeValueColumn) { valid = placeValueColumn.AddDragGroup(this); } if (valid) { if (placeValueColumn.value == 1) { if (correctedColumn) { EnlearnInstance.I.LogActions(EnlearnInstance.Action.AddChickenToTens); } else { EnlearnInstance.I.LogActions(EnlearnInstance.Action.AddToOnes); } } else if (placeValueColumn.value == 10) { EnlearnInstance.I.LogActions(EnlearnInstance.Action.AddToTens); } Cleanup(); } else { CreatureCtrl[] children = this.GetComponentsInChildren <CreatureCtrl>(); children[0].Drop(); Cleanup(); //SnapBack(); } }
public bool CheckTens() { CheckSolution(); if (!isActive) { return(false); } Assert.True(Session.instance.currentLevel.tensQueueEnabled || Session.instance.currentLevel.usesSubZone, "Tens dragging is available."); _screen.UpdateAddends(); EndRecall(); PlaceValueCtrl.ColumnCounting callback; if (Session.instance.currentLevel.isAdditionProblem) { callback = _screen.EnableTensDragIn; } else { callback = _screen.EnableTensDragOut; } _screen.onesColumn.ClearHints(); _screen.tensColumn.StartHintCounting(callback); _currentFocus = _tens; _screen.input.EnableAllInput(false); _screen.tutorial.HideAll(); _screen.expression.GetComponent <Animator>().SetBool("hintFadeTens", false); _screen.expression.GetComponent <Animator>().SetBool("hintFadeOnes", true); _screen.expression.GetComponent <Animator>().SetBool("hintFadeTensExtra", false); return(true); }
void OnMouseUp() { if (!isDragging) { return; } StopDrag(); // check for bounding box intersections between group and place value subtraction car Bounds dragGroupBounds = dragGroup.GetComponent <SpriteRenderer>().bounds; int dragValue = dragGroup.GetComponent <DragGroup>().value; PlaceValueCtrl draggedColumn = null; if (dragGroupBounds.Intersects(column.bounds)) { draggedColumn = column; } else if (convertColumn != null && dragGroupBounds.Intersects(convertColumn.bounds) && (value == 1 || convertColumn.allowDragConvert)) { draggedColumn = convertColumn; } if (draggedColumn != null) { bool bFlashAlt = false; if (value == 1 && draggedColumn == convertColumn) { draggedColumn = column; bFlashAlt = true; } int creaturesToAdd = (dragValue / draggedColumn.value); if (draggedColumn.numCreatures + creaturesToAdd <= draggedColumn.creatureMax) { if (draggedColumn.value == 1) { //Genie.instance.LogEvent(OE_INTERACT.Create(OE_INTERACT.Type.DROP, "gameplay.onesColumn"); Genie.I.LogEvent(OE_INTERACT.Create(OE_INTERACT.Type.DROP, "gameplay.onesColumn")); } else { //Genie.instance.LogEvent(OE_INTERACT.Create(OE_INTERACT.Type.DROP, "gameplay.tensColumn"); Genie.I.LogEvent(OE_INTERACT.Create(OE_INTERACT.Type.DROP, "gameplay.tensColumn")); } // remove creatures from list CreatureCtrl[] children = dragGroup.GetComponentsInChildren <CreatureCtrl>(); for (int i = 0; i < children.Length; ++i) { _creatures.Remove(children[i]); } // place into column if (draggedColumn.numCreatures > 9) { dragGroup.GetComponent <DragGroup>().SetCreaturesBool("fullTen", true); } dragGroup.GetComponent <DragGroup>().SetCreaturesBool("inColumn", true); dragGroup.GetComponent <DragGroup>().SetCreaturesBool("inCar", false); dragGroup.GetComponent <DragGroup>().SetCreaturesTrigger("reset"); if (creaturesToAdd > 1) { column.Explode(dragGroup.GetComponent <DragGroup>()); draggedColumn.screen.Poof(); SoundManager.instance.PlayOneShot(SoundManager.instance.chickenConvertToOnes); } else { draggedColumn.AddDragGroup(dragGroup.GetComponent <DragGroup>()); if (bFlashAlt) { SoundManager.instance.PlayOneShot(SoundManager.instance.chickenSnapBack); convertColumn.ShowIncorrectFeedback(); } } } else { SnapBack(); } } else { //Genie.instance.LogEvent(OE_INTERACT.Create(OE_INTERACT.Type.DROP, "gameplay.sub.snapback"); //Genie.I.LogEvent(OE_INTERACT.Create(OE_INTERACT.Type.DROP, "gameplay.sub.snapback")); SnapBack(); } column.ForceDragOverFalse(); if (convertColumn != null) { convertColumn.UpdateDragOver(false, 10); convertColumn.ForceDragOverFalse(); } // dispose of drag group Destroy(dragGroup); dragGroup = null; }
void OnMouseUp() { if (!isDragging) { return; } StopDrag(); PlaceValueCtrl ones = container.controller.screen.GetComponent <MyScreen>().onesColumn; PlaceValueCtrl tens = container.controller.screen.GetComponent <MyScreen>().tensColumn; // update place value column over states ones.UpdateDragOver(false, (numOnes == 0 ? numTens * 10 : numOnes)); tens.UpdateDragOver(false, numTens); // check for bounding box intersections between group and place value columns bool onesPlacement = this.GetComponent <SpriteRenderer>().bounds.Intersects(ones.bounds) && (ones.numCreatures + numOnes + numTens * 10) <= ones.creatureMax && (!isMultipleOfTen || ones.allowDragConvert); bool tensPlacement = this.GetComponent <SpriteRenderer>().bounds.Intersects(tens.bounds) && (tens.numCreatures + numTens) <= tens.creatureMax && !onesPlacement; if ((onesPlacement || tensPlacement) && !isMultipleOfTen && isGreaterThanNine) { //NOTE: this probably doesn't happen any more, should confirm //Genie.instance.LogEvent(OE_INTERACT.Create(OE_INTERACT.Type.DROP, "gameplay.eitherColumn"); Genie.I.LogEvent(OE_INTERACT.Create(OE_INTERACT.Type.DROP, "gameplay.eitherColumn")); ones.ForceDragOverFalse(value); RemoveFromContainerDistributeToPlaceValue(); } else if (onesPlacement && !tensPlacement && isLessThanTen) { //Genie.instance.LogEvent(OE_INTERACT.Create(OE_INTERACT.Type.DROP, "gameplay.onesColumn"); Genie.I.LogEvent(OE_INTERACT.Create(OE_INTERACT.Type.DROP, "gameplay.onesColumn")); // if on the correct place-value column, snap to place-value column (remove from queue) // try to place in ones column ones.ForceDragOverFalse(value); RemoveFromContainerAddToPlaceValue(ones); } else if (tensPlacement && !onesPlacement && isMultipleOfTen) { //Genie.instance.LogEvent(OE_INTERACT.Create(OE_INTERACT.Type.DROP, "gameplay.tensColumn"); Genie.I.LogEvent(OE_INTERACT.Create(OE_INTERACT.Type.DROP, "gameplay.tensColumn")); // try to place in tens column tens.ForceDragOverFalse(value); RemoveFromContainerAddToPlaceValue(tens); } else if (tensPlacement && !onesPlacement && !isMultipleOfTen) { //Genie.instance.LogEvent(OE_INTERACT.Create(OE_INTERACT.Type.DROP, "gameplay.tensColumn"); Genie.I.LogEvent(OE_INTERACT.Create(OE_INTERACT.Type.DROP, "gameplay.tensColumn")); // highlight tens column as incorrect placement (reminder) tens.ShowIncorrectFeedback(); SoundManager.instance.PlayOneShot(SoundManager.instance.chickenSnapBack); // try to place in ones column ones.ForceDragOverFalse(value); RemoveFromContainerAddToPlaceValue(ones, true); } else if (onesPlacement && isMultipleOfTen && ones.numCreatures < 10 && ones.allowDragConvert) { //Genie.instance.LogEvent(OE_INTERACT.Create(OE_INTERACT.Type.DROP, "gameplay.onesColumn"); Genie.I.LogEvent(OE_INTERACT.Create(OE_INTERACT.Type.DROP, "gameplay.onesColumn")); EnlearnInstance.I.LogActions(EnlearnInstance.Action.AddNestToOnes); // place a 10s in 1s column ones.ForceDragOverFalse(value); CreatureCtrl[] children = this.GetComponentsInChildren <CreatureCtrl>(); bool bIsBrown = children[0].color == CreatureCtrl.COLOR_BROWN; SoundManager.instance.PlayOneShot(SoundManager.instance.chickenConvertToOnes); ones.Add(10, bIsBrown); // add explosion effects container.controller.screen.Poof(); Cleanup(); } else { if (onesPlacement) { // update place value column over states ones.ForceDragOverFalse(value); ones.GetComponent <Animator>().SetTrigger("correct"); } if (tensPlacement) { tens.ForceDragOverFalse(value); tens.GetComponent <Animator>().SetTrigger("correct"); } // else, if we're overlapping with both or neither // snap back to QueueContainer //SnapBack(); CreatureCtrl[] children = this.GetComponentsInChildren <CreatureCtrl>(); children[0].Drop(); Cleanup(); } }
public bool IsFocusedOn(PlaceValueCtrl inColumn) { return(_currentFocus == inColumn); }
public void Init(MyScreen screen, PlaceValueCtrl ones, PlaceValueCtrl tens) { _screen = screen; _ones = ones; _tens = tens; }
private void Awake() { m_PlaceValue = GetComponent <PlaceValueCtrl>(); Assert.True(m_PlaceValue != null, "PlaceValueCtrl exists on GameObject."); }