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; } } } }