public void UnionWith(NorseSymbol otherSymbol) { List <NorseLine> linesToAdd = new List <NorseLine>(); for (int i = 0; i < otherSymbol.m_Lines.Count; i++) { //check if line already exists (bidirectionally) NorseLine foundLine = m_Lines.Find(mline => ((mline.A.m_GridPositionX == otherSymbol.m_Lines[i].A.m_GridPositionX && mline.A.m_GridPositionY == otherSymbol.m_Lines[i].A.m_GridPositionY) && (mline.B.m_GridPositionX == otherSymbol.m_Lines[i].B.m_GridPositionX && mline.B.m_GridPositionY == otherSymbol.m_Lines[i].B.m_GridPositionY)) || ((mline.A.m_GridPositionX == otherSymbol.m_Lines[i].B.m_GridPositionX && mline.A.m_GridPositionY == otherSymbol.m_Lines[i].B.m_GridPositionY) && (mline.B.m_GridPositionX == otherSymbol.m_Lines[i].A.m_GridPositionX && mline.B.m_GridPositionY == otherSymbol.m_Lines[i].A.m_GridPositionY))); //add line if doesn't exist. if (foundLine == null) { NorseLine nl = new NorseLine(); LineRenderer l = Instantiate(PrefabManager.Instance.m_Data.m_DotConnectLR.gameObject, transform).GetComponent <LineRenderer>(); nl.line = l; nl.A = m_Dots.Find(item => item.m_GridPositionX == otherSymbol.m_Lines[i].A.m_GridPositionX && item.m_GridPositionY == otherSymbol.m_Lines[i].A.m_GridPositionY); nl.A.IsActivated = true; nl.B = m_Dots.Find(item => item.m_GridPositionX == otherSymbol.m_Lines[i].B.m_GridPositionX && item.m_GridPositionY == otherSymbol.m_Lines[i].B.m_GridPositionY); nl.B.IsActivated = true; m_Lines.Add(nl); } } }
private void OnDotActivate(NorseDot dot) { NorseDot prevDot = m_ActivatedDotStack.Count > 0 ? m_ActivatedDotStack[m_ActivatedDotStack.Count - 1] : null; dot.IsActivated = true; if (prevDot != null) { if (dot.m_GridPositionX == prevDot.m_GridPositionX && dot.m_GridPositionY == prevDot.m_GridPositionY) { return; } NorseLine nlCheck = m_Lines.Find( item => ((item.A.m_GridPositionX == dot.m_GridPositionX && item.A.m_GridPositionY == dot.m_GridPositionY) && (item.B.m_GridPositionX == prevDot.m_GridPositionX && item.B.m_GridPositionY == prevDot.m_GridPositionY))); if (nlCheck == null) { nlCheck = m_Lines.Find( item => ((item.A.m_GridPositionX == prevDot.m_GridPositionX && item.A.m_GridPositionY == prevDot.m_GridPositionY) && (item.B.m_GridPositionX == dot.m_GridPositionX && item.B.m_GridPositionY == dot.m_GridPositionY))); if (nlCheck == null)//if we haven't already made this line, bidirectionally, then add it. { m_ActivatedDotStack.Add(dot); //dot.m_LineRenderer.SetPositions(new Vector3[] { dot.transform.position, prevDot.transform.position }); NorseLine nl = new NorseLine(); LineRenderer l = Instantiate(PrefabManager.Instance.m_Data.m_DotConnectLR.gameObject, transform).GetComponent <LineRenderer>(); l.colorGradient = m_LinesColorGradient; nl.line = l; nl.A = prevDot; nl.B = dot; if (m_Lines.Contains(nl)) { nl.CleanUp(); return; } m_Lines.Add(nl); } } } else { m_ActivatedDotStack.Add(dot); } }
public bool IsEquivalentSymbol(NorseSymbol otherSymbol) { for (int i = 0; i < otherSymbol.m_Lines.Count; i++) { //check if line already exists (bidirectionally) NorseLine foundLine = m_Lines.Find(mline => ((mline.A.m_GridPositionX == otherSymbol.m_Lines[i].A.m_GridPositionX && mline.A.m_GridPositionY == otherSymbol.m_Lines[i].A.m_GridPositionY) && (mline.B.m_GridPositionX == otherSymbol.m_Lines[i].B.m_GridPositionX && mline.B.m_GridPositionY == otherSymbol.m_Lines[i].B.m_GridPositionY)) || ((mline.A.m_GridPositionX == otherSymbol.m_Lines[i].B.m_GridPositionX && mline.A.m_GridPositionY == otherSymbol.m_Lines[i].B.m_GridPositionY) && (mline.B.m_GridPositionX == otherSymbol.m_Lines[i].A.m_GridPositionX && mline.B.m_GridPositionY == otherSymbol.m_Lines[i].A.m_GridPositionY))); if (foundLine == null) { return(false); } } return(true); }
public void IntersectionWith(NorseSymbol otherSymbol) { List <NorseLine> linesToRemove = new List <NorseLine>(); for (int i = 0; i < m_Lines.Count; i++) { NorseLine nlCheck = otherSymbol.m_Lines.Find( item => ((item.A.m_GridPositionX == m_Lines[i].A.m_GridPositionX && item.A.m_GridPositionY == m_Lines[i].A.m_GridPositionY) && (item.B.m_GridPositionX == m_Lines[i].B.m_GridPositionX && item.B.m_GridPositionY == m_Lines[i].B.m_GridPositionY))); if (nlCheck == null) { nlCheck = otherSymbol.m_Lines.Find( item => ((item.A.m_GridPositionX == m_Lines[i].B.m_GridPositionX && item.A.m_GridPositionY == m_Lines[i].B.m_GridPositionY) && (item.B.m_GridPositionX == m_Lines[i].A.m_GridPositionX && item.B.m_GridPositionY == m_Lines[i].A.m_GridPositionY))); } if (nlCheck != null) { //we got em boys linesToRemove.Add(m_Lines[i]); } } //check for IsActive on dots for (int i = 0; i < linesToRemove.Count; i++) { linesToRemove[i].CleanUp(); m_Lines.Remove(linesToRemove[i]); //set IsActivated to false if there are no more lines connected to this dot. NorseLine lA = m_Lines.Find( item => (item.A.m_GridPositionX == linesToRemove[i].A.m_GridPositionX && item.A.m_GridPositionY == linesToRemove[i].A.m_GridPositionY) || (item.B.m_GridPositionX == linesToRemove[i].A.m_GridPositionX && item.B.m_GridPositionY == linesToRemove[i].A.m_GridPositionY) ); NorseLine lB = m_Lines.Find( item => (item.A.m_GridPositionX == linesToRemove[i].B.m_GridPositionX && item.A.m_GridPositionY == linesToRemove[i].B.m_GridPositionY) || (item.B.m_GridPositionX == linesToRemove[i].B.m_GridPositionX && item.B.m_GridPositionY == linesToRemove[i].B.m_GridPositionY) ); linesToRemove[i].A.IsActivated = lA != null; linesToRemove[i].B.IsActivated = lB != null; } }
private void OnDotDeactivate(NorseDot dot) { while (m_ActivatedDotStack.Count > 0) { NorseDot iterPop = m_ActivatedDotStack[m_ActivatedDotStack.Count - 1]; m_ActivatedDotStack.RemoveAt(m_ActivatedDotStack.Count - 1); iterPop.IsActivated = false; if (m_Lines.Count > 0) { m_Lines[m_Lines.Count - 1].CleanUp(); m_Lines.RemoveAt(m_Lines.Count - 1); } NorseLine l = m_Lines.Find( item => ((item.A.m_GridPositionX == iterPop.m_GridPositionX && item.A.m_GridPositionY == iterPop.m_GridPositionY) || (item.B.m_GridPositionX == iterPop.m_GridPositionX && item.B.m_GridPositionY == iterPop.m_GridPositionY))); iterPop.IsActivated = l != null; if (iterPop == dot) { return; } } }