Beispiel #1
0
    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);
        }
    }
Beispiel #2
0
    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());
    }
Beispiel #3
0
    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);
    }
Beispiel #4
0
    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();
        }
    }
Beispiel #5
0
    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);
        }
    }
Beispiel #6
0
 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);
 }
Beispiel #7
0
    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();
        }
    }
Beispiel #8
0
    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);
    }
Beispiel #9
0
    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;
    }
Beispiel #10
0
    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();
        }
    }
Beispiel #11
0
 public bool IsFocusedOn(PlaceValueCtrl inColumn)
 {
     return(_currentFocus == inColumn);
 }
Beispiel #12
0
 public void Init(MyScreen screen, PlaceValueCtrl ones, PlaceValueCtrl tens)
 {
     _screen = screen;
     _ones   = ones;
     _tens   = tens;
 }
Beispiel #13
0
 private void Awake()
 {
     m_PlaceValue = GetComponent <PlaceValueCtrl>();
     Assert.True(m_PlaceValue != null, "PlaceValueCtrl exists on GameObject.");
 }