private ushort DrawNodeLines(Structures.LinkedEntityRenderProp Properties) { ushort SlotID = Properties.EditorObject.SlotID; int NodeCount = Properties.EditorObject.attributesMap["nodeCount"].ValueEnum - 1; ushort TargetSlotID = SlotID; ushort TargetSlotIDNext = SlotID; ManiacEditor.Classes.Scene.EditorEntity FirstNode = null; ManiacEditor.Classes.Scene.EditorEntity LastNode = null; List <Tuple <Classes.Scene.EditorEntity, Classes.Scene.EditorEntity> > NodePairPoints = new List <Tuple <Classes.Scene.EditorEntity, Classes.Scene.EditorEntity> >(); if (Methods.Solution.CurrentSolution.Entities.Entities.Exists(x => x.SlotID > SlotID && x.Name == "PlatformNode")) { FirstNode = Methods.Solution.CurrentSolution.Entities.Entities.Where(x => x.SlotID > SlotID && x.Name == "PlatformNode").First(); TargetSlotID = FirstNode.SlotID; TargetSlotIDNext = (ushort)(FirstNode.SlotID + 1); int Remainder = (NodeCount % 2 == 1 ? 1 : 0); for (int i = 0; i < NodeCount;) { bool DoesTarget1Exist = Methods.Solution.CurrentSolution.Entities.Entities.Exists(x => x.SlotID == TargetSlotID && x.Name == "PlatformNode"); bool DoesTarget2Exist = Methods.Solution.CurrentSolution.Entities.Entities.Exists(x => x.SlotID == TargetSlotIDNext && x.Name == "PlatformNode"); if (DoesTarget1Exist && DoesTarget2Exist) { var Target1 = Methods.Solution.CurrentSolution.Entities.Entities.Where(x => x.SlotID == TargetSlotID && x.Name == "PlatformNode").First(); var Target2 = Methods.Solution.CurrentSolution.Entities.Entities.Where(x => x.SlotID == TargetSlotIDNext && x.Name == "PlatformNode").First(); NodePairPoints.Add(new Tuple <Classes.Scene.EditorEntity, Classes.Scene.EditorEntity>(Target1, Target2)); i++; } TargetSlotID = (ushort)(TargetSlotID + 1); TargetSlotIDNext = (ushort)(TargetSlotIDNext + 1); } } if (NodePairPoints != null && NodePairPoints.Any()) { foreach (var NodePair in NodePairPoints) { DrawCenteredLinkArrow(Properties.Graphics, NodePair.Item1, NodePair.Item2); LastNode = NodePair.Item2; } if (LastNode != null && FirstNode != null) { DrawCenteredLinkArrow(Properties.Graphics, LastNode, FirstNode); TargetSlotID = LastNode.SlotID; } } return(TargetSlotID); }
public void DrawLinkArrowTransportTubes(DevicePanel Graphics, ManiacEditor.Classes.Scene.EditorEntity start, ManiacEditor.Classes.Scene.EditorEntity end, int destType, int sourceType) { Color color = Color.Transparent; switch (destType) { case 4: color = Color.Yellow; break; case 3: color = Color.Red; break; } if (sourceType == 2) { switch (destType) { case 4: color = Color.Green; break; case 3: color = Color.Red; break; } } int startX = start.Position.X.High; int startY = start.Position.Y.High; int endX = end.Position.X.High; int endY = end.Position.Y.High; int dx = endX - startX; int dy = endY - startY; int offsetX = 0; int offsetY = 0; int offsetDestinationX = 0; int offsetDestinationY = 0; Graphics.DrawArrow(startX + offsetX, startY + offsetY, end.Position.X.High + offsetDestinationX, end.Position.Y.High + offsetDestinationY, color); }