mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-12 20:06:33 +00:00
Signitifantly reduced build size
Updated project folder names Show only selected layer in visualization Added rectangle support
This commit is contained in:
1 parent
b74a1b2871
commit
04bc8f013a
52 files changed
+373
-633
No files matched your search
@@ -0,0 +1,137 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{7F4C7AB0-4C9B-452D-AFED-34544C903DEF}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Artemis.Plugins.LayerBrushes.Noise</RootNamespace>
|
||||
<AssemblyName>Artemis.Plugins.LayerBrushes.Noise</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<Deterministic>true</Deterministic>
|
||||
<ShouldIncludeNativeSkiaSharp>false</ShouldIncludeNativeSkiaSharp>
|
||||
<TargetFrameworkProfile />
|
||||
<NuGetPackageImportStamp>
|
||||
</NuGetPackageImportStamp>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x64\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<LangVersion>7</LangVersion>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||
<OutputPath>bin\x64\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<LangVersion>7.3</LangVersion>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="MaterialDesignColors, Version=1.2.0.325, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\MaterialDesignColors.1.2.0\lib\net45\MaterialDesignColors.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="MaterialDesignThemes.Wpf">
|
||||
<HintPath>..\packages\MaterialDesignThemes.2.6.0\lib\net45\MaterialDesignThemes.Wpf.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="PresentationFramework" />
|
||||
<Reference Include="RGB.NET.Core, Version=0.1.25.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\..\RGB.NET\bin\net45\RGB.NET.Core.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="SkiaSharp, Version=1.68.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\SkiaSharp.1.68.1\lib\net45\SkiaSharp.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Stylet, Version=1.3.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Stylet.1.3.0\lib\net45\Stylet.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Buffers.4.5.0\lib\netstandard2.0\System.Buffers.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Numerics" />
|
||||
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.6.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xaml" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="WindowsBase" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="NoiseBrushSettings.cs" />
|
||||
<Compile Include="NoiseBrushViewModel.cs" />
|
||||
<Compile Include="NoiseBrush.cs" />
|
||||
<Compile Include="NoiseBrushProvider.cs" />
|
||||
<Compile Include="Utilities\OpenSimplexNoise.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Artemis.Core\Artemis.Core.csproj">
|
||||
<Project>{9b811f9b-86b9-4771-87af-72bae7078a36}</Project>
|
||||
<Name>Artemis.Core</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Artemis.UI.Shared\Artemis.UI.Shared.csproj">
|
||||
<Project>{adb357e6-151d-4d0d-87cb-68fd0bc29812}</Project>
|
||||
<Name>Artemis.UI.Shared</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="app.config" />
|
||||
<None Include="packages.config" />
|
||||
<None Include="plugin.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Page Include="NoiseBrushView.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
<PostBuildEvent>echo Copying plugin to Artemis.UI output directory
|
||||
XCOPY "$(TargetDir.TrimEnd('\'))" "$(SolutionDir)\Artemis.UI\$(OutDir)Plugins\$(ProjectName)" /s /q /i /y</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
<Import Project="..\packages\SkiaSharp.1.68.1\build\net45\SkiaSharp.targets" Condition="Exists('..\packages\SkiaSharp.1.68.1\build\net45\SkiaSharp.targets')" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\packages\SkiaSharp.1.68.1\build\net45\SkiaSharp.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\SkiaSharp.1.68.1\build\net45\SkiaSharp.targets'))" />
|
||||
</Target>
|
||||
</Project>
|
||||
@@ -0,0 +1,85 @@
|
||||
using System;
|
||||
using Artemis.Core.Models.Profile;
|
||||
using Artemis.Core.Plugins.LayerBrush;
|
||||
using Artemis.Plugins.LayerBrushes.Noise.Utilities;
|
||||
using SkiaSharp;
|
||||
|
||||
namespace Artemis.Plugins.LayerBrushes.Noise
|
||||
{
|
||||
public class NoiseBrush : LayerBrush
|
||||
{
|
||||
private const int Scale = 6;
|
||||
private static readonly Random Rand = new Random();
|
||||
private readonly OpenSimplexNoise _noise;
|
||||
private float _z;
|
||||
|
||||
public NoiseBrush(Layer layer, NoiseBrushSettings settings, LayerBrushDescriptor descriptor) : base(layer, settings, descriptor)
|
||||
{
|
||||
Settings = settings;
|
||||
|
||||
_z = Rand.Next(0, 4096);
|
||||
_noise = new OpenSimplexNoise(Rand.Next(0, 4096));
|
||||
}
|
||||
|
||||
public new NoiseBrushSettings Settings { get; }
|
||||
|
||||
|
||||
public override void Update(double deltaTime)
|
||||
{
|
||||
// TODO: Come up with a better way to use deltaTime
|
||||
_z += Settings.AnimationSpeed / 500f / 0.04f * (float) deltaTime;
|
||||
|
||||
if (_z >= float.MaxValue)
|
||||
_z = 0;
|
||||
|
||||
base.Update(deltaTime);
|
||||
}
|
||||
|
||||
public override LayerBrushViewModel GetViewModel()
|
||||
{
|
||||
return new NoiseBrushViewModel(this);
|
||||
}
|
||||
|
||||
public override void Render(SKCanvas canvas)
|
||||
{
|
||||
// Scale down the render path to avoid computing a value for every pixel
|
||||
var width = (int) (Math.Max(Layer.Rectangle.Width, Layer.Rectangle.Height) / Scale);
|
||||
var height = (int) (Math.Max(Layer.Rectangle.Width, Layer.Rectangle.Height) / Scale);
|
||||
var opacity = (float) Math.Round(Settings.Color.Alpha / 255.0, 2, MidpointRounding.AwayFromZero);
|
||||
using (var bitmap = new SKBitmap(new SKImageInfo(width, height)))
|
||||
{
|
||||
bitmap.Erase(new SKColor(0, 0, 0, 0));
|
||||
// Only compute pixels inside LEDs, due to scaling there may be some rounding issues but it's neglect-able
|
||||
foreach (var artemisLed in Layer.Leds)
|
||||
{
|
||||
var xStart = artemisLed.AbsoluteRenderRectangle.Left / Scale;
|
||||
var xEnd = artemisLed.AbsoluteRenderRectangle.Right / Scale;
|
||||
var yStart = artemisLed.AbsoluteRenderRectangle.Top / Scale;
|
||||
var yEnd = artemisLed.AbsoluteRenderRectangle.Bottom / Scale;
|
||||
|
||||
for (var x = xStart; x < xEnd; x++)
|
||||
{
|
||||
for (var y = yStart; y < yEnd; y++)
|
||||
{
|
||||
var v = _noise.Evaluate(Settings.XScale * x / width, Settings.YScale * y / height, _z);
|
||||
var alpha = (byte) ((v + 1) * 127 * opacity);
|
||||
// There's some fun stuff we can do here, like creating hard lines
|
||||
// if (alpha > 128)
|
||||
// alpha = 255;
|
||||
// else
|
||||
// alpha = 0;
|
||||
var color = new SKColor(Settings.Color.Red, Settings.Color.Green, Settings.Color.Blue, alpha);
|
||||
bitmap.SetPixel((int) x, (int) y, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
using (var sh = SKShader.CreateBitmap(bitmap, SKShaderTileMode.Mirror, SKShaderTileMode.Mirror, SKMatrix.MakeScale(Scale, Scale)))
|
||||
using (var paint = new SKPaint {Shader = sh, BlendMode = Settings.BlendMode})
|
||||
{
|
||||
canvas.DrawPath(Layer.LayerShape.RenderPath, paint);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
|
||||
using Artemis.Core.Plugins.LayerBrush;
|
||||
using Artemis.Core.Plugins.Models;
|
||||
|
||||
namespace Artemis.Plugins.LayerBrushes.Noise
|
||||
{
|
||||
public class NoiseBrushProvider : LayerBrushProvider
|
||||
{
|
||||
public NoiseBrushProvider(PluginInfo pluginInfo) : base(pluginInfo)
|
||||
{
|
||||
AddLayerBrushDescriptor<NoiseBrush>("Noise", "A brush of that shows an animated random noise", "ScatterPlot");
|
||||
}
|
||||
|
||||
public override void EnablePlugin()
|
||||
{
|
||||
}
|
||||
|
||||
public override void DisablePlugin()
|
||||
{
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
using Artemis.Core.Plugins.LayerBrush;
|
||||
using SkiaSharp;
|
||||
|
||||
namespace Artemis.Plugins.LayerBrushes.Noise
|
||||
{
|
||||
public class NoiseBrushSettings : LayerBrushSettings
|
||||
{
|
||||
private float _animationSpeed;
|
||||
private SKBlendMode _blendMode;
|
||||
private SKColor _color;
|
||||
private float _xScale;
|
||||
private float _yScale;
|
||||
|
||||
public NoiseBrushSettings()
|
||||
{
|
||||
// Color = new SKColor(0, 0, 0);
|
||||
// BlendMode = SKBlendMode.Color;
|
||||
// XScale = 0.5f;
|
||||
// YScale = 0.5f;
|
||||
// AnimationSpeed = 50f;
|
||||
}
|
||||
|
||||
public SKColor Color
|
||||
{
|
||||
get => _color;
|
||||
set => SetAndNotify(ref _color, value);
|
||||
}
|
||||
|
||||
public SKBlendMode BlendMode
|
||||
{
|
||||
get => _blendMode;
|
||||
set => SetAndNotify(ref _blendMode, value);
|
||||
}
|
||||
|
||||
public float XScale
|
||||
{
|
||||
get => _xScale;
|
||||
set => SetAndNotify(ref _xScale, value);
|
||||
}
|
||||
|
||||
public float YScale
|
||||
{
|
||||
get => _yScale;
|
||||
set => SetAndNotify(ref _yScale, value);
|
||||
}
|
||||
|
||||
public float AnimationSpeed
|
||||
{
|
||||
get => _animationSpeed;
|
||||
set => SetAndNotify(ref _animationSpeed, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,140 @@
|
||||
<UserControl x:Class="Artemis.Plugins.LayerBrushes.Noise.NoiseBrushView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:artemis="clr-namespace:Artemis.UI.Shared;assembly=Artemis.UI.Shared"
|
||||
xmlns:converters="clr-namespace:Artemis.UI.Shared.Converters;assembly=Artemis.UI.Shared"
|
||||
xmlns:noiseBrush="clr-namespace:Artemis.Plugins.LayerBrushes.Noise"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="450" d:DesignWidth="800"
|
||||
d:DataContext="{d:DesignInstance {x:Type noiseBrush:NoiseBrushViewModel}}">
|
||||
<!-- <UserControl.Resources> -->
|
||||
<!-- <ResourceDictionary> -->
|
||||
<!-- <ResourceDictionary.MergedDictionaries> -->
|
||||
<!-- <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" /> -->
|
||||
<!-- </ResourceDictionary.MergedDictionaries> -->
|
||||
<!-- <converters:SKColorToColorConverter x:Key="SKColorToColorConverter" /> -->
|
||||
<!-- </ResourceDictionary> -->
|
||||
<!-- </UserControl.Resources> -->
|
||||
<!-- -->
|
||||
<!-- <Grid Margin="12"> -->
|
||||
<!-- <Grid.RowDefinitions> -->
|
||||
<!-- <RowDefinition Height="Auto" /> -->
|
||||
<!-- <RowDefinition Height="Auto" /> -->
|
||||
<!-- <RowDefinition Height="Auto" /> -->
|
||||
<!-- <RowDefinition Height="Auto" /> -->
|
||||
<!-- <RowDefinition Height="Auto" /> -->
|
||||
<!-- <RowDefinition Height="Auto" /> -->
|
||||
<!-- </Grid.RowDefinitions> -->
|
||||
<!-- -->
|
||||
<!-- <Grid Grid.Row="0"> -->
|
||||
<!-- <Grid.RowDefinitions> -->
|
||||
<!-- <RowDefinition /> -->
|
||||
<!-- <RowDefinition /> -->
|
||||
<!-- </Grid.RowDefinitions> -->
|
||||
<!-- <Grid.ColumnDefinitions> -->
|
||||
<!-- <ColumnDefinition Width="*" /> -->
|
||||
<!-- <ColumnDefinition Width="Auto" /> -->
|
||||
<!-- </Grid.ColumnDefinitions> -->
|
||||
<!-- <StackPanel Grid.Column="0" VerticalAlignment="Center"> -->
|
||||
<!-- <TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}" Text="Noise color" /> -->
|
||||
<!-- </StackPanel> -->
|
||||
<!-- <StackPanel Grid.Row="0" Grid.Column="1" VerticalAlignment="Center"> -->
|
||||
<!-- <artemis:ColorPicker Color="{Binding Brush.Settings.Color, Converter={StaticResource SKColorToColorConverter}}" Width="100" /> -->
|
||||
<!-- </StackPanel> -->
|
||||
<!-- <Separator Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Style="{StaticResource MaterialDesignSeparator}" /> -->
|
||||
<!-- </Grid> -->
|
||||
<!-- -->
|
||||
<!-- <Grid Grid.Row="1"> -->
|
||||
<!-- <Grid.RowDefinitions> -->
|
||||
<!-- <RowDefinition /> -->
|
||||
<!-- <RowDefinition /> -->
|
||||
<!-- </Grid.RowDefinitions> -->
|
||||
<!-- <Grid.ColumnDefinitions> -->
|
||||
<!-- <ColumnDefinition Width="*" /> -->
|
||||
<!-- <ColumnDefinition Width="Auto" /> -->
|
||||
<!-- </Grid.ColumnDefinitions> -->
|
||||
<!-- <StackPanel Grid.Column="0" VerticalAlignment="Center"> -->
|
||||
<!-- <TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}"> -->
|
||||
<!-- <Run Text="Blend mode" /> -->
|
||||
<!-- </TextBlock> -->
|
||||
<!-- <TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}" Foreground="{DynamicResource MaterialDesignCheckBoxDisabled}"> -->
|
||||
<!-- <Run Text="Affects how the noise is rendered on the rest of the layer" /> -->
|
||||
<!-- </TextBlock> -->
|
||||
<!-- </StackPanel> -->
|
||||
<!-- <StackPanel Grid.Row="0" Grid.Column="1" VerticalAlignment="Center"> -->
|
||||
<!-- <ComboBox HorizontalAlignment="Left" -->
|
||||
<!-- ItemsSource="{Binding BlendModes}" -->
|
||||
<!-- SelectedValuePath="Value" -->
|
||||
<!-- DisplayMemberPath="Description" -->
|
||||
<!-- Width="100" -->
|
||||
<!-- SelectedValue="{Binding Brush.Settings.BlendMode}" /> -->
|
||||
<!-- </StackPanel> -->
|
||||
<!-- <Separator Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Style="{StaticResource MaterialDesignSeparator}" /> -->
|
||||
<!-- </Grid> -->
|
||||
<!-- -->
|
||||
<!-- <Grid Grid.Row="2"> -->
|
||||
<!-- <Grid.RowDefinitions> -->
|
||||
<!-- <RowDefinition /> -->
|
||||
<!-- <RowDefinition /> -->
|
||||
<!-- </Grid.RowDefinitions> -->
|
||||
<!-- <Grid.ColumnDefinitions> -->
|
||||
<!-- <ColumnDefinition Width="*" /> -->
|
||||
<!-- <ColumnDefinition Width="Auto" /> -->
|
||||
<!-- </Grid.ColumnDefinitions> -->
|
||||
<!-- <StackPanel Grid.Column="0" VerticalAlignment="Center"> -->
|
||||
<!-- <TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}"> -->
|
||||
<!-- <Run Text="X Scale" /> -->
|
||||
<!-- </TextBlock> -->
|
||||
<!-- </StackPanel> -->
|
||||
<!-- <StackPanel Grid.Row="0" Grid.Column="1" VerticalAlignment="Center"> -->
|
||||
<!-- <Slider Orientation="Horizontal" TickFrequency="0.5" Minimum="0.5" Maximum="40" Value="{Binding Brush.Settings.XScale}" Width="100" /> -->
|
||||
<!-- </StackPanel> -->
|
||||
<!-- <Separator Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Style="{StaticResource MaterialDesignSeparator}" /> -->
|
||||
<!-- </Grid> -->
|
||||
<!-- -->
|
||||
<!-- ~1~ Sample 1 @1@ -->
|
||||
<!-- <Grid Grid.Row="3"> -->
|
||||
<!-- <Grid.RowDefinitions> -->
|
||||
<!-- <RowDefinition /> -->
|
||||
<!-- <RowDefinition /> -->
|
||||
<!-- </Grid.RowDefinitions> -->
|
||||
<!-- <Grid.ColumnDefinitions> -->
|
||||
<!-- <ColumnDefinition Width="*" /> -->
|
||||
<!-- <ColumnDefinition Width="Auto" /> -->
|
||||
<!-- </Grid.ColumnDefinitions> -->
|
||||
<!-- <StackPanel Grid.Column="0" VerticalAlignment="Center"> -->
|
||||
<!-- <TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}"> -->
|
||||
<!-- <Run Text="Y Scale" /> -->
|
||||
<!-- </TextBlock> -->
|
||||
<!-- </StackPanel> -->
|
||||
<!-- <StackPanel Grid.Row="0" Grid.Column="1" VerticalAlignment="Center"> -->
|
||||
<!-- <Slider Orientation="Horizontal" TickFrequency="0.5" Minimum="0.5" Maximum="40" Value="{Binding Brush.Settings.YScale}" Width="100" /> -->
|
||||
<!-- </StackPanel> -->
|
||||
<!-- <Separator Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Style="{StaticResource MaterialDesignSeparator}" /> -->
|
||||
<!-- </Grid> -->
|
||||
<!-- -->
|
||||
<!-- ~1~ Setting 2 @1@ -->
|
||||
<!-- <Grid Grid.Row="4"> -->
|
||||
<!-- <Grid.RowDefinitions> -->
|
||||
<!-- <RowDefinition /> -->
|
||||
<!-- <RowDefinition /> -->
|
||||
<!-- </Grid.RowDefinitions> -->
|
||||
<!-- <Grid.ColumnDefinitions> -->
|
||||
<!-- <ColumnDefinition Width="*" /> -->
|
||||
<!-- <ColumnDefinition Width="Auto" /> -->
|
||||
<!-- </Grid.ColumnDefinitions> -->
|
||||
<!-- <StackPanel Grid.Column="0" VerticalAlignment="Center"> -->
|
||||
<!-- <TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}"> -->
|
||||
<!-- <Run Text="Animation speed" /> -->
|
||||
<!-- </TextBlock> -->
|
||||
<!-- </StackPanel> -->
|
||||
<!-- <StackPanel Grid.Row="0" Grid.Column="1" VerticalAlignment="Center"> -->
|
||||
<!-- -->
|
||||
<!-- <Slider Orientation="Horizontal" TickFrequency="1" Minimum="1" Maximum="100" Value="{Binding Brush.Settings.AnimationSpeed}" Width="100" /> -->
|
||||
<!-- </StackPanel> -->
|
||||
<!-- <Separator Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Style="{StaticResource MaterialDesignSeparator}" /> -->
|
||||
<!-- </Grid> -->
|
||||
<!-- </Grid> -->
|
||||
</UserControl>
|
||||
@@ -0,0 +1,18 @@
|
||||
using System.Collections.Generic;
|
||||
using Artemis.Core.Plugins.LayerBrush;
|
||||
using Artemis.Core.Utilities;
|
||||
using SkiaSharp;
|
||||
|
||||
namespace Artemis.Plugins.LayerBrushes.Noise
|
||||
{
|
||||
public class NoiseBrushViewModel : LayerBrushViewModel
|
||||
{
|
||||
public NoiseBrushViewModel(NoiseBrush brush) : base(brush)
|
||||
{
|
||||
Brush = brush;
|
||||
}
|
||||
|
||||
public new NoiseBrush Brush { get; }
|
||||
public IEnumerable<ValueDescription> BlendModes => EnumUtilities.GetAllValuesAndDescriptions(typeof(SKBlendMode));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("Artemis.Plugins.LayerBrushes.Noise")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("Artemis.Plugins.LayerBrushes.Noise")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2019")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("7f4c7ab0-4c9b-452d-afed-34544c903def")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
@@ -0,0 +1,449 @@
|
||||
using System;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
namespace Artemis.Plugins.LayerBrushes.Noise.Utilities
|
||||
{
|
||||
public class OpenSimplexNoise
|
||||
{
|
||||
private const double STRETCH_2D = -0.211324865405187; //(1/Math.sqrt(2+1)-1)/2;
|
||||
private const double STRETCH_3D = -1.0 / 6.0; //(1/Math.sqrt(3+1)-1)/3;
|
||||
private const double STRETCH_4D = -0.138196601125011; //(1/Math.sqrt(4+1)-1)/4;
|
||||
private const double SQUISH_2D = 0.366025403784439; //(Math.sqrt(2+1)-1)/2;
|
||||
private const double SQUISH_3D = 1.0 / 3.0; //(Math.sqrt(3+1)-1)/3;
|
||||
private const double SQUISH_4D = 0.309016994374947; //(Math.sqrt(4+1)-1)/4;
|
||||
private const double NORM_2D = 1.0 / 47.0;
|
||||
private const double NORM_3D = 1.0 / 103.0;
|
||||
private const double NORM_4D = 1.0 / 30.0;
|
||||
|
||||
private byte[] perm;
|
||||
private byte[] perm2D;
|
||||
private byte[] perm3D;
|
||||
private byte[] perm4D;
|
||||
|
||||
private static double[] gradients2D = new double[]
|
||||
{
|
||||
5, 2, 2, 5,
|
||||
-5, 2, -2, 5,
|
||||
5, -2, 2, -5,
|
||||
-5, -2, -2, -5,
|
||||
};
|
||||
|
||||
private static double[] gradients3D =
|
||||
{
|
||||
-11, 4, 4, -4, 11, 4, -4, 4, 11,
|
||||
11, 4, 4, 4, 11, 4, 4, 4, 11,
|
||||
-11, -4, 4, -4, -11, 4, -4, -4, 11,
|
||||
11, -4, 4, 4, -11, 4, 4, -4, 11,
|
||||
-11, 4, -4, -4, 11, -4, -4, 4, -11,
|
||||
11, 4, -4, 4, 11, -4, 4, 4, -11,
|
||||
-11, -4, -4, -4, -11, -4, -4, -4, -11,
|
||||
11, -4, -4, 4, -11, -4, 4, -4, -11,
|
||||
};
|
||||
|
||||
private static double[] gradients4D =
|
||||
{
|
||||
3, 1, 1, 1, 1, 3, 1, 1, 1, 1, 3, 1, 1, 1, 1, 3,
|
||||
-3, 1, 1, 1, -1, 3, 1, 1, -1, 1, 3, 1, -1, 1, 1, 3,
|
||||
3, -1, 1, 1, 1, -3, 1, 1, 1, -1, 3, 1, 1, -1, 1, 3,
|
||||
-3, -1, 1, 1, -1, -3, 1, 1, -1, -1, 3, 1, -1, -1, 1, 3,
|
||||
3, 1, -1, 1, 1, 3, -1, 1, 1, 1, -3, 1, 1, 1, -1, 3,
|
||||
-3, 1, -1, 1, -1, 3, -1, 1, -1, 1, -3, 1, -1, 1, -1, 3,
|
||||
3, -1, -1, 1, 1, -3, -1, 1, 1, -1, -3, 1, 1, -1, -1, 3,
|
||||
-3, -1, -1, 1, -1, -3, -1, 1, -1, -1, -3, 1, -1, -1, -1, 3,
|
||||
3, 1, 1, -1, 1, 3, 1, -1, 1, 1, 3, -1, 1, 1, 1, -3,
|
||||
-3, 1, 1, -1, -1, 3, 1, -1, -1, 1, 3, -1, -1, 1, 1, -3,
|
||||
3, -1, 1, -1, 1, -3, 1, -1, 1, -1, 3, -1, 1, -1, 1, -3,
|
||||
-3, -1, 1, -1, -1, -3, 1, -1, -1, -1, 3, -1, -1, -1, 1, -3,
|
||||
3, 1, -1, -1, 1, 3, -1, -1, 1, 1, -3, -1, 1, 1, -1, -3,
|
||||
-3, 1, -1, -1, -1, 3, -1, -1, -1, 1, -3, -1, -1, 1, -1, -3,
|
||||
3, -1, -1, -1, 1, -3, -1, -1, 1, -1, -3, -1, 1, -1, -1, -3,
|
||||
-3, -1, -1, -1, -1, -3, -1, -1, -1, -1, -3, -1, -1, -1, -1, -3,
|
||||
};
|
||||
|
||||
private static Contribution2[] lookup2D;
|
||||
private static Contribution3[] lookup3D;
|
||||
private static Contribution4[] lookup4D;
|
||||
|
||||
static OpenSimplexNoise()
|
||||
{
|
||||
var base2D = new int[][]
|
||||
{
|
||||
new int[] { 1, 1, 0, 1, 0, 1, 0, 0, 0 },
|
||||
new int[] { 1, 1, 0, 1, 0, 1, 2, 1, 1 }
|
||||
};
|
||||
var p2D = new int[] { 0, 0, 1, -1, 0, 0, -1, 1, 0, 2, 1, 1, 1, 2, 2, 0, 1, 2, 0, 2, 1, 0, 0, 0 };
|
||||
var lookupPairs2D = new int[] { 0, 1, 1, 0, 4, 1, 17, 0, 20, 2, 21, 2, 22, 5, 23, 5, 26, 4, 39, 3, 42, 4, 43, 3 };
|
||||
|
||||
var contributions2D = new Contribution2[p2D.Length / 4];
|
||||
for (int i = 0; i < p2D.Length; i += 4)
|
||||
{
|
||||
var baseSet = base2D[p2D[i]];
|
||||
Contribution2 previous = null, current = null;
|
||||
for (int k = 0; k < baseSet.Length; k += 3)
|
||||
{
|
||||
current = new Contribution2(baseSet[k], baseSet[k + 1], baseSet[k + 2]);
|
||||
if (previous == null)
|
||||
{
|
||||
contributions2D[i / 4] = current;
|
||||
}
|
||||
else
|
||||
{
|
||||
previous.Next = current;
|
||||
}
|
||||
previous = current;
|
||||
}
|
||||
current.Next = new Contribution2(p2D[i + 1], p2D[i + 2], p2D[i + 3]);
|
||||
}
|
||||
|
||||
lookup2D = new Contribution2[64];
|
||||
for (var i = 0; i < lookupPairs2D.Length; i += 2)
|
||||
{
|
||||
lookup2D[lookupPairs2D[i]] = contributions2D[lookupPairs2D[i + 1]];
|
||||
}
|
||||
|
||||
|
||||
var base3D = new int[][]
|
||||
{
|
||||
new int[] { 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1 },
|
||||
new int[] { 2, 1, 1, 0, 2, 1, 0, 1, 2, 0, 1, 1, 3, 1, 1, 1 },
|
||||
new int[] { 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 2, 1, 1, 0, 2, 1, 0, 1, 2, 0, 1, 1 }
|
||||
};
|
||||
var p3D = new int[] { 0, 0, 1, -1, 0, 0, 1, 0, -1, 0, 0, -1, 1, 0, 0, 0, 1, -1, 0, 0, -1, 0, 1, 0, 0, -1, 1, 0, 2, 1, 1, 0, 1, 1, 1, -1, 0, 2, 1, 0, 1, 1, 1, -1, 1, 0, 2, 0, 1, 1, 1, -1, 1, 1, 1, 3, 2, 1, 0, 3, 1, 2, 0, 1, 3, 2, 0, 1, 3, 1, 0, 2, 1, 3, 0, 2, 1, 3, 0, 1, 2, 1, 1, 1, 0, 0, 2, 2, 0, 0, 1, 1, 0, 1, 0, 2, 0, 2, 0, 1, 1, 0, 0, 1, 2, 0, 0, 2, 2, 0, 0, 0, 0, 1, 1, -1, 1, 2, 0, 0, 0, 0, 1, -1, 1, 1, 2, 0, 0, 0, 0, 1, 1, 1, -1, 2, 3, 1, 1, 1, 2, 0, 0, 2, 2, 3, 1, 1, 1, 2, 2, 0, 0, 2, 3, 1, 1, 1, 2, 0, 2, 0, 2, 1, 1, -1, 1, 2, 0, 0, 2, 2, 1, 1, -1, 1, 2, 2, 0, 0, 2, 1, -1, 1, 1, 2, 0, 0, 2, 2, 1, -1, 1, 1, 2, 0, 2, 0, 2, 1, 1, 1, -1, 2, 2, 0, 0, 2, 1, 1, 1, -1, 2, 0, 2, 0 };
|
||||
var lookupPairs3D = new int[] { 0, 2, 1, 1, 2, 2, 5, 1, 6, 0, 7, 0, 32, 2, 34, 2, 129, 1, 133, 1, 160, 5, 161, 5, 518, 0, 519, 0, 546, 4, 550, 4, 645, 3, 647, 3, 672, 5, 673, 5, 674, 4, 677, 3, 678, 4, 679, 3, 680, 13, 681, 13, 682, 12, 685, 14, 686, 12, 687, 14, 712, 20, 714, 18, 809, 21, 813, 23, 840, 20, 841, 21, 1198, 19, 1199, 22, 1226, 18, 1230, 19, 1325, 23, 1327, 22, 1352, 15, 1353, 17, 1354, 15, 1357, 17, 1358, 16, 1359, 16, 1360, 11, 1361, 10, 1362, 11, 1365, 10, 1366, 9, 1367, 9, 1392, 11, 1394, 11, 1489, 10, 1493, 10, 1520, 8, 1521, 8, 1878, 9, 1879, 9, 1906, 7, 1910, 7, 2005, 6, 2007, 6, 2032, 8, 2033, 8, 2034, 7, 2037, 6, 2038, 7, 2039, 6 };
|
||||
|
||||
var contributions3D = new Contribution3[p3D.Length / 9];
|
||||
for (int i = 0; i < p3D.Length; i += 9)
|
||||
{
|
||||
var baseSet = base3D[p3D[i]];
|
||||
Contribution3 previous = null, current = null;
|
||||
for (int k = 0; k < baseSet.Length; k += 4)
|
||||
{
|
||||
current = new Contribution3(baseSet[k], baseSet[k + 1], baseSet[k + 2], baseSet[k + 3]);
|
||||
if (previous == null)
|
||||
{
|
||||
contributions3D[i / 9] = current;
|
||||
}
|
||||
else
|
||||
{
|
||||
previous.Next = current;
|
||||
}
|
||||
previous = current;
|
||||
}
|
||||
current.Next = new Contribution3(p3D[i + 1], p3D[i + 2], p3D[i + 3], p3D[i + 4]);
|
||||
current.Next.Next = new Contribution3(p3D[i + 5], p3D[i + 6], p3D[i + 7], p3D[i + 8]);
|
||||
}
|
||||
|
||||
lookup3D = new Contribution3[2048];
|
||||
for (var i = 0; i < lookupPairs3D.Length; i += 2)
|
||||
{
|
||||
lookup3D[lookupPairs3D[i]] = contributions3D[lookupPairs3D[i + 1]];
|
||||
}
|
||||
|
||||
var base4D = new int[][]
|
||||
{
|
||||
new int[] { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1 },
|
||||
new int[] { 3, 1, 1, 1, 0, 3, 1, 1, 0, 1, 3, 1, 0, 1, 1, 3, 0, 1, 1, 1, 4, 1, 1, 1, 1 },
|
||||
new int[] { 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 2, 1, 1, 0, 0, 2, 1, 0, 1, 0, 2, 1, 0, 0, 1, 2, 0, 1, 1, 0, 2, 0, 1, 0, 1, 2, 0, 0, 1, 1 },
|
||||
new int[] { 3, 1, 1, 1, 0, 3, 1, 1, 0, 1, 3, 1, 0, 1, 1, 3, 0, 1, 1, 1, 2, 1, 1, 0, 0, 2, 1, 0, 1, 0, 2, 1, 0, 0, 1, 2, 0, 1, 1, 0, 2, 0, 1, 0, 1, 2, 0, 0, 1, 1 }
|
||||
};
|
||||
var p4D = new int[] { 0, 0, 1, -1, 0, 0, 0, 1, 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 1, 0, 0, 0, 0, 1, -1, 0, 0, 0, 1, 0, -1, 0, 0, -1, 0, 1, 0, 0, 0, -1, 1, 0, 0, 0, 0, 1, -1, 0, 0, -1, 0, 0, 1, 0, 0, -1, 0, 1, 0, 0, 0, -1, 1, 0, 2, 1, 1, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 0, 2, 1, 0, 1, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 0, 2, 0, 1, 1, 0, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 0, 2, 1, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 0, 2, 0, 1, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 0, 2, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 1, 4, 2, 1, 1, 0, 4, 1, 2, 1, 0, 4, 1, 1, 2, 0, 1, 4, 2, 1, 0, 1, 4, 1, 2, 0, 1, 4, 1, 1, 0, 2, 1, 4, 2, 0, 1, 1, 4, 1, 0, 2, 1, 4, 1, 0, 1, 2, 1, 4, 0, 2, 1, 1, 4, 0, 1, 2, 1, 4, 0, 1, 1, 2, 1, 2, 1, 1, 0, 0, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 1, 2, 1, 0, 1, 0, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 1, 2, 0, 1, 1, 0, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 1, 2, 1, 0, 0, 1, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 1, 2, 0, 1, 0, 1, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 1, 2, 0, 0, 1, 1, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 2, 0, 0, 0, 2, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 2, 0, 0, 0, 2, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 2, 0, 0, 0, 2, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 0, 2, 0, 0, 2, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 0, 2, 0, 0, 2, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 0, 2, 0, 0, 2, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 0, 0, 2, 0, 2, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 0, 0, 2, 0, 2, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 0, 0, 2, 0, 2, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 0, 0, 0, 2, 2, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 0, 0, 0, 2, 2, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 0, 0, 0, 2, 2, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 0, 0, 0, 0, 0, 2, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 0, 0, 0, 0, 0, 2, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 0, 0, 0, 0, 0, 2, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 0, 0, 0, 0, 0, 2, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 0, 0, 0, 0, 0, 2, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 0, 0, 0, 0, 0, 2, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 2, 0, 0, 0, 2, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 2, 0, 0, 0, 2, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 0, 2, 0, 0, 2, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 0, 2, 0, 0, 2, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 0, 2, 0, 0, 2, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 0, 0, 2, 0, 2, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 0, 0, 2, 0, 2, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 0, 0, 2, 0, 2, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 0, 0, 0, 2, 2, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 0, 0, 0, 2, 2, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 0, 0, 0, 2, 3, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, 1, -1, 3, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, 1, 1, -1, 3, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, 1, 1, -1, 3, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 3, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, 1, -1, 1, 3, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, 1, -1, 1, 3, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 3, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, -1, 1, 1, 3, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, -1, 1, 1, 3, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 3, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, -1, 1, 1, 1, 3, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, -1, 1, 1, 1, 3, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 4, 1, 1, 1, 1, 3, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 4, 1, 1, 1, 1, 3, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 4, 1, 1, 1, 1, 3, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 4, 1, 1, 1, 1, 3, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 4, 1, 1, 1, 1, 3, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 4, 1, 1, 1, 1, 3, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, 1, 1, 1, -1, 3, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, 1, 1, 1, -1, 3, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 2, 1, 1, 1, -1, 3, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, 1, 1, -1, 1, 3, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, 1, 1, -1, 1, 3, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, 1, 1, -1, 1, 3, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, 1, -1, 1, 1, 3, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, 1, -1, 1, 1, 3, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, 1, -1, 1, 1, 3, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 2, -1, 1, 1, 1, 3, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, -1, 1, 1, 1, 3, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, -1, 1, 1, 1 };
|
||||
var lookupPairs4D = new int[] { 0, 3, 1, 2, 2, 3, 5, 2, 6, 1, 7, 1, 8, 3, 9, 2, 10, 3, 13, 2, 16, 3, 18, 3, 22, 1, 23, 1, 24, 3, 26, 3, 33, 2, 37, 2, 38, 1, 39, 1, 41, 2, 45, 2, 54, 1, 55, 1, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 256, 3, 258, 3, 264, 3, 266, 3, 272, 3, 274, 3, 280, 3, 282, 3, 2049, 2, 2053, 2, 2057, 2, 2061, 2, 2081, 2, 2085, 2, 2089, 2, 2093, 2, 2304, 9, 2305, 9, 2312, 9, 2313, 9, 16390, 1, 16391, 1, 16406, 1, 16407, 1, 16422, 1, 16423, 1, 16438, 1, 16439, 1, 16642, 8, 16646, 8, 16658, 8, 16662, 8, 18437, 6, 18439, 6, 18469, 6, 18471, 6, 18688, 9, 18689, 9, 18690, 8, 18693, 6, 18694, 8, 18695, 6, 18696, 9, 18697, 9, 18706, 8, 18710, 8, 18725, 6, 18727, 6, 131128, 0, 131129, 0, 131130, 0, 131131, 0, 131132, 0, 131133, 0, 131134, 0, 131135, 0, 131352, 7, 131354, 7, 131384, 7, 131386, 7, 133161, 5, 133165, 5, 133177, 5, 133181, 5, 133376, 9, 133377, 9, 133384, 9, 133385, 9, 133400, 7, 133402, 7, 133417, 5, 133421, 5, 133432, 7, 133433, 5, 133434, 7, 133437, 5, 147510, 4, 147511, 4, 147518, 4, 147519, 4, 147714, 8, 147718, 8, 147730, 8, 147734, 8, 147736, 7, 147738, 7, 147766, 4, 147767, 4, 147768, 7, 147770, 7, 147774, 4, 147775, 4, 149509, 6, 149511, 6, 149541, 6, 149543, 6, 149545, 5, 149549, 5, 149558, 4, 149559, 4, 149561, 5, 149565, 5, 149566, 4, 149567, 4, 149760, 9, 149761, 9, 149762, 8, 149765, 6, 149766, 8, 149767, 6, 149768, 9, 149769, 9, 149778, 8, 149782, 8, 149784, 7, 149786, 7, 149797, 6, 149799, 6, 149801, 5, 149805, 5, 149814, 4, 149815, 4, 149816, 7, 149817, 5, 149818, 7, 149821, 5, 149822, 4, 149823, 4, 149824, 37, 149825, 37, 149826, 36, 149829, 34, 149830, 36, 149831, 34, 149832, 37, 149833, 37, 149842, 36, 149846, 36, 149848, 35, 149850, 35, 149861, 34, 149863, 34, 149865, 33, 149869, 33, 149878, 32, 149879, 32, 149880, 35, 149881, 33, 149882, 35, 149885, 33, 149886, 32, 149887, 32, 150080, 49, 150082, 48, 150088, 49, 150098, 48, 150104, 47, 150106, 47, 151873, 46, 151877, 45, 151881, 46, 151909, 45, 151913, 44, 151917, 44, 152128, 49, 152129, 46, 152136, 49, 152137, 46, 166214, 43, 166215, 42, 166230, 43, 166247, 42, 166262, 41, 166263, 41, 166466, 48, 166470, 43, 166482, 48, 166486, 43, 168261, 45, 168263, 42, 168293, 45, 168295, 42, 168512, 31, 168513, 28, 168514, 31, 168517, 28, 168518, 25, 168519, 25, 280952, 40, 280953, 39, 280954, 40, 280957, 39, 280958, 38, 280959, 38, 281176, 47, 281178, 47, 281208, 40, 281210, 40, 282985, 44, 282989, 44, 283001, 39, 283005, 39, 283208, 30, 283209, 27, 283224, 30, 283241, 27, 283256, 22, 283257, 22, 297334, 41, 297335, 41, 297342, 38, 297343, 38, 297554, 29, 297558, 24, 297562, 29, 297590, 24, 297594, 21, 297598, 21, 299365, 26, 299367, 23, 299373, 26, 299383, 23, 299389, 20, 299391, 20, 299584, 31, 299585, 28, 299586, 31, 299589, 28, 299590, 25, 299591, 25, 299592, 30, 299593, 27, 299602, 29, 299606, 24, 299608, 30, 299610, 29, 299621, 26, 299623, 23, 299625, 27, 299629, 26, 299638, 24, 299639, 23, 299640, 22, 299641, 22, 299642, 21, 299645, 20, 299646, 21, 299647, 20, 299648, 61, 299649, 60, 299650, 61, 299653, 60, 299654, 59, 299655, 59, 299656, 58, 299657, 57, 299666, 55, 299670, 54, 299672, 58, 299674, 55, 299685, 52, 299687, 51, 299689, 57, 299693, 52, 299702, 54, 299703, 51, 299704, 56, 299705, 56, 299706, 53, 299709, 50, 299710, 53, 299711, 50, 299904, 61, 299906, 61, 299912, 58, 299922, 55, 299928, 58, 299930, 55, 301697, 60, 301701, 60, 301705, 57, 301733, 52, 301737, 57, 301741, 52, 301952, 79, 301953, 79, 301960, 76, 301961, 76, 316038, 59, 316039, 59, 316054, 54, 316071, 51, 316086, 54, 316087, 51, 316290, 78, 316294, 78, 316306, 73, 316310, 73, 318085, 77, 318087, 77, 318117, 70, 318119, 70, 318336, 79, 318337, 79, 318338, 78, 318341, 77, 318342, 78, 318343, 77, 430776, 56, 430777, 56, 430778, 53, 430781, 50, 430782, 53, 430783, 50, 431000, 75, 431002, 72, 431032, 75, 431034, 72, 432809, 74, 432813, 69, 432825, 74, 432829, 69, 433032, 76, 433033, 76, 433048, 75, 433065, 74, 433080, 75, 433081, 74, 447158, 71, 447159, 68, 447166, 71, 447167, 68, 447378, 73, 447382, 73, 447386, 72, 447414, 71, 447418, 72, 447422, 71, 449189, 70, 449191, 70, 449197, 69, 449207, 68, 449213, 69, 449215, 68, 449408, 67, 449409, 67, 449410, 66, 449413, 64, 449414, 66, 449415, 64, 449416, 67, 449417, 67, 449426, 66, 449430, 66, 449432, 65, 449434, 65, 449445, 64, 449447, 64, 449449, 63, 449453, 63, 449462, 62, 449463, 62, 449464, 65, 449465, 63, 449466, 65, 449469, 63, 449470, 62, 449471, 62, 449472, 19, 449473, 19, 449474, 18, 449477, 16, 449478, 18, 449479, 16, 449480, 19, 449481, 19, 449490, 18, 449494, 18, 449496, 17, 449498, 17, 449509, 16, 449511, 16, 449513, 15, 449517, 15, 449526, 14, 449527, 14, 449528, 17, 449529, 15, 449530, 17, 449533, 15, 449534, 14, 449535, 14, 449728, 19, 449729, 19, 449730, 18, 449734, 18, 449736, 19, 449737, 19, 449746, 18, 449750, 18, 449752, 17, 449754, 17, 449784, 17, 449786, 17, 451520, 19, 451521, 19, 451525, 16, 451527, 16, 451528, 19, 451529, 19, 451557, 16, 451559, 16,Line truncated
|
||||
var contributions4D = new Contribution4[p4D.Length / 16];
|
||||
for (int i = 0; i < p4D.Length; i += 16)
|
||||
{
|
||||
var baseSet = base4D[p4D[i]];
|
||||
Contribution4 previous = null, current = null;
|
||||
for (int k = 0; k < baseSet.Length; k += 5)
|
||||
{
|
||||
current = new Contribution4(baseSet[k], baseSet[k + 1], baseSet[k + 2], baseSet[k + 3], baseSet[k + 4]);
|
||||
if (previous == null)
|
||||
{
|
||||
contributions4D[i / 16] = current;
|
||||
}
|
||||
else
|
||||
{
|
||||
previous.Next = current;
|
||||
}
|
||||
previous = current;
|
||||
}
|
||||
current.Next = new Contribution4(p4D[i + 1], p4D[i + 2], p4D[i + 3], p4D[i + 4], p4D[i + 5]);
|
||||
current.Next.Next = new Contribution4(p4D[i + 6], p4D[i + 7], p4D[i + 8], p4D[i + 9], p4D[i + 10]);
|
||||
current.Next.Next.Next = new Contribution4(p4D[i + 11], p4D[i + 12], p4D[i + 13], p4D[i + 14], p4D[i + 15]);
|
||||
}
|
||||
|
||||
lookup4D = new Contribution4[1048576];
|
||||
for (var i = 0; i < lookupPairs4D.Length; i += 2)
|
||||
{
|
||||
lookup4D[lookupPairs4D[i]] = contributions4D[lookupPairs4D[i + 1]];
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
private static int FastFloor(double x)
|
||||
{
|
||||
var xi = (int)x;
|
||||
return x < xi ? xi - 1 : xi;
|
||||
}
|
||||
|
||||
public OpenSimplexNoise()
|
||||
: this(DateTime.Now.Ticks)
|
||||
{
|
||||
}
|
||||
|
||||
public OpenSimplexNoise(long seed)
|
||||
{
|
||||
perm = new byte[256];
|
||||
perm2D = new byte[256];
|
||||
perm3D = new byte[256];
|
||||
perm4D = new byte[256];
|
||||
var source = new byte[256];
|
||||
for (int i = 0; i < 256; i++)
|
||||
{
|
||||
source[i] = (byte)i;
|
||||
}
|
||||
seed = seed * 6364136223846793005L + 1442695040888963407L;
|
||||
seed = seed * 6364136223846793005L + 1442695040888963407L;
|
||||
seed = seed * 6364136223846793005L + 1442695040888963407L;
|
||||
for (int i = 255; i >= 0; i--)
|
||||
{
|
||||
seed = seed * 6364136223846793005L + 1442695040888963407L;
|
||||
int r = (int)((seed + 31) % (i + 1));
|
||||
if (r < 0)
|
||||
{
|
||||
r += (i + 1);
|
||||
}
|
||||
perm[i] = source[r];
|
||||
perm2D[i] = (byte)(perm[i] & 0x0E);
|
||||
perm3D[i] = (byte)((perm[i] % 24) * 3);
|
||||
perm4D[i] = (byte)(perm[i] & 0xFC);
|
||||
source[r] = source[i];
|
||||
}
|
||||
}
|
||||
|
||||
public double Evaluate(double x, double y)
|
||||
{
|
||||
var stretchOffset = (x + y) * STRETCH_2D;
|
||||
var xs = x + stretchOffset;
|
||||
var ys = y + stretchOffset;
|
||||
|
||||
var xsb = FastFloor(xs);
|
||||
var ysb = FastFloor(ys);
|
||||
|
||||
var squishOffset = (xsb + ysb) * SQUISH_2D;
|
||||
var dx0 = x - (xsb + squishOffset);
|
||||
var dy0 = y - (ysb + squishOffset);
|
||||
|
||||
var xins = xs - xsb;
|
||||
var yins = ys - ysb;
|
||||
|
||||
var inSum = xins + yins;
|
||||
|
||||
var hash =
|
||||
(int)(xins - yins + 1) |
|
||||
(int)(inSum) << 1 |
|
||||
(int)(inSum + yins) << 2 |
|
||||
(int)(inSum + xins) << 4;
|
||||
|
||||
var c = lookup2D[hash];
|
||||
|
||||
var value = 0.0;
|
||||
while (c != null)
|
||||
{
|
||||
var dx = dx0 + c.dx;
|
||||
var dy = dy0 + c.dy;
|
||||
var attn = 2 - dx * dx - dy * dy;
|
||||
if (attn > 0)
|
||||
{
|
||||
var px = xsb + c.xsb;
|
||||
var py = ysb + c.ysb;
|
||||
|
||||
var i = perm2D[(perm[px & 0xFF] + py) & 0xFF];
|
||||
var valuePart = gradients2D[i] * dx + gradients2D[i + 1] * dy;
|
||||
|
||||
attn *= attn;
|
||||
value += attn * attn * valuePart;
|
||||
}
|
||||
c = c.Next;
|
||||
}
|
||||
return value * NORM_2D;
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public double Evaluate(double x, double y, double z)
|
||||
{
|
||||
var stretchOffset = (x + y + z) * STRETCH_3D;
|
||||
var xs = x + stretchOffset;
|
||||
var ys = y + stretchOffset;
|
||||
var zs = z + stretchOffset;
|
||||
|
||||
var xsb = FastFloor(xs);
|
||||
var ysb = FastFloor(ys);
|
||||
var zsb = FastFloor(zs);
|
||||
|
||||
var squishOffset = (xsb + ysb + zsb) * SQUISH_3D;
|
||||
var dx0 = x - (xsb + squishOffset);
|
||||
var dy0 = y - (ysb + squishOffset);
|
||||
var dz0 = z - (zsb + squishOffset);
|
||||
|
||||
var xins = xs - xsb;
|
||||
var yins = ys - ysb;
|
||||
var zins = zs - zsb;
|
||||
|
||||
var inSum = xins + yins + zins;
|
||||
|
||||
var hash =
|
||||
(int)(yins - zins + 1) |
|
||||
(int)(xins - yins + 1) << 1 |
|
||||
(int)(xins - zins + 1) << 2 |
|
||||
(int)inSum << 3 |
|
||||
(int)(inSum + zins) << 5 |
|
||||
(int)(inSum + yins) << 7 |
|
||||
(int)(inSum + xins) << 9;
|
||||
|
||||
var c = lookup3D[hash];
|
||||
|
||||
var value = 0.0;
|
||||
while (c != null)
|
||||
{
|
||||
var dx = dx0 + c.dx;
|
||||
var dy = dy0 + c.dy;
|
||||
var dz = dz0 + c.dz;
|
||||
var attn = 2 - dx * dx - dy * dy - dz * dz;
|
||||
if (attn > 0)
|
||||
{
|
||||
var px = xsb + c.xsb;
|
||||
var py = ysb + c.ysb;
|
||||
var pz = zsb + c.zsb;
|
||||
|
||||
var i = perm3D[(perm[(perm[px & 0xFF] + py) & 0xFF] + pz) & 0xFF];
|
||||
var valuePart = gradients3D[i] * dx + gradients3D[i + 1] * dy + gradients3D[i + 2] * dz;
|
||||
|
||||
attn *= attn;
|
||||
value += attn * attn * valuePart;
|
||||
}
|
||||
|
||||
c = c.Next;
|
||||
}
|
||||
return value * NORM_3D;
|
||||
}
|
||||
|
||||
public double Evaluate(double x, double y, double z, double w)
|
||||
{
|
||||
var stretchOffset = (x + y + z + w) * STRETCH_4D;
|
||||
var xs = x + stretchOffset;
|
||||
var ys = y + stretchOffset;
|
||||
var zs = z + stretchOffset;
|
||||
var ws = w + stretchOffset;
|
||||
|
||||
var xsb = FastFloor(xs);
|
||||
var ysb = FastFloor(ys);
|
||||
var zsb = FastFloor(zs);
|
||||
var wsb = FastFloor(ws);
|
||||
|
||||
var squishOffset = (xsb + ysb + zsb + wsb) * SQUISH_4D;
|
||||
var dx0 = x - (xsb + squishOffset);
|
||||
var dy0 = y - (ysb + squishOffset);
|
||||
var dz0 = z - (zsb + squishOffset);
|
||||
var dw0 = w - (wsb + squishOffset);
|
||||
|
||||
var xins = xs - xsb;
|
||||
var yins = ys - ysb;
|
||||
var zins = zs - zsb;
|
||||
var wins = ws - wsb;
|
||||
|
||||
var inSum = xins + yins + zins + wins;
|
||||
|
||||
var hash =
|
||||
(int)(zins - wins + 1) |
|
||||
(int)(yins - zins + 1) << 1 |
|
||||
(int)(yins - wins + 1) << 2 |
|
||||
(int)(xins - yins + 1) << 3 |
|
||||
(int)(xins - zins + 1) << 4 |
|
||||
(int)(xins - wins + 1) << 5 |
|
||||
(int)inSum << 6 |
|
||||
(int)(inSum + wins) << 8 |
|
||||
(int)(inSum + zins) << 11 |
|
||||
(int)(inSum + yins) << 14 |
|
||||
(int)(inSum + xins) << 17;
|
||||
|
||||
var c = lookup4D[hash];
|
||||
|
||||
var value = 0.0;
|
||||
while (c != null)
|
||||
{
|
||||
var dx = dx0 + c.dx;
|
||||
var dy = dy0 + c.dy;
|
||||
var dz = dz0 + c.dz;
|
||||
var dw = dw0 + c.dw;
|
||||
var attn = 2 - dx * dx - dy * dy - dz * dz - dw * dw;
|
||||
if (attn > 0)
|
||||
{
|
||||
var px = xsb + c.xsb;
|
||||
var py = ysb + c.ysb;
|
||||
var pz = zsb + c.zsb;
|
||||
var pw = wsb + c.wsb;
|
||||
|
||||
var i = perm4D[(perm[(perm[(perm[px & 0xFF] + py) & 0xFF] + pz) & 0xFF] + pw) & 0xFF];
|
||||
var valuePart = gradients4D[i] * dx + gradients4D[i + 1] * dy + gradients4D[i + 2] * dz + gradients4D[i + 3] * dw;
|
||||
|
||||
attn *= attn;
|
||||
value += attn * attn * valuePart;
|
||||
}
|
||||
|
||||
c = c.Next;
|
||||
}
|
||||
return value * NORM_4D;
|
||||
}
|
||||
|
||||
private class Contribution2
|
||||
{
|
||||
public double dx, dy;
|
||||
public int xsb, ysb;
|
||||
public Contribution2 Next;
|
||||
|
||||
public Contribution2(double multiplier, int xsb, int ysb)
|
||||
{
|
||||
dx = -xsb - multiplier * SQUISH_2D;
|
||||
dy = -ysb - multiplier * SQUISH_2D;
|
||||
this.xsb = xsb;
|
||||
this.ysb = ysb;
|
||||
}
|
||||
}
|
||||
|
||||
private class Contribution3
|
||||
{
|
||||
public double dx, dy, dz;
|
||||
public int xsb, ysb, zsb;
|
||||
public Contribution3 Next;
|
||||
|
||||
public Contribution3(double multiplier, int xsb, int ysb, int zsb)
|
||||
{
|
||||
dx = -xsb - multiplier * SQUISH_3D;
|
||||
dy = -ysb - multiplier * SQUISH_3D;
|
||||
dz = -zsb - multiplier * SQUISH_3D;
|
||||
this.xsb = xsb;
|
||||
this.ysb = ysb;
|
||||
this.zsb = zsb;
|
||||
}
|
||||
}
|
||||
|
||||
private class Contribution4
|
||||
{
|
||||
public double dx, dy, dz, dw;
|
||||
public int xsb, ysb, zsb, wsb;
|
||||
public Contribution4 Next;
|
||||
|
||||
public Contribution4(double multiplier, int xsb, int ysb, int zsb, int wsb)
|
||||
{
|
||||
dx = -xsb - multiplier * SQUISH_4D;
|
||||
dy = -ysb - multiplier * SQUISH_4D;
|
||||
dz = -zsb - multiplier * SQUISH_4D;
|
||||
dw = -wsb - multiplier * SQUISH_4D;
|
||||
this.xsb = xsb;
|
||||
this.ysb = ysb;
|
||||
this.zsb = zsb;
|
||||
this.wsb = wsb;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Reflection.Metadata" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.4.4.0" newVersion="1.4.4.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.2.4.0" newVersion="1.2.4.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Ninject" publicKeyToken="c7192dc5380945e7" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.3.4.0" newVersion="3.3.4.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.4.0" newVersion="4.1.4.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.5.0" newVersion="4.0.5.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="SkiaSharp" version="1.68.1" targetFramework="net472" />
|
||||
<package id="Stylet" version="1.3.0" targetFramework="net472" />
|
||||
<package id="System.Buffers" version="4.5.0" targetFramework="net472" />
|
||||
<package id="System.Memory" version="4.5.3" targetFramework="net472" />
|
||||
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
|
||||
<package id="System.Runtime.CompilerServices.Unsafe" version="4.6.0" targetFramework="net472" />
|
||||
</packages>
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"Guid": "61cbbf01-8d69-4ede-a972-f3f269da66d9",
|
||||
"Name": "Noise layer brush",
|
||||
"Version": {
|
||||
"Major": 1,
|
||||
"Minor": 0,
|
||||
"Build": 0
|
||||
},
|
||||
"Main": "Artemis.Plugins.LayerBrushes.Noise.dll"
|
||||
}
|
||||
Reference in new issue
Block a user