Example #1
0
 //if gemms were deleted, drop remaining gems to fill in gaps
 private void SetupRemainingGemmsForDrop()
 {
     for (int y = 1; y < boardDimY; y++)
     {
         for (int x = 0; x < boardDimX; x++)
         {
             if (!GemmGridLayout[x, y].destroyed)
             {
                 int dropDistance = 0;
                 for (int i = 1; i <= y; i++)
                 {
                     if (GemmGridLayout[x, y - i].destroyed)
                     {
                         dropDistance++;
                     }
                 }
                 if (dropDistance > 0)
                 {
                     Gemm temp = GemmGridLayout[x, y - dropDistance];
                     GemmGridLayout[x, y - dropDistance]          = GemmGridLayout[x, y];
                     GemmGridLayout[x, y - dropDistance].dropDist = dropDistance;
                     GemmGridLayout[x, y] = temp;
                 }
             }
         }
     }
 }
Example #2
0
    //Instantiate Gemm in Setup Grid
    private void MakeGemm(GameObject gemmGObj, int x, int y)
    {
        int drop;

        if (isFirstDrop)
        {
            drop = 0;
        }
        else
        {
            drop = dropOffset;
        }
        GameObject currentGemm = (GameObject)Instantiate(gemmGObj, new Vector2((float)x, (float)y + (float)drop), Quaternion.identity);

        currentGemm.transform.parent = transform;
        GemmGridLayout[x, y]         = new Gemm {
            gemmGObj     = currentGemm,
            tagId        = currentGemm.tag,
            floodVisited = false,
            floodMatched = false,
            destroyed    = false,
            dropDist     = drop,
            gridXLoc     = x,
            gridYLoc     = y,
        };
    }
Example #3
0
    //adjusts gemm transparency (clone and gid)
    private Color ChangeGemmAlpha(Gemm gemm, float aVal)
    {
        Color gemmColor = gemm.gemmGObj.GetComponent <SpriteRenderer>().color;

        gemmColor.a = aVal;
        return(gemmColor);
    }
Example #4
0
 //makes gemm clone to display movement
 private void MakeGemmClone(Gemm origGemm, int x, int y)
 {
     gemmClone = new Gemm {
         gemmGObj = (GameObject)Instantiate(origGemm.gemmGObj, new Vector2(x, y), Quaternion.identity),
     };
     gemmClone.gemmGObj.GetComponent <SpriteRenderer>().color = ChangeGemmAlpha(gemmClone, overlayAlpha);
     isGemmCloneAlive = true;
 }
Example #5
0
    //Mark blob of same colored gemms; track with Floodmatchdict
    private void FloodMark(int x, int y, string origTag)
    {
        //create ToDo List
        Stack gemmStack = new Stack();

        gemmStack.Push(GemmGridLayout[x, y]);
        //while ToDo List not empty
        while (gemmStack.Count > 0)
        {
            Gemm gemmLFM = (Gemm)gemmStack.Pop();
            GemmGridLayout[gemmLFM.gridXLoc, gemmLFM.gridYLoc].floodVisited = true;
            if (gemmLFM.gemmGObj.tag == origTag)
            {
                GemmGridLayout[gemmLFM.gridXLoc, gemmLFM.gridYLoc].floodMatched = true;
                //create key to add to running list
                GemmLoc key = new GemmLoc {
                    gridXLoc = gemmLFM.gridXLoc,
                    gridYLoc = gemmLFM.gridYLoc,
                };
                if (!FloodMatchDict.ContainsKey(key))
                {
                    FloodMatchDict.Add(key, GemmGridLayout[gemmLFM.gridXLoc, gemmLFM.gridYLoc]);
                }
                //add appropriate cells around current to the ToDoList
                if (gemmLFM.gridXLoc > 0)
                {
                    if (!GemmGridLayout[gemmLFM.gridXLoc - 1, gemmLFM.gridYLoc].floodVisited && !GemmGridLayout[gemmLFM.gridXLoc - 1, gemmLFM.gridYLoc].destroyed)
                    {
                        gemmStack.Push(GemmGridLayout[gemmLFM.gridXLoc - 1, gemmLFM.gridYLoc]);
                    }
                }
                if (gemmLFM.gridXLoc < boardDimX - 1)
                {
                    if (!GemmGridLayout[gemmLFM.gridXLoc + 1, gemmLFM.gridYLoc].floodVisited && !GemmGridLayout[gemmLFM.gridXLoc + 1, gemmLFM.gridYLoc].destroyed)
                    {
                        gemmStack.Push(GemmGridLayout[gemmLFM.gridXLoc + 1, gemmLFM.gridYLoc]);
                    }
                }
                if (gemmLFM.gridYLoc > 0)
                {
                    if (!GemmGridLayout[gemmLFM.gridXLoc, gemmLFM.gridYLoc - 1].floodVisited && !GemmGridLayout[gemmLFM.gridXLoc, gemmLFM.gridYLoc - 1].destroyed)
                    {
                        gemmStack.Push(GemmGridLayout[gemmLFM.gridXLoc, gemmLFM.gridYLoc - 1]);
                    }
                }
                if (gemmLFM.gridYLoc < boardDimY - 1)
                {
                    if (!GemmGridLayout[gemmLFM.gridXLoc, gemmLFM.gridYLoc + 1].floodVisited && !GemmGridLayout[gemmLFM.gridXLoc, gemmLFM.gridYLoc + 1].destroyed)
                    {
                        gemmStack.Push(GemmGridLayout[gemmLFM.gridXLoc, gemmLFM.gridYLoc + 1]);
                    }
                }
            }
        }
    }
Example #6
0
    //shows rotation speed of gemm movement
    IEnumerator ShowGemmMovementEnum(int currTouchPosX, int currTouchPosY)
    {
        //inits
        movedGemm  = true;
        isRotating = true;
        float rotatePercent = 0.0f;

        rotationAngle = new Vector3(0, 0, 180.0f);
        GameObject gemRotator = new GameObject();

        gemRotator.transform.position = new Vector2((float)prevActiveTouchPos.x - (float)(prevActiveTouchPos.x - currTouchPosX) / 2.0f, (float)prevActiveTouchPos.y - (float)(prevActiveTouchPos.y - currTouchPosY) / 2.0f);

        // update involved gems's parent to gem Rotator
        GemmGridLayout[prevActiveTouchPos.x, prevActiveTouchPos.y].gemmGObj.transform.Rotate(0.0f, 0.0f, 180.0f, Space.Self);
        GemmGridLayout[currTouchPosX, currTouchPosY].gemmGObj.transform.Rotate(0.0f, 0.0f, 180.0f, Space.Self);
        GemmGridLayout[prevActiveTouchPos.x, prevActiveTouchPos.y].gemmGObj.transform.parent = GemmGridLayout[currTouchPosX, currTouchPosY].gemmGObj.transform.parent = null;
        GemmGridLayout[prevActiveTouchPos.x, prevActiveTouchPos.y].gemmGObj.transform.parent = GemmGridLayout[currTouchPosX, currTouchPosY].gemmGObj.transform.parent = gemRotator.transform;

        //rotate to desired positions
        while (rotatePercent <= 1.0f)
        {
            gemRotator.transform.eulerAngles = Vector3.Lerp(Vector3.zero, rotationAngle, rotatePercent);
            rotatePercent += rotatePercentIncrease;
            yield return(new WaitForSeconds(rotationTimeInterval));
        }

        //finalize rotation and movements
        gemRotator.transform.eulerAngles = rotationAngle;

        //reparent/unparent appropriately
        GemmGridLayout[prevActiveTouchPos.x, prevActiveTouchPos.y].gemmGObj.transform.parent = GemmGridLayout[currTouchPosX, currTouchPosY].gemmGObj.transform.parent = null;
        GemmGridLayout[prevActiveTouchPos.x, prevActiveTouchPos.y].gemmGObj.transform.parent = GemmGridLayout[currTouchPosX, currTouchPosY].gemmGObj.transform.parent = transform;

        //swap old gem and new gem in grid
        Gemm tempGem = GemmGridLayout[prevActiveTouchPos.x, prevActiveTouchPos.y];

        GemmGridLayout[prevActiveTouchPos.x, prevActiveTouchPos.y] = GemmGridLayout[currTouchPosX, currTouchPosY];
        GemmGridLayout[currTouchPosX, currTouchPosY] = tempGem;

        //update touch position
        prevActiveTouchPos.x = currTouchPosX;
        prevActiveTouchPos.y = currTouchPosY;

        //Cleanup
        Destroy(gemRotator);
        isRotating = false;

        //Count Move
        if (currNumMoves > 0)
        {
            currNumMoves--;
        }
        GameEventsScript.countMoveOld.Invoke(new GameEventsScript.CountMoveOldData(currNumMoves, movesPerRound));
    }
Example #7
0
    //Wrapper for showing gemm clone
    private void DisplayGemmClone(Vector2 touchPos)
    {
        //make gemm clone at cursor position
        int gridXPos = GetPosOnGrid(touchPos.x, boardDimX);
        int gridYPos = GetPosOnGrid(touchPos.y, boardDimY);

        prevActiveTouchPos = new Vector2Int(gridXPos, gridYPos);
        Gemm selectedGem = GemmGridLayout[gridXPos, gridYPos];

        MakeGemmClone(selectedGem, gridXPos, gridYPos);
        selectedGem.gemmGObj.GetComponent <SpriteRenderer>().color = ChangeGemmAlpha(selectedGem, underlayAlpha);
    }
Example #8
0
    //animate move Gemms down
    IEnumerator MoveGemsDownEnum(Gemm gemm, Vector2 start, Vector2 end)
    {
        areGemmsFalling = true;
        float fallPercent = 0.0f;

        while (fallPercent <= 1.0f)
        {
            gemm.gemmGObj.transform.position = Vector2.Lerp(start, end, fallPercent);
            fallPercent += fallPercentIncrease;
            yield return(new WaitForSeconds(fallTimeInterval));
        }
        gemm.gemmGObj.transform.position = end;
        areGemmsFalling = false;
    }
Example #9
0
    //Create Gemms in Standard Grid
    private void MakeGemmsInGrid()
    {
        GameObject randGemm;

        for (int y = 0; y < boardDimY; y++)
        {
            for (int x = 0; x < boardDimX; x++)
            {
                //List gemm options
                List <GameObject> availableGems = new List <GameObject>();
                availableGems.AddRange(GemmOptions);

                //detect if 2 in a row left and down when in row/column 3+
                //assign a random gemm that makes it so grid does not contain 3 in a rows
                while (true)
                {
                    randGemm = availableGems[UnityEngine.Random.Range(0, availableGems.Count)];
                    if (x > 1)
                    {
                        leftGemm = GemmGridLayout[x - 1, y];
                        if (randGemm.tag == leftGemm.tagId)
                        {
                            leftGemm = GemmGridLayout[x - 2, y];
                            if (randGemm.tag == leftGemm.tagId)
                            {
                                availableGems.Remove(randGemm);
                                continue;
                            }
                        }
                    }
                    if (y > 1)
                    {
                        downGemm = GemmGridLayout[x, y - 1];
                        if (randGemm.tag == downGemm.tagId)
                        {
                            downGemm = GemmGridLayout[x, y - 2];
                            if (randGemm.tag == downGemm.tagId)
                            {
                                availableGems.Remove(randGemm);
                                continue;
                            }
                        }
                    }
                    break;
                }
                MakeGemm(randGemm, x, y);
            }
        }
    }
Example #10
0
    //Remake/Replace destroyed gemms
    private void RemakeDestroyedGemms()
    {
        for (int y = 0; y < boardDimY; y++)
        {
            for (int x = 0; x < boardDimX; x++)
            {
                if (GemmGridLayout[x, y].destroyed)
                {
                    //randomize recreated gemms for last part of tutorial
                    if (tutorialTransition05Lock)
                    {
                        GameObject randGemm;
                        //List gemm options
                        List <GameObject> availableGems = new List <GameObject>();
                        availableGems.AddRange(GemmOptions);

                        //detect if 2 in a row left and down when in row/column 3+
                        //assign a random gemm that makes it so grid does not contain 3 in a rows
                        while (true)
                        {
                            randGemm = availableGems[UnityEngine.Random.Range(0, availableGems.Count)];
                            if (x > 1)
                            {
                                leftGemm = GemmGridLayout[x - 1, y];
                                if (randGemm.tag == leftGemm.tagId)
                                {
                                    leftGemm = GemmGridLayout[x - 2, y];
                                    if (randGemm.tag == leftGemm.tagId)
                                    {
                                        availableGems.Remove(randGemm);
                                        continue;
                                    }
                                }
                            }
                            if (y > 1)
                            {
                                downGemm = GemmGridLayout[x, y - 1];
                                if (randGemm.tag == downGemm.tagId)
                                {
                                    downGemm = GemmGridLayout[x, y - 2];
                                    if (randGemm.tag == downGemm.tagId)
                                    {
                                        availableGems.Remove(randGemm);
                                        continue;
                                    }
                                }
                            }
                            break;
                        }
                        MakeGemm(randGemm, x, y);
                        //setup tutorial for all-clear opportunity
                    }
                    else if (tutorialTransition02Lock)
                    {
                        GameObject tutGemm;
                        if (y == 3 || y == 4)
                        {
                            tutGemm = GemmOptions[(x + 2) % GemmOptions.Count];
                            MakeGemm(tutGemm, x, y);
                        }
                        else if (y == 2)
                        {
                            tutGemm = GemmOptions[(x + 1) % GemmOptions.Count];
                            MakeGemm(tutGemm, x, y);
                        }
                        //do the normal drops
                    }
                    else
                    {
                        GameObject newGemm = GemmOptions[UnityEngine.Random.Range(0, GemmOptions.Count)];
                        MakeGemm(newGemm, x, y);
                    }
                }
            }
        }
    }