//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); } }
// 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(); } } }