//check if a box has been drawn
        //This is accomplished by checking if at least one of the parallel lines is contained in the DrawnLines
        //For each case check the existance of the necessary vertical lines
        public Score CheckBox(Line newLine)
        {
            if (!DrawLine(newLine.StartDot, newLine.EndDot))
            {
                return(Score.Invalid);
            }
            var score         = Score.NoScore;
            var parallelLines = newLine.GetParallelLines();

            //Checks box's existence based on the first parallel
            if (DrawnLines.Any(l => l.Equals(parallelLines.Item1)) || DrawnLines.Any(l => l.Equals(parallelLines.Item1.AltLine())))
            {
                if (DrawnLines.Any(l => l.Equals(newLine.GetVerticalLines(parallelLines.Item1).Item1) || l.Equals(newLine.GetVerticalLines(parallelLines.Item1).Item1.AltLine())) &&
                    DrawnLines.Any(l => l.Equals(newLine.GetVerticalLines(parallelLines.Item1).Item2) || l.Equals(newLine.GetVerticalLines(parallelLines.Item1).Item2.AltLine())))
                {
                    score = Score.Single;
                    Squares--;
                }
            }
            //Checks box's existence based on the second parallel
            if (DrawnLines.Any(l => l.Equals(parallelLines.Item2) || l.Equals(parallelLines.Item2.AltLine())))
            {
                if (DrawnLines.Any(l => l.Equals(newLine.GetVerticalLines(parallelLines.Item2).Item1) || l.Equals(newLine.GetVerticalLines(parallelLines.Item2).Item1.AltLine())) &&
                    DrawnLines.Any(l => l.Equals(newLine.GetVerticalLines(parallelLines.Item2).Item2) || l.Equals(newLine.GetVerticalLines(parallelLines.Item2).Item2.AltLine())))
                {
                    score = score == Score.NoScore ? Score.Single : Score.Double;
                    Squares--;
                }
            }
            return(score);
        }
        public void InsertLine(Line line)
        {
            var table = store.GetTable("lines");

            line.Id = NewId;
            table.GetOrInsertRecord(line.Id, line.ToDictionaryTest(), false, new DBError());
            DrawnLines.Add(line);
            store.Sync(null);
        }
        public void DeleteAll()
        {
            var     table = store.GetTable("lines");
            DBError error;
            var     results = table.Query(new NSDictionary(), out error);

            foreach (var result in results)
            {
                result.DeleteRecord();
            }
            store.Sync(null);
            AddedLines.Clear();
            DrawnLines.Clear();
        }
        //Draw line logic. Checks if the dots are valid in order to draw line
        private bool DrawLine(Dot starterDot, Dot endingDot)
        {
            //Checks if the dots are within the board's bounds
            if (!IsWithinBounds(starterDot) && IsWithinBounds(endingDot))
            {
                return(false);
            }
            //Checks dot cross availiability
            var startpoint = Points.SingleOrDefault(p => p.Dot.Equals(starterDot));
            var endPoint   = Points.SingleOrDefault(p => p.Dot.Equals(endingDot));

            if (!(startpoint.Crosses == 0 || endPoint.Crosses == 0))
            {
                //Check if the dots are in the same line or row
                if ((Math.Abs(starterDot.X - endingDot.X) == 1 || Math.Abs(starterDot.Y - endingDot.Y) == 1) &&
                    !(Math.Abs(starterDot.X - endingDot.X) == 1 && Math.Abs(starterDot.Y - endingDot.Y) == 1))
                {
                    Line line = new Line {
                        StartDot = starterDot, EndDot = endingDot
                    };
                    //for foes we have yet to consider about (antiyagni)
                    if (!DrawnLines.Any(l => l.Equals(line) || l.Equals(line.AltLine())))
                    {
                        DrawnLines.Add(line);
                        Points.SingleOrDefault(p => p.Dot.Equals(starterDot)).Crosses--;
                        Points.SingleOrDefault(p => p.Dot.Equals(endingDot)).Crosses--;

                        //CheckBox(line);
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
Beispiel #5
0
    // Update is called once per frame
    void Update()
    {
        LineRenderer lineRenderer = GetComponent <LineRenderer>();

        lineRenderer.positionCount = 2;

        if (OVRInput.GetDown(OVRInput.Button.Two) && !m_bIsDraw)
        {
            m_bIsDraw            = true;
            lineRenderer.enabled = true;
        }
        else if (OVRInput.GetDown(OVRInput.Button.Two) && m_bIsDraw)
        {
            m_bIsDraw            = false;
            lineRenderer.enabled = false;
        }

        if (m_bIsDraw)
        {
            if (Physics.Raycast(transform.position, transform.forward, out hit) &&
                hit.collider.gameObject.name == "WhiteBoard")
            {
                //hit.transform.GetComponent<MeshRenderer>().material.color = Color.red;
                //Debug.DrawRay(transform.position, transform.forward * hit.distance, Color.blue, 5.0f);
                lineRenderer.startColor = Color.blue;
                lineRenderer.endColor   = Color.blue;
                lineRenderer.SetPosition(0, transform.position);
                lineRenderer.SetPosition(1, hit.point);

                if (0.0f != OVRInput.Get(OVRInput.Axis1D.SecondaryIndexTrigger, m_controller))
                {
                    if (!m_bIsDrawing)
                    {
                        DrawnLines n = gameObject.AddComponent <DrawnLines>();
                        n.Start();
                        m_lLine.Add(n);
                    }

                    m_bIsDrawing = true;
                    //GameObject.Find("WhiteBoard").GetComponent<MemoBoard>().m_hitPos = hit.point;

                    //StartCoroutine(InputPointPos());

                    m_delay += Time.deltaTime;

                    if (m_delay >= 0.007f)
                    {
                        m_delay = 0.0f;
                        m_lProjectedPos.Add(hit.point);
                        m_lLine[m_lLine.Count - 1].SetPosList(m_lProjectedPos);
                    }
                }
                else if (0.0f == OVRInput.Get(OVRInput.Axis1D.SecondaryIndexTrigger, m_controller))
                {
                    m_bIsDrawing = false;
                    m_lProjectedPos.Clear();
                }
            }
            else
            {
                lineRenderer.startColor = new Color(1.0f, 1.0f, 1.0f, 0.0f);
                lineRenderer.endColor   = new Color(1.0f, 1.0f, 1.0f, 0.0f);
            }

            for (int i = 0; i < m_lLine.Count; ++i)
            {
                m_lLine[i].Update();
            }
        }
    }