Skip to content

Commit

Permalink
improve
Browse files Browse the repository at this point in the history
  • Loading branch information
EFLFE committed Aug 13, 2022
1 parent 2f85948 commit 713c33a
Show file tree
Hide file tree
Showing 12 changed files with 161 additions and 15 deletions.
2 changes: 1 addition & 1 deletion Artorio/App.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ namespace Artorio
/// </summary>
public partial class App : Application
{
public const string VERSION = "1.3.0";
public const string VERSION = "1.3.1";
}
}
7 changes: 7 additions & 0 deletions Artorio/Artorio.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,15 @@
<DependentUpon>MainWindow.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Page Include="PreviewWindow.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Compile Include="PreviewWindow.xaml.cs">
<DependentUpon>PreviewWindow.xaml</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
Expand Down
10 changes: 9 additions & 1 deletion Artorio/ColorItemCast.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,15 @@
<CheckBox x:Name="useRangeColor" HorizontalAlignment="Left" Margin="114,14,0,0" VerticalAlignment="Top"/>
<TextBlock HorizontalAlignment="Left" Margin="132,0,0,0" TextWrapping="Wrap" Text="range to" VerticalAlignment="Center"/>
<Rectangle Panel.ZIndex="-1" Fill="#FFA0A6B9" HorizontalAlignment="Left" Margin="106,0,0,0" Width="106"/>
<Rectangle x:Name="itemColorRect" HorizontalAlignment="Left" Margin="525,10,0,10" Width="19" Fill="{x:Null}"/>
<!--<Rectangle x:Name="itemColorRect" HorizontalAlignment="Left" Margin="525,10,0,10" Width="19" Fill="{x:Null}"/>-->
<Button x:Name="itemColorRect" Click="CopyColorFromItem" HorizontalAlignment="Left" Margin="525,10,0,10" Width="19" VerticalAlignment="Center" Height="20" Background="{x:Null}">
<Button.BorderBrush>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0"/>
<GradientStop Color="White" Offset="1"/>
</LinearGradientBrush>
</Button.BorderBrush>
</Button>
<TextBlock x:Name="filterTag" HorizontalAlignment="Left" Margin="549,0,0,0" Text="" VerticalAlignment="Center" Height="20" Width="31"/>
</Grid>
</UserControl>
24 changes: 21 additions & 3 deletions Artorio/ColorItemCast.xaml.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Runtime.ConstrainedExecution;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
Expand Down Expand Up @@ -110,11 +111,11 @@ private void FindItemColor(string itemName)

if (ItemColors.FindItem(itemName, out ItemData data))
{
itemColorRect.Fill = new SolidColorBrush(data.MapColor);
itemColorRect.Background = new SolidColorBrush(data.MapColor);
}
else
{
itemColorRect.Fill = null;
itemColorRect.Background = null;
}
}

Expand All @@ -141,12 +142,20 @@ private void ItemName_SelectionChanged(object sender, SelectionChangedEventArgs
}
else
{
itemColorRect.Fill = null;
itemColorRect.Background = null;
itemColorRect.Background = null;
filterTag.Text = "?";
}
}

private void SetFilterItem(ItemData itemData)
{
if (itemData == null)
{
filterTag.Text = "?";
return;
}

filterConfig.Item = itemData;

switch (itemData.ItemType)
Expand Down Expand Up @@ -223,5 +232,14 @@ private void MoveDownClick(object sender, RoutedEventArgs e)
{
OnMoveDownClick?.Invoke(ID);
}

private void CopyColorFromItem(object sender, RoutedEventArgs e)
{
var color = itemColorRect.Background as SolidColorBrush;
var toColor = color.Color;
colorFrom.Background = new SolidColorBrush(toColor);
filterConfig.FromColor = toColor;
colorFrom.ToolTip = toColor.ToString();
}
}
}
2 changes: 1 addition & 1 deletion Artorio/EFPNG/Color.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Artorio.EFPng
{
internal struct Color
public struct Color
{
public byte R;
public byte G;
Expand Down
2 changes: 1 addition & 1 deletion Artorio/EFPNG/PngData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

namespace Artorio.EFPng
{
internal sealed class PngData
public sealed class PngData
{
private byte[,] imgData;
private int pixelWidth;
Expand Down
10 changes: 9 additions & 1 deletion Artorio/FactorioBPMaker.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ namespace Artorio
/// <summary>
/// Factorio blueprint maker.
/// </summary>
sealed class FactorioBPMaker
public sealed class FactorioBPMaker
{
private PngData png;
private StringBuilder sb;
Expand All @@ -24,6 +24,11 @@ sealed class FactorioBPMaker
private bool[,] mask;

private CultureInfo occultism;
private ItemData[] generatedDataPreview;

public ItemData[] GeneratedDataPreview => generatedDataPreview;

public PngData LoadedPng => png;

public bool HaveFilterConfig => filterConfigs.Count > 0;

Expand Down Expand Up @@ -103,6 +108,7 @@ public string CreateBlueprint(out int insertItems)
sbEntities.AppendLine(" 'entities': [ ");

int lastCount = sb.Length + sbTiles.Length + sbEntities.Length;
generatedDataPreview = new ItemData[png.GetDataWidth * png.GetDataHeight];

int hw = png.GetPixelWidth / 2;
int hh = png.GetPixelHeight / 2;
Expand Down Expand Up @@ -240,6 +246,8 @@ private bool CompareRGBColors(Color pngColor, System.Windows.Media.Color wpfColo
private void InsertJSONItem(int xiter, int hw, int y, int hh, ItemData itemData)
{
items++;
generatedDataPreview[xiter + y * png.GetPixelWidth] = itemData;

if (itemData.ItemType == ItemTypeEnum.Floor)
{
sbTiles.AppendLine(" {");
Expand Down
2 changes: 1 addition & 1 deletion Artorio/ItemColors.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ static ItemColors()
// floors
new ItemData("stone-path", Color.FromRgb(80,82,72), ItemTypeEnum.Floor),
new ItemData("concrete", Color.FromRgb(56, 56, 56), ItemTypeEnum.Floor),
new ItemData("refined-concrete-left", Color.FromRgb(48, 48, 40), ItemTypeEnum.Floor),
new ItemData("refined-concrete", Color.FromRgb(48, 48, 40), ItemTypeEnum.Floor),
new ItemData("hazard-concrete-left", Color.FromRgb(176, 138, 32), ItemTypeEnum.Floor),
new ItemData("refined-hazard-concrete-left", Color.FromRgb(112, 90, 24) , ItemTypeEnum.Floor),

Expand Down
11 changes: 7 additions & 4 deletions Artorio/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Artorio"
mc:Ignorable="d"
ResizeMode="CanMinimize"
Title="Artorio" Height="450" Width="690">
ResizeMode="CanResize"
Title="Artorio"
MinHeight="450" MinWidth="690"
Height="450" Width="690">
<Grid x:Name="mainGrid">
<TextBox x:Name="inputPath" Height="23" Margin="127,26,10,0" TextWrapping="Wrap" VerticalAlignment="Top"/>
<Button Click="SelectImageClick" Content="Select image file" HorizontalAlignment="Left" Margin="10,26,0,0" VerticalAlignment="Top" Width="112" Height="23"/>
<Button x:Name="convertAndCopyButton" Click="ConvertAndCopyClick" Content="Convert &amp; copy" IsEnabled="False" HorizontalAlignment="Left" Margin="10,54,0,0" VerticalAlignment="Top" Width="112" Height="21"/>
<Button x:Name="convertAndCopyButton" Click="ConvertAndCopyClick" Content="Convert &amp; preview" IsEnabled="False" HorizontalAlignment="Left" Margin="10,54,0,0" VerticalAlignment="Top" Width="112" Height="21"/>
<GroupBox Header="Cast Config" Margin="10,80,10,12">
<ScrollViewer>
<StackPanel x:Name="configStack" Orientation="Vertical">
Expand All @@ -30,7 +32,8 @@
<MenuItem Header="About" Click="MenuAboutClick"/>
</MenuItem>
</Menu>
<TextBlock x:Name="warningTextBlock" Margin="256,54,10,0" TextWrapping="Wrap" Text="[!] warning text [!]" TextAlignment="Right" VerticalAlignment="Top" FontWeight="Bold"/>
<TextBlock x:Name="warningTextBlock" Margin="127,54,10,0" TextWrapping="Wrap" Text="[!] warning text [!]" TextAlignment="Left"
VerticalAlignment="Top" FontWeight="Bold" Height="21" FontSize="14" Foreground="#FF840000"/>

</Grid>
</Window>
7 changes: 5 additions & 2 deletions Artorio/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -303,8 +303,11 @@ private void CreateBlueprint(string pngPath)
}
else
{
Dispatcher.Invoke(() => Clipboard.SetText(result, TextDataFormat.Text));
MessageBox.Show("Success. Blueprint the clipboard.\nItems: " + insertItems.ToString(), "OK", MessageBoxButton.OK, MessageBoxImage.Information);
Dispatcher.Invoke(() =>
{
var preview = new PreviewWindow();
preview.ShowWindow(bpMaker, result, insertItems);
});
}
}
catch (Exception ex)
Expand Down
18 changes: 18 additions & 0 deletions Artorio/PreviewWindow.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<Window x:Class="Artorio.PreviewWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Artorio"
mc:Ignorable="d"
ResizeMode="CanResize"
WindowStyle="ToolWindow"
RenderOptions.BitmapScalingMode="NearestNeighbor"
Title="PreviewWindow" Height="579" Width="512">
<Grid>
<Image x:Name="image" SnapsToDevicePixels="True" UseLayoutRounding="True" Margin="0,0,0,67"/>
<TextBlock x:Name="info" Margin="10,0,10,43" TextWrapping="Wrap" Text="TextBlock" Height="16" VerticalAlignment="Bottom"/>
<Button Click="CopyClick" Content="Copy blueprint and close" HorizontalAlignment="Left" Margin="10,0,0,18" Height="20" VerticalAlignment="Bottom" Width="152"/>
<Button Click="CancelClick" Content="Cancel" Margin="0,0,10,18" VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="104"/>
</Grid>
</Window>
81 changes: 81 additions & 0 deletions Artorio/PreviewWindow.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
using System.Drawing;
using System.IO;
using System.Windows;
using System.Windows.Media.Imaging;

namespace Artorio
{
/// <summary>
/// Interaction logic for PreviewWindow.xaml
/// </summary>
public partial class PreviewWindow : Window
{
private string result;

public PreviewWindow()
{
InitializeComponent();
}

public void ShowWindow(FactorioBPMaker factorioBPMaker, string result, int insertItems)
{
this.result = result;
var genData = factorioBPMaker.GeneratedDataPreview;
var png = factorioBPMaker.LoadedPng;

using (Bitmap bitmap = new Bitmap(png.GetPixelWidth, png.GetPixelHeight))
{
int i = -1;
// draw
for (int y = 0; y < png.GetPixelHeight; y++)
{
for (int x = 0; x < png.GetPixelWidth; x++)
{
i++;
if (genData[i] == null)
{
bitmap.SetPixel(x, y, System.Drawing.Color.Black);
continue;
}

var clr = genData[i].MapColor;
bitmap.SetPixel(x, y, System.Drawing.Color.FromArgb(clr.R, clr.G, clr.B));
}
}

// apply
image.Source = BitmapToImageSource(bitmap);
}

info.Text = $"Size: {png.GetPixelWidth} x {png.GetPixelHeight} :: Items: {insertItems}";
ShowDialog();
}

private BitmapImage BitmapToImageSource(Bitmap bitmap)
{
using (MemoryStream memory = new MemoryStream())
{
bitmap.Save(memory, System.Drawing.Imaging.ImageFormat.Bmp);
memory.Position = 0;
BitmapImage bitmapimage = new BitmapImage();
bitmapimage.BeginInit();
bitmapimage.StreamSource = memory;
bitmapimage.CacheOption = BitmapCacheOption.OnLoad;
bitmapimage.EndInit();

return bitmapimage;
}
}

private void CopyClick(object sender, RoutedEventArgs e)
{
Clipboard.SetText(result, TextDataFormat.Text);
Close();
}

private void CancelClick(object sender, RoutedEventArgs e)
{
Close();
}
}
}

0 comments on commit 713c33a

Please sign in to comment.