Beispiel #1
0
        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);
        }
Beispiel #2
0
        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();
        }
Beispiel #5
0
        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);
        }