private void UpdateGraph(ISatellite a)
        {
            var result = new List <TypedEdge <ISatellite> >();

            foreach (ISatellite b in this)
            {
                EdgeType edge = IsConnectedTo(a, b);
                if (edge == EdgeType.None)
                {
                    continue;
                }
                result.Add(new TypedEdge <ISatellite>(a, b, edge));
            }

            // Process
            RTUtil.Log("Debug: a={0}, Graph[a]={1}", a.Guid, Graph.ContainsKey(a.Guid));
            foreach (ISatellite b in Graph[a.Guid])
            {
                var edge = new TypedEdge <ISatellite>(a, b, EdgeType.None);
                if (!result.Contains(edge))
                {
                    OnEdgeUpdate(edge);
                }
            }
            Graph[a.Guid].Clear();
            foreach (var edge in result)
            {
                Graph[a.Guid].Add(edge.B);
                OnEdgeUpdate(edge);
            }
        }
 private void OnEdgeUpdate(TypedEdge <ISatellite> edge)
 {
     if (EdgeUpdated != null)
     {
         EdgeUpdated.Invoke(edge);
         RTUtil.Log(edge.ToString());
     }
 }
 private void OnEdgeUpdate(TypedEdge <ISatellite> edge)
 {
     if (edge.Type == EdgeType.None)
     {
         mEdges.Remove(edge);
     }
     else
     {
         mEdges.Add(edge);
     }
 }
 private void AssignVectorLine(int i, Vector3[] newPoints, TypedEdge <ISatellite> edge)
 {
     if (mLines.Count <= i)
     {
         mLines.Add(new VectorLine("Path", newPoints, CheckColor(edge),
                                   MapView.fetch.orbitLinesMaterial, 5.0f,
                                   LineType.Discrete));
         mLines[mLines.Count - 1].layer = 31;
         mLines[mLines.Count - 1].mesh.MarkDynamic();
     }
     else
     {
         mLines[i].Resize(newPoints);
         Vector.SetColor(mLines[i], CheckColor(edge));
     }
 }
        private Color CheckColor(TypedEdge <ISatellite> edge)
        {
            if (mConnectionEdges.Contains(edge))
            {
                return(XKCDColors.ElectricLime);
            }
            if (edge.Type == EdgeType.Omni)
            {
                return(XKCDColors.BrownGrey);
            }
            if (edge.Type == EdgeType.Dish)
            {
                return(XKCDColors.Amber);
            }

            return(XKCDColors.Grey);
        }
 private bool CheckVisibility(TypedEdge <ISatellite> edge)
 {
     if (mConnectionEdges.Contains(edge) && (ShowPath || ShowAll))
     {
         return(true);
     }
     if (edge.Type == EdgeType.Omni && !ShowOmni)
     {
         return(false);
     }
     if (edge.Type == EdgeType.Dish && !ShowDish)
     {
         return(false);
     }
     if (!edge.A.Visible || !edge.B.Visible)
     {
         return(false);
     }
     return(true);
 }
Exemplo n.º 7
0
 public bool Equals(TypedEdge <T> other)
 {
     return((A.Equals(other.A) || A.Equals(other.B)) &&
            (B.Equals(other.A) || B.Equals(other.B)));
 }