public static void WriteNMLUserParams(CargoScheme scheme, CargoDefinition cargoDef) { var outputDir = $"{Config.NMLOutputDirectory}\\{scheme.SchemeName}"; var templateDir = $"{Config.NMLTemplateDirectory}"; var schemeTemplateDir = $"{templateDir}\\{scheme.SchemeName}"; var templateFile = $"{templateDir}\\perishableCargoUserParams.nml"; var outputPath = $"{outputDir}\\cargomod_{scheme.SchemeName}.nml"; var registers = perishableRegisters; if (cargoDef.GetType() == typeof(BulkCargoDefinition)) { registers = bulkRegisters; templateFile = $"{templateDir}\\bulkCargoUserParams.nml"; } var contents = File.ReadAllText(templateFile); foreach (var register in registers) { var prop = cargoDef.GetType().GetProperty(register); if (prop == null) { continue; } var value = prop.GetValue(cargoDef).ToString(); contents = contents.Replace($"{{{{{register}}}}}", value); } contents = contents.Replace("{{TypeName}}", cargoDef.TypeName.Replace(" ", "_")); File.AppendAllText(outputPath, contents); }
public static void WriteNMLCalculation(CargoScheme scheme, CargoDefinition cargoDef) { var outputDir = $"{Config.NMLOutputDirectory}\\{scheme.SchemeName}"; var templateDir = $"{Config.NMLTemplateDirectory}"; var schemeTemplateDir = $"{templateDir}\\{scheme.SchemeName}"; var templateFile = $"{templateDir}\\perishableCargoCalculations.nml"; var outputPath = $"{outputDir}\\cargomod_{scheme.SchemeName}.nml"; var registers = perishableRegisters; if (cargoDef.GetType() == typeof(BulkCargoDefinition)) { registers = bulkRegisters; templateFile = $"{templateDir}\\bulkCargoCalculations.nml"; } var contents = File.ReadAllText(templateFile); for (var i = 0; i < registers.Length; i++) { var register = registers[i]; contents = contents.Replace($"{{{{{register}}}}}", $"LOAD_TEMP({i})"); } File.AppendAllText(outputPath, contents); }
public CargoDefinitionEditor(CargoDefinition definition) { InitializeComponent(); this.definition = definition; var titleBinding = new Binding("TypeName") { Source = definition, StringFormat = "Cargo definition editor - {0}", Mode = BindingMode.OneWay }; SetBinding(TitleProperty, titleBinding); CreateControls(); }
private void OpenEditor(CargoDefinition cargoDef) { var wnd = new CargoDefinitionEditor(cargoDef); wnd.RefreshOnly.Click += (o, eventArgs) => GraphCargoes(); wnd.RefreshAll.Click += (o, eventArgs) => { GraphCargoes(); SetVisibility(true); }; wnd.RefreshOnlyThis.Click += (o, eventArgs) => { GraphCargoes(); SetVisibility(false); cargoDef.Visible = true; SetVisibility(); }; wnd.Show(); }
public static void WriteNMLCargoItem(CargoScheme scheme, CargoDefinition cargoDef) { var outputDir = $"{Config.NMLOutputDirectory}\\{scheme.SchemeName}"; var templateDir = $"{Config.NMLTemplateDirectory}"; var schemeTemplateDir = $"{templateDir}\\{scheme.SchemeName}"; var templateFile = $"{templateDir}\\cargoItem.nml"; var outputPath = $"{outputDir}\\cargomod_{scheme.SchemeName}.nml"; var contents = File.ReadAllText(templateFile); contents = contents .Replace("{{TypeName}}", cargoDef.TypeName.Replace(" ", "_")) .Replace("{{ItemID}}", cargoDef.ItemID.ToString()) .Replace("{{PriceFactor}}", cargoDef.PriceFactor.ToString()) .Replace("{{CargoSprite}}", cargoDef.CargoSprite) .Replace("{{CargoIcon}}", cargoDef.CargoSprite == "NEW_CARGO_SPRITE" ? $"{cargoDef.CargoIcon}; " : ""); File.AppendAllText(outputPath, contents); }
private void GraphCargo(CargoDefinition cargoDef, int?startDist = null, int?maxDist = null, int?interval = null) { if (!interval.HasValue) { interval = 20; } if (!startDist.HasValue) { startDist = interval.Value; } if (!maxDist.HasValue) { maxDist = (ushort)(startDist.Value + 1); } var callbackRange = cargoDef.GetCallbackResultsForDistances(startDist.Value, maxDist.Value, interval.Value); var lineSerieses = new List <LineSeries>(); foreach (var metrics in callbackRange.CallbackMetricses) { var lineSeries = new LineSeries { Title = $"{cargoDef.TypeName} ({metrics.Distance})", RenderInLegend = false, TextColor = OxyColors.Yellow, StrokeThickness = 1, Color = OxyColor.FromArgb(cargoDef.Color.A, cargoDef.Color.R, cargoDef.Color.G, cargoDef.Color.B), }; var adjustedDataPoints = new List <DataPoint>(); foreach (var dataPoint in metrics.DataPoints) { adjustedDataPoints.Add(new DataPoint(dataPoint.X, dataPoint.Y * cargoDef.PriceFactor)); } lineSeries.Points.AddRange(adjustedDataPoints); lineSeries.Tag = metrics; lineSeries.IsVisible = cargoDef.Visible; plotModel.Series.Add(lineSeries); lineSerieses.Add(lineSeries); } CreateLegendItem(cargoDef, lineSerieses); Debug.WriteLine(callbackRange.GetDebugInfo(cargoDef.TypeName)); }
private void ShowDebug(CargoDefinition cargoDef, List <LineSeries> lineSerieses) { var first = lineSerieses.First().Tag as CallbackPerDistanceMetrics; if (first == null) { return; } var content = first.GetHeaderString(cargoDef.TypeName); foreach (var series in lineSerieses) { var metrics = series.Tag as CallbackPerDistanceMetrics; if (metrics == null) { continue; } content += $"\n{metrics.GetDataString()}"; } var wnd = new DebugInfoWindow(cargoDef.TypeName, content); wnd.Show(); }
private void CreateLegendItem(CargoDefinition cargoDef, List <LineSeries> lineSerieses) { var label = new Label { Foreground = cargoDef.Visible ? Brushes.Yellow : Brushes.DarkGray, FontSize = 12, Padding = new Thickness(3, 0, 0, 0), VerticalAlignment = VerticalAlignment.Top, Content = cargoDef.TypeName, Margin = new Thickness(0, 0, 7, 0), }; var dockPanel = new DockPanel { Height = 20, Tag = new Tuple <CargoDefinition, List <LineSeries>, Label>(cargoDef, lineSerieses, label), }; var fillBrush = new SolidColorBrush(); var colorBinding = new Binding("Color") { Source = cargoDef }; BindingOperations.SetBinding(fillBrush, SolidColorBrush.ColorProperty, colorBinding); dockPanel.Children.Add(new Rectangle { Width = 15, Height = 11, Fill = fillBrush, Stroke = Brushes.Black, StrokeThickness = 1, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(7, 0, 0, 0), }); dockPanel.Children.Add(label); dockPanel.MouseEnter += (sender, args) => { dockPanel.Background = new SolidColorBrush(Color.FromArgb(0x80, 0, 0, 0)); }; dockPanel.MouseLeave += (sender, args) => { dockPanel.Background = Brushes.Transparent; }; dockPanel.MouseDown += (sender, args) => { if (args.ChangedButton == MouseButton.Left) { cargoDef.Visible = !cargoDef.Visible; SetVisibility(); } else if (args.ChangedButton == MouseButton.Right) { var menu = new ContextMenu(); var showDebugMenuItem = new MenuItem { Header = "Show info", }; showDebugMenuItem.Click += (m, ea) => { ShowDebug(cargoDef, lineSerieses); }; menu.Items.Add(showDebugMenuItem); var editMenuItem = new MenuItem { Header = "Edit", }; editMenuItem.Click += (m, ea) => { OpenEditor(cargoDef); }; menu.Items.Add(editMenuItem); var removeMenuItem = new MenuItem { Header = "Remove" }; removeMenuItem.Click += (o, eventArgs) => { CurrentScheme.CargoDefinitions.Remove(cargoDef); GraphCargoes(); }; menu.Items.Add(removeMenuItem); dockPanel.ContextMenu = menu; } }; Legend.Children.Add(dockPanel); }