protected GameLine CreateLine( TrackWriter trk, Vector2d start, Vector2d end, bool inv, bool snapstart, bool snapend) { GameLine added = null; switch (game.Canvas.ColorControls.Selected) { case LineType.Blue: added = new StandardLine(start, end, inv); break; case LineType.Red: var red = new RedLine(start, end, inv) { Multiplier = game.Canvas.ColorControls.RedMultiplier }; red.CalculateConstants(); //multiplier needs to be recalculated added = red; break; case LineType.Scenery: added = new SceneryLine(start, end) { Width = game.Canvas.ColorControls.GreenMultiplier }; break; } trk.AddLine(added); if (game.Canvas.ColorControls.Selected != LineType.Scenery) { if (snapstart) { SnapLineEnd(trk, added, added.Position); } if (snapend) { SnapLineEnd(trk, added, added.Position2); } } game.Track.Invalidate(); return(added); }
private void Multiline(int count) { SimulationCell multilines = GetMultiLines(false); using (var trk = _editor.CreateTrackWriter()) { var owner = (StandardLine)_ownerline; MakingChange(); // owner line doesn't count, but our min bounds is 1 var diff = (count - 1) - multilines.Count; if (diff < 0) { for (int i = 0; i > diff; i--) { trk.RemoveLine(multilines.First()); multilines.RemoveLine(multilines.First().ID); } } else if (diff > 0) { if (_ownerline is RedLine redline) { for (int i = 0; i < diff; i++) { var red = new RedLine(owner.Position, owner.Position2, owner.inv) { Multiplier = ((RedLine)owner).Multiplier }; red.CalculateConstants(); trk.AddLine(red); } } else if (_ownerline is StandardLine blueline) { for (int i = 0; i < diff; i++) { var blue = new StandardLine(owner.Position, owner.Position2, owner.inv); blue.CalculateConstants(); trk.AddLine(blue); } } } } _editor.NotifyTrackChanged(); }
public override void Render() { base.Render(); if (Active) { var diff = _end - _start; var x = diff.X; var y = diff.Y; Color c = Color.FromArgb(200, 150, 150, 150); if (Math.Abs(x) + Math.Abs(y) < MINIMUM_LINE) { c = Color.Red; var sz = 2f; if (Swatch.Selected == LineType.Scenery) { sz *= Swatch.GreenMultiplier; } GameRenderer.RenderRoundedLine(_start, _end, c, sz); } else { switch (Swatch.Selected) { case LineType.Blue: StandardLine sl = new StandardLine(_start, _end, _addflip); sl.CalculateConstants(); GameRenderer.DrawTrackLine(sl, c, Settings.Editor.RenderGravityWells, true); break; case LineType.Red: RedLine rl = new RedLine(_start, _end, _addflip); rl.Multiplier = Swatch.RedMultiplier; rl.CalculateConstants(); GameRenderer.DrawTrackLine(rl, c, Settings.Editor.RenderGravityWells, true); break; case LineType.Scenery: GameRenderer.RenderRoundedLine(_start, _end, c, 2 * Swatch.GreenMultiplier); break; } } } }
protected GameLine CreateLine( //Creates a line from a pair of vectors (modified from Tool.cs) TrackWriter trk, Vector2d start, Vector2d end, LineType type, bool inv, int multiplier = 1, //Only applies to red lines (smh) float width = 1.0f) //Width only applicable to green lines { GameLine added = null; switch (type) { case LineType.Blue: added = new StandardLine(start, end, inv); break; case LineType.Red: var red = new RedLine(start, end, inv) { Multiplier = multiplier }; red.CalculateConstants(); //multiplier needs to be recalculated added = red; break; case LineType.Scenery: added = new SceneryLine(start, end) { Width = width }; break; } trk.AddLine(added); game.Track.Invalidate(); return(added); }