Esempio n. 1
0
    public void RemoveAllLines()
    {
        for (int i = currLines; i > 0; i--)
        {
            if (lstGameLines[i - 1] != null)
            {
                Destroy(lstGameLines[i - 1]);
            }

            lstStartFigure[i - 1].GetComponent <gameObjInfo>().isSelected = false;

            if (lstEndFigure[lstEndFigure.Count - 1].GetComponent <gameObjInfo>().mySprite != 1)
            {
                currLines--;
            }
        }

        ClearAllLists();

        startFigureInf = null;

        foreach (GameObject errorLine in GameObject.FindGameObjectsWithTag("Line"))
        {
            GameObject.Destroy(errorLine);
        }
    }
Esempio n. 2
0
    private bool IsSameColorOrFigure(gameObjInfo startFigureInfo, gameObjInfo endFigureInfo)
    {
        bool isSameFigureOrColor = false;

        if (startFigureInf.mySprite != 1 && endFigureInfo.mySprite != 0)
        {
            if (startFigureInfo.mySprite == 0 || endFigureInfo.mySprite == 1)
            {
                if (endFigureInfo.mySprite == 1 && currLines >= lvlInf.GetOneStarConnections() - 1)
                {
                    isSameFigureOrColor = true;
                }
                else if (lvlMan != null && endFigureInfo.mySprite == 1 && lvlMan.lstGameObjGoal.Count > 1) //Hvis der er mere end 1 mål, og der stadig er 1+ mere end dette mål!
                {
                    int countCompleted = 0;

                    if (lvlMan.goal1Completed)
                    {
                        countCompleted++;
                    }
                    if (lvlMan.goal2Completed)
                    {
                        countCompleted++;
                    }
                    if (lvlMan.goal3Completed)
                    {
                        countCompleted++;
                    }

                    if (countCompleted < lvlMan.lstGameObjGoal.Count - 1)
                    {
                        isSameFigureOrColor = true;
                    }
                }
                else if (endFigureInfo.mySprite != 1)
                {
                    isSameFigureOrColor = true;
                }
            }
            else if (startFigureInfo.mySprite == endFigureInfo.mySprite)
            {
                isSameFigureOrColor = true;
            }
            else if (startFigureInfo.myColor == endFigureInfo.myColor)
            {
                isSameFigureOrColor = true;
            }
        }

        return(isSameFigureOrColor);
    }
Esempio n. 3
0
    private void RemoveLastLine()
    {
        Destroy(line.gameObject);


        if (lstStartFigure.Count > 0)
        {
            lstStartFigure[lstStartFigure.Count - 1].GetComponent <gameObjInfo>().isSelected = false; //Fjern isSelected fra figuren!
            lstStartFigure.RemoveAt(lstStartFigure.Count - 1);
        }
        if (lstGameLines.Count > 0)
        {
            lstGameLines.RemoveAt(lstGameLines.Count - 1); //Fjerne den nyeste linje!
        }
        if (lstStartFigure.Count > 0)
        {
            startFigureInf = lstStartFigure[lstStartFigure.Count - 1].GetComponent <gameObjInfo>(); //Ændre startFigure classen, til at være den "nye" startfigure!
        }
    }
Esempio n. 4
0
    public void ClearAllLists()
    {
        lstStartFigure.Clear();
        lstStartFigure1.Clear();
        lstStartFigure2.Clear();
        lstStartFigure3.Clear();

        lstEndFigure.Clear();
        lstEndFigure1.Clear();
        lstEndFigure2.Clear();
        lstEndFigure3.Clear();

        lstGameLines.Clear();
        lstGameLines1.Clear();
        lstGameLines2.Clear();
        lstGameLines3.Clear();


        currLines      = 0;
        startFigureInf = null;
    }
Esempio n. 5
0
    private void CheckForNewLineStart(RaycastHit2D figure)
    {
        startFigureInf = hit.collider.gameObject.GetComponent <gameObjInfo>(); //Skaf figure info

        if (startFigureInf.mySprite == 0 && lstEndFigure.Count == 0 ||
            lstEndFigure.Count > 0 && hit.transform == lstEndFigure[lstEndFigure.Count - 1].transform)    //Hvis det er A (start) eller den vi sidst stoppede på!
        {
            lstStartFigure.Add(hit.transform.gameObject);

            startFigureInf.isSelected = true;


            //check if there is no line renderer created
            if (line == null)
            {
                //create the line
                createLine();
            }

            line.SetPosition(0, new Vector3(lstStartFigure[lstStartFigure.Count - 1].GetComponent <gameObjInfo>().posX, lstStartFigure[lstStartFigure.Count - 1].GetComponent <gameObjInfo>().posY, 1f));
            line.SetPosition(1, new Vector3(lstStartFigure[lstStartFigure.Count - 1].GetComponent <gameObjInfo>().posX, lstStartFigure[lstStartFigure.Count - 1].GetComponent <gameObjInfo>().posY, 1f));
        }
    }
Esempio n. 6
0
    /// <summary>
    /// Hvis en spiller double clicker på et tidligere punkt, så reset lines tilbage til der!
    /// </summary>
    private void CheckForLineResetPoint(RaycastHit2D figure)
    {
        int listIndex = 0;

        foreach (GameObject ele in lstStartFigure)
        {
            if (figure.transform.gameObject == ele)
            {
                break;
            }
            listIndex++;
        }


        for (int i = lstStartFigure.Count; i > listIndex; i--)
        {
            Destroy(lstGameLines[i - 1]);                                          //fjern Linje

            lstStartFigure[i - 1].GetComponent <gameObjInfo>().isSelected = false; //Fjern isSelected fra figuren!
            lstStartFigure.RemoveAt(i - 1);
            try
            {
                lstEndFigure.RemoveAt(i - 1);
            }
            catch
            {
                print("Reset line catch, more start figure than end figure");
            }
            lstGameLines.RemoveAt(i - 1);
        }

        if (lstStartFigure.Count > 0)
        {
            startFigureInf = lstStartFigure[lstStartFigure.Count - 1].GetComponent <gameObjInfo>(); //Ændre startFigure classen, til at være den "nye" startfigure!
        }
    }
Esempio n. 7
0
    void Update()
    {
        lineReset = false;

        //Update Currline Text:
        try
        {
            //Get connections
            int numberOfGoals = 0; //Skal bruges til at fjerne mål, fra current connections.

            if (lstEndFigure1.Count > 0 && lstEndFigure1[lstEndFigure1.Count - 1].GetComponent <gameObjInfo>().mySprite == 1)
            {
                numberOfGoals++;
            }
            if (lstEndFigure2.Count > 0 && lstEndFigure2[lstEndFigure2.Count - 1].GetComponent <gameObjInfo>().mySprite == 1)
            {
                numberOfGoals++;
            }
            if (lstEndFigure3.Count > 0 && lstEndFigure3[lstEndFigure3.Count - 1].GetComponent <gameObjInfo>().mySprite == 1)
            {
                numberOfGoals++;
            }
            if (line != null)
            {
                numberOfGoals++;
            }

            currLines = lstGameLines1.Count + lstGameLines2.Count + lstGameLines3.Count - numberOfGoals;

            //Set Connections
            if (currLines != displayCurrLines.number)
            {
                displayCurrLines.number = currLines;
            }
        }
        catch
        {
            //Anti level editor crash
        }

        if (!isCompleted && !isGameOver)
        {
            if (Input.GetMouseButtonDown(0)) //Ved første klik!
            {
                ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                hit = Physics2D.Raycast(ray.origin, ray.direction, Mathf.Infinity);
                if (hit && hit.transform.tag == "Figure")                  //Se om vi har ramt noget!
                {
                    FindCurrentList(hit);                                  //Kun relevant i baner med mere end en start og mål

                    if (lstStartFigure.Contains(hit.transform.gameObject)) //hvis listen over start punkter, indeholder den figure spillere har klikket på så:
                    {
                        CheckForLineResetPoint(hit);
                        lineReset = true;
                    }

                    CheckForNewLineStart(hit);
                }
            }
            else if (Input.GetMouseButtonUp(0) && line) //Når man giver slip
            {
                int difference = Mathf.Abs(lstEndFigure.Count - lstStartFigure.Count);
                for (int i = 0; i < difference; i++)
                {
                    RemoveLastLine();
                }

                //set line as null once the line is created!
                line = null;
            }
            else if (lstStartFigure.Count > 0 && Input.GetMouseButton(0) && line) //Når man holder musen nede!
            {
                //Se om vi har fundet en end figur:
                ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                // hit = Physics2D.Raycast(ray.origin, ray.direction, Mathf.Infinity);
                hit = Physics2D.Linecast(CalcStartPoint(lstStartFigure[lstStartFigure.Count - 1].transform.position, ray.origin), ray.origin);

                if (hit && hit.transform.tag == "Figure")
                {
                    if (lstStartFigure.Count > 0)
                    {
                        bool isANewFigure = true;

                        for (int i = 0; i < lstStartFigure.Count; i++)
                        {
                            if (lstStartFigure[i].transform == hit.transform)
                            {
                                isANewFigure = false;
                            }
                            else if (i < lstEndFigure.Count && lstEndFigure[i].transform == hit.transform)
                            {
                                isANewFigure = false;
                            }
                        }

                        if (isANewFigure)
                        {
                            gameObjInfo newEndFigInf = hit.collider.gameObject.GetComponent <gameObjInfo>();

                            if (!IsFigureUsed(hit.collider.gameObject)) //Check om figuren er i brug i en af de op til 3 mulige lister! (så vi kan have 3 start og s**t punkter per map)
                            {
                                if (IsConnected(startFigureInf, newEndFigInf))
                                {
                                    lstEndFigure.Add(hit.transform.gameObject);
                                    endFigureInf = newEndFigInf;

                                    endFigureInf.isSelected = true;
                                    line.SetPosition(1, new Vector3(newEndFigInf.posX, newEndFigInf.posY, 1f));

                                    //Code for starting a new line:
                                    //set line as null once the line is created!
                                    line = null;

                                    //Start new line
                                    CheckForNewLineStart(hit);
                                }
                                else
                                {
                                    //Ulovlig move!
                                    newEndFigInf.showErrorEffect = true;
                                }
                            }
                            else
                            {
                                //Ulovlig move!
                                newEndFigInf.showErrorEffect = true;
                            }
                        }
                        else if (hit.transform != lstStartFigure[lstStartFigure.Count - 1].transform)
                        {
                            //Ulovlig move!
                            hit.collider.gameObject.GetComponent <gameObjInfo>().showErrorEffect = true;
                        }
                    }
                }

                //Se om vi skal edit last line:
                mousePos   = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                mousePos.z = 0;

                CheckForUndoLine();



                if (lstEndFigure.Count > 0 && lstEndFigure.Count == lstStartFigure.Count) //Se om vores lstEndFigure indeholder noget, og om den er lige så lang som vores start.
                {
                    //Se efter om vi skal have fjernet vores end figure:
                    if (Mathf.Abs(mousePos.x - lstEndFigure[lstEndFigure.Count - 1].transform.position.x) > 0.6f || Mathf.Abs(mousePos.y - lstEndFigure[lstEndFigure.Count - 1].transform.position.y) > 0.6f)
                    {
                        lstEndFigure.RemoveAt(lstEndFigure.Count - 1);
                        line.SetPosition(1, mousePos);
                    }
                }
                //Hvis vi ikke har en end figur:
                else
                {
                    line.SetPosition(1, mousePos);
                }
            }
            else if (lstStartFigure.Count == 0 && Input.GetMouseButton(0) && line) //Hvis man holder musen nede, uden at have ramt en figur ved første klik!
            {
                ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                hit = Physics2D.Raycast(ray.origin, ray.direction, Mathf.Infinity);
                if (hit && hit.transform.tag == "Figure") //Se om vi har ramt noget!
                {
                    FindCurrentList(hit);

                    if (lstStartFigure.Contains(hit.transform.gameObject)) //Hvis listen over start punkter, indeholder den figure spillere har 2x klikket på så:
                    {
                        if (!lineReset)
                        {
                            CheckForLineResetPoint(hit);
                        }
                    }

                    CheckForNewLineStart(hit);
                }
            }
        }
        else
        {
            if (lstStartFigure.Count > lstEndFigure.Count)
            {
                RemoveLastLine();
            }
        }
    }
Esempio n. 8
0
    /// <summary>
    /// alle figure har 8 mulige connections
    /// Find udaf om det nye end punkt er en af dem
    /// og om de er connected
    /// </summary>
    /// <param name="startFigure"></param>
    /// <param name="endFigure"></param>
    /// <returns></returns>
    private bool IsConnected(gameObjInfo startFigureInfo, gameObjInfo endFigureInfo)
    {
        bool isConnected = false;

        //Hvis der ikke er mere end 1 mellem start x og end x, og start y og end y, så kan de være tæt nok på hinanden til at kunne connectes!
        if (Mathf.Abs(startFigureInfo.x - endFigureInfo.x) <= 1 && Mathf.Abs(startFigureInfo.y - endFigureInfo.y) <= 1)
        {
            // hvis endF er højre end vores start figure:
            if (Mathf.Abs(startFigureInfo.y - endFigureInfo.y) == 1)    //endfix.y = 1
            {
                //Hvis endFig er nw for startFig, og start har en nw connect så:
                if (Mathf.Abs(startFigureInfo.x - endFigureInfo.x) == 1 && startFigureInfo.x > endFigureInfo.x && startFigureInfo.isConnectedToNW)      //endFig.x = -1
                {
                    isConnected = true;
                }
                else if (Mathf.Abs(startFigureInfo.x - endFigureInfo.x) == 0 && startFigureInfo.isConnectedToN)                                         //endFig.x = 0
                {
                    isConnected = true;
                }
                else if (Mathf.Abs(startFigureInfo.x - endFigureInfo.x) == 1 && startFigureInfo.x < endFigureInfo.x && startFigureInfo.isConnectedToNE) //endFig.x = 1
                {
                    isConnected = true;
                }

                //S
                if (Mathf.Abs(startFigureInfo.x - endFigureInfo.x) == 1 && startFigureInfo.x > endFigureInfo.x && startFigureInfo.isConnectedToSW)      //endFig.x = -1
                {
                    isConnected = true;
                }
                else if (Mathf.Abs(startFigureInfo.x - endFigureInfo.x) == 0 && startFigureInfo.isConnectedToS)                                         //endFig.x = 0
                {
                    isConnected = true;
                }
                else if (Mathf.Abs(startFigureInfo.x - endFigureInfo.x) == 1 && startFigureInfo.x < endFigureInfo.x && startFigureInfo.isConnectedToSE) //endFig.x = 1
                {
                    isConnected = true;
                }
            }
            else if (Mathf.Abs(startFigureInfo.y - endFigureInfo.y) == 0)                                                                         //endfix.y = 0
            {
                if (Mathf.Abs(startFigureInfo.x - endFigureInfo.x) == 1 && startFigureInfo.x > endFigureInfo.x && startFigureInfo.isConnectedToW) //endFig.x = -1
                {
                    isConnected = true;
                }
                else if (Mathf.Abs(startFigureInfo.x - endFigureInfo.x) == 1 && startFigureInfo.x < endFigureInfo.x && startFigureInfo.isConnectedToE) //endFig.x = 1
                {
                    isConnected = true;
                }
            }
        }


        if (isConnected && IsSameColorOrFigure(startFigureInfo, endFigureInfo))
        {
            return(true);
        }
        else
        {
            return(false);
        }
    }
Esempio n. 9
0
    /// <summary>
    /// Find udaf hvilken list, den klikket figure skal høre til!
    /// </summary>
    /// <param name="figure"></param>
    private void FindCurrentList(RaycastHit2D figure)
    {
        gameObjInfo figureHitInfo = hit.collider.gameObject.GetComponent <gameObjInfo>();

        /// <summary>
        /// 0 = A
        /// 1 = B
        /// 2 = Circle
        /// 3 = Diamond
        /// 4 = Square
        /// 5 = Triangle
        /// </summary>

        if (figureHitInfo.mySprite == 0)
        {
            //Hvis alle lister er tomme så brug list 1!
            if (lstStartFigure1.Count == 0 && lstEndFigure2.Count == 0 && lstStartFigure3.Count == 0)
            {
                UseList1();
            }
            else
            {
                //Hvis punktet er i liste 1, så brug den!
                if (lstStartFigure1.Contains(hit.transform.gameObject))
                {
                    UseList1();
                }
                //Hvis punktet er i liste 2, så brug den!
                else if (lstStartFigure2.Contains(hit.transform.gameObject))
                {
                    UseList2();
                }
                //Hvis punktet er i liste 3, så brug den!
                else if (lstStartFigure3.Contains(hit.transform.gameObject))
                {
                    UseList3();
                }
                else //Hvis den ikke er i en af de 3 lister, så find udaf hvilken vi skal bruge!
                {
                    if (lstStartFigure1.Count == 0)
                    {
                        UseList1();
                    }
                    else if (lstStartFigure2.Count == 0)
                    {
                        UseList2();
                    }
                    else
                    {
                        UseList3();
                    }
                }
            }
        }
        else
        {
            if (lstEndFigure1.Count > 0 && lstEndFigure1[lstEndFigure1.Count - 1] == hit.transform.gameObject)
            {
                UseList1();
            }
            else if (lstEndFigure2.Count > 0 && lstEndFigure2[lstEndFigure2.Count - 1] == hit.transform.gameObject)
            {
                UseList2();
            }
            else if (lstEndFigure3.Count > 0 && lstEndFigure3[lstEndFigure3.Count - 1] == hit.transform.gameObject)
            {
                UseList3();
            }
            else if (lstStartFigure1.Contains(hit.transform.gameObject))
            {
                UseList1();
            }
            else if (lstStartFigure2.Contains(hit.transform.gameObject))
            {
                UseList2();
            }
            else if (lstStartFigure3.Contains(hit.transform.gameObject))
            {
                UseList3();
            }
        }
    }