Exemplo n.º 1
0
 private void WhenDestroyed()     //обнуляет переменные
 {
     points           = new Vector2[2];
     targetNode       = null;
     answerNode       = null;
     parentTargetNode = null;
     activateAnswer   = false;
     destroyLine      = false;
     detectedNodes.Clear();
 }
Exemplo n.º 2
0
    private void Update()
    {
        if (Input.GetMouseButton(0)) //пока мышь нажата, просто прорисовываем линию следом за ней
        {
            if (startLine)
            {
                mousePosition = Camera.main.ScreenToWorldPoint((new Vector2(Input.mousePosition.x, Input.mousePosition.y)));

                points[0] = center;
                points[1] = (Vector2)(new Vector3(mousePosition.x, mousePosition.y, 0));

                LineBehaviour();
            }
        }

        if (Input.GetMouseButtonUp(0))    //если отпустить мышь
        {
            if (startLine)                //если линия была "начата"
            {
                if (gameManager.inTarget) //если линия попала в какой-то узел
                {
                    inNode = CheckTargetNode(detectedNodes);

                    if (activateAnswer)
                    {
                        if (inNode != null)
                        {
                            answerNode = inNode.GetComponent <AnswerNodeScript>();
                        }
                        else
                        {
                            answerNode = null;
                        }

                        if (answerNode != null && !answerNode.activate)
                        {
                            points[1]       = answerNode.center;
                            targetNodeIndex = answerNode.index;
                            if (gameManager.CheckRepeatLine(parentNodeIndex, targetNodeIndex) != 1)
                            {
                                parentTargetNode.outLines.Add(this);     //устанавливаем исходящую линию
                                answerNode.inColors.Add(col);
                                answerNode.col      = MixColors(answerNode.inColors);
                                answerNode.activate = true;
                                gameManager.CheckGloworms(1);
                                answerNode.CheckAnswer();
                            }
                            else
                            {
                                destroyLine = true;
                            }
                        }
                    }
                    else
                    {
                        if (inNode != null)
                        {
                            targetNode = inNode.GetComponent <TargetNodeScript>();    //выбрать оптимальную TargetNode из задетых
                        }
                        else
                        {
                            targetNode = null;
                        }



                        if (targetNode != null && parentTargetNode != targetNode && CheckForLoops(parentTargetNode, targetNode) == 0) //если выбран узел и он не равен узлу, с которого мы начали, и мы не попадем в петлю
                        {
                            parentTargetNode.outLines.Add(this);                                                                      //устанавливаем исходящую линию
                            points[1]       = targetNode.center;
                            targetNodeIndex = targetNode.index;

                            if (gameManager.CheckRepeatLine(parentNodeIndex, targetNodeIndex) != 1) //не повторяется ли линия
                            {
                                if (!targetNode.activate)                                           //если к узлу еще не проводились линии
                                {
                                    targetNode.activate = true;
                                }
                                StartCIC(targetNode, col, true);
                                gameManager.CheckGloworms(1);
                            }
                            else
                            {
                                destroyLine = true;
                            }
                        }
                        else
                        {
                            destroyLine = true;
                        }
                    }

                    if (destroyLine)
                    {
                        DestroyLine();
                    }
                    else
                    {
                        LineBehaviour();

                        this.gameObject.layer = 0;

                        var lineData = new GameManager.LineData(this, parentNodeIndex, targetNodeIndex);
                        gameManager.lines.Add(lineData);

                        //if (parentTargetNode != null)
                        //parentTargetNode.numOfLines++;
                        gameManager.inTarget = false;
                    }
                }
                else
                {
                    DestroyLine();
                }
                startLine = false;
            }
        }
    }