public void CreatePipe(IWorldNode target, PipeBlueprint.Orientation orientation) { NextLinkedNodes.Add(target); var p = new LevelNodePipe(Owner, this, target, orientation); OutgoingPipes.Add(p); Manager.AddEntity(p); }
public LevelNodePipe(GameScreen scrn, IWorldNode start, IWorldNode end, PipeBlueprint.Orientation orientation) : base(scrn, GDConstants.ORDER_MAP_PIPE_ON) { NodeSource = start; NodeSink = end; Position = FPoint.MiddlePoint(start.Position, end.Position); DrawingBoundingBox = FSize.Diff(start.Position, end.Position) + new FSize(THICKNESS, THICKNESS); curvature = GetCurve(start, end, orientation); InitCurvature(); }
public void CreatePipe(IWorldNode target, PipeBlueprint.Orientation orientation) { throw new NotSupportedException(); }
private FlatCurve13 GetCurve(IWorldNode start, IWorldNode end, PipeBlueprint.Orientation o) { var cw = (o == PipeBlueprint.Orientation.Clockwise); var ccw = (o == PipeBlueprint.Orientation.Counterclockwise); var auto = (o == PipeBlueprint.Orientation.Auto); var direct = (o == PipeBlueprint.Orientation.Direct); if (FloatMath.EpsilonEquals(start.Position.X, end.Position.X)) { if (start.Position.Y < end.Position.Y) { return(FlatCurve13.DOWN); } if (start.Position.Y > end.Position.Y) { return(FlatCurve13.UP); } return(FlatCurve13.POINT); } if (FloatMath.EpsilonEquals(start.Position.Y, end.Position.Y)) { if (start.Position.X < end.Position.X) { return(FlatCurve13.RIGHT); } if (start.Position.X > end.Position.X) { return(FlatCurve13.LEFT); } return(FlatCurve13.POINT); } if (start.Position.X < end.Position.X) { if (direct) { return(FlatCurve13.DIRECT); } if (start.Position.Y < end.Position.Y) { return((auto || cw) ? FlatCurve13.RIGHT_DOWN : FlatCurve13.DOWN_RIGHT); } else if (start.Position.Y > end.Position.Y) { return((auto || ccw) ? FlatCurve13.RIGHT_UP : FlatCurve13.UP_RIGHT); } } if (start.Position.X > end.Position.X) { if (direct) { return(FlatCurve13.DIRECT); } if (start.Position.Y < end.Position.Y) { return((auto || ccw) ? FlatCurve13.LEFT_DOWN : FlatCurve13.DOWN_LEFT); } else if (start.Position.Y > end.Position.Y) { return((auto || cw) ? FlatCurve13.LEFT_UP : FlatCurve13.UP_LEFT); } } throw new Exception("Invalid curvature found"); }