Skip to content

Commit

Permalink
fix Glitch and SolidFill layer not updating
Browse files Browse the repository at this point in the history
  • Loading branch information
Aytackydln committed Jun 11, 2024
1 parent 8648264 commit ab7b22c
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 88 deletions.
21 changes: 11 additions & 10 deletions Project-Aurora/Project-Aurora/EffectsEngine/EffectLayer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ internal TextureBrush TextureBrush
}

[Obsolete("This creates too much garbage memory")]
public EffectLayer(string name) : this(name, Color.FromArgb(0, 1, 1, 1))
public EffectLayer(string name) : this(name, Color.Transparent)
{
}

Expand All @@ -81,7 +81,6 @@ public EffectLayer(string name, Color color)
Dimension = new Rectangle(0, 0, Effects.Canvas.Width, Effects.Canvas.Height);

FillOver(color);
_graphics = Graphics.FromImage(_colormap);
}

public EffectLayer(string name, bool persistent) : this(name)
Expand Down Expand Up @@ -424,7 +423,6 @@ public void Set(KeySequence sequence, Brush brush)
_lastColor = solidBrush.Color;
}

var g = _graphics;
var xPos = (float)Math.Round((sequence.Freeform.X + Effects.Canvas.GridBaselineX) * Effects.Canvas.EditorToCanvasWidth);
var yPos = (float)Math.Round((sequence.Freeform.Y + Effects.Canvas.GridBaselineY) * Effects.Canvas.EditorToCanvasHeight);
var width = (float)Math.Round(sequence.Freeform.Width * Effects.Canvas.EditorToCanvasWidth);
Expand All @@ -439,9 +437,11 @@ public void Set(KeySequence sequence, Brush brush)
var myMatrix = new Matrix();
myMatrix.RotateAt(sequence.Freeform.Angle, rotatePoint, MatrixOrder.Append); //TODO dependant property? parameter?

g.Transform = myMatrix;
g.CompositingMode = CompositingMode.SourceCopy;
g.FillRectangle(brush, rect);
_graphics.ResetClip();
_graphics.ResetTransform();
_graphics.Transform = myMatrix;
_graphics.CompositingMode = CompositingMode.SourceCopy;
_graphics.FillRectangle(brush, rect);
Invalidate();
}
}
Expand Down Expand Up @@ -619,9 +619,10 @@ private void SetOneKey(DeviceKeys key, Brush brush)

try
{
var g = _graphics;
g.CompositingMode = CompositingMode.SourceCopy;
g.FillRectangle(brush, keyRectangle.Rectangle);
_graphics.ResetClip();
_graphics.ResetTransform();
_graphics.CompositingMode = CompositingMode.SourceCopy;
_graphics.FillRectangle(brush, keyRectangle.Rectangle);
}catch { /* ignore */}
}

Expand Down Expand Up @@ -981,7 +982,7 @@ private void InvalidateColorMap(object? sender, EventArgs args)
{
var oldBitmap = _colormap;
_colormap = new Bitmap(Effects.Canvas.Width, Effects.Canvas.Height);
oldBitmap?.Dispose();
oldBitmap.Dispose();
var oldGraphs = _graphics;
_graphics = Graphics.FromImage(_colormap);
oldGraphs.Dispose();
Expand Down
152 changes: 74 additions & 78 deletions Project-Aurora/Project-Aurora/Settings/Layers/GlitchLayerHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,111 +13,107 @@
using Common.Utils;
using Newtonsoft.Json;

namespace AuroraRgb.Settings.Layers
{

public class GlitchLayerHandlerProperties<TProperty> : LayerHandlerProperties2Color<TProperty> where TProperty : GlitchLayerHandlerProperties<TProperty>
{
[JsonIgnore] private double? _updateInterval;
namespace AuroraRgb.Settings.Layers;

[JsonProperty("_UpdateInterval")]
public double UpdateInterval
{
get => Logic?._updateInterval ?? _updateInterval ?? 1.0;
set
{
_updateInterval = value;
OnPropertiesChanged(this);
}
}

[JsonIgnore]
private bool? _allowTransparency;
public class GlitchLayerHandlerProperties<TProperty> : LayerHandlerProperties2Color<TProperty> where TProperty : GlitchLayerHandlerProperties<TProperty>
{
private double? _updateInterval;

[JsonProperty("_AllowTransparency")]
public bool AllowTransparency
[JsonProperty("_UpdateInterval")]
public double UpdateInterval
{
get => Logic?._updateInterval ?? _updateInterval ?? 1.0;
set
{
get => Logic?._allowTransparency ?? _allowTransparency ?? false;
set
{
_allowTransparency = value;
OnPropertiesChanged(this);
}
_updateInterval = value;
OnPropertiesChanged(this);
}
}

public GlitchLayerHandlerProperties()
{ }

public GlitchLayerHandlerProperties(bool assign_default = false) : base(assign_default) { }
private bool? _allowTransparency;

public override void Default()
[JsonProperty("_AllowTransparency")]
public bool AllowTransparency
{
get => Logic?._allowTransparency ?? _allowTransparency ?? false;
set
{
base.Default();
_updateInterval = 1.0;
_allowTransparency = false;
_Sequence = new KeySequence(Effects.Canvas.WholeFreeForm);
_allowTransparency = value;
OnPropertiesChanged(this);
}
}

public class GlitchLayerHandlerProperties : GlitchLayerHandlerProperties<GlitchLayerHandlerProperties>
{
public GlitchLayerHandlerProperties()
{ }
public GlitchLayerHandlerProperties()
{ }

public GlitchLayerHandlerProperties(bool empty = false) : base(empty) { }
}
public GlitchLayerHandlerProperties(bool assignDefault = false) : base(assignDefault) { }

public class GlitchLayerHandler<TProperty> : LayerHandler<TProperty> where TProperty : GlitchLayerHandlerProperties<TProperty>
public override void Default()
{
private readonly Random _randomizer = new();
base.Default();
_updateInterval = 1.0;
_allowTransparency = false;
_Sequence = new KeySequence(Effects.Canvas.WholeFreeForm);
}
}

private readonly Dictionary<DeviceKeys, Color> _glitchColors = new();
public class GlitchLayerHandlerProperties : GlitchLayerHandlerProperties<GlitchLayerHandlerProperties>
{
public GlitchLayerHandlerProperties()
{ }

private long _previousTime;
private long _currentTime;
public GlitchLayerHandlerProperties(bool empty = false) : base(empty) { }
}

public GlitchLayerHandler() : base("Glitch Layer")
{
}
public class GlitchLayerHandler<TProperty>() : LayerHandler<TProperty>("Glitch Layer")
where TProperty : GlitchLayerHandlerProperties<TProperty>
{
private readonly Random _randomizer = new();

public override EffectLayer Render(IGameState state)
{
_currentTime = Time.GetMillisecondsSinceEpoch();
if (!(_previousTime + Properties.UpdateInterval * 1000L <= _currentTime)) return EffectLayer;
_previousTime = _currentTime;
private readonly Dictionary<DeviceKeys, Color> _glitchColors = new();

var keys = Properties.Sequence.Type == KeySequenceType.FreeForm ? Enum.GetValues(typeof(DeviceKeys)) : Properties.Sequence.Keys.ToArray();
foreach (DeviceKeys key in keys)
{
var clr = Properties.AllowTransparency ? _randomizer.Next() % 2 == 0 ? Color.Transparent : CommonColorUtils.GenerateRandomColor() : CommonColorUtils.GenerateRandomColor();
private long _previousTime;

_glitchColors[key] = clr;
}
public override EffectLayer Render(IGameState state)
{
var currentTime = Time.GetMillisecondsSinceEpoch();
if (_previousTime + Properties.UpdateInterval * 1000L > currentTime) return EffectLayer;
_previousTime = currentTime;

foreach (var kvp in _glitchColors)
{
EffectLayer.Set(kvp.Key, kvp.Value);
}
EffectLayer.OnlyInclude(Properties.Sequence);
return EffectLayer;
var keys = Properties.Sequence.Type == KeySequenceType.FreeForm ? Enum.GetValues(typeof(DeviceKeys)) : Properties.Sequence.Keys.ToArray();
foreach (DeviceKeys key in keys)
{
Color clr;
if (Properties.AllowTransparency)
clr = _randomizer.Next() % 2 == 0 ? Color.Transparent : CommonColorUtils.GenerateRandomColor();
else
clr = CommonColorUtils.GenerateRandomColor();

_glitchColors[key] = clr;
}

protected override void PropertiesChanged(object? sender, PropertyChangedEventArgs args)
foreach (var kvp in _glitchColors)
{
base.PropertiesChanged(sender, args);
_glitchColors.Clear();
EffectLayer.Invalidate();
EffectLayer.Set(kvp.Key, kvp.Value);
}
EffectLayer.OnlyInclude(Properties.Sequence);
return EffectLayer;
}

[LogicOverrideIgnoreProperty("_PrimaryColor")]
[LogicOverrideIgnoreProperty("_SecondaryColor")]
public class GlitchLayerHandler : GlitchLayerHandler<GlitchLayerHandlerProperties>
protected override void PropertiesChanged(object? sender, PropertyChangedEventArgs args)
{
protected override UserControl CreateControl()
{
return new Control_GlitchLayer(this);
}
base.PropertiesChanged(sender, args);
_glitchColors.Clear();
EffectLayer.Invalidate();
}
}

[LogicOverrideIgnoreProperty("_PrimaryColor")]
[LogicOverrideIgnoreProperty("_SecondaryColor")]
public class GlitchLayerHandler : GlitchLayerHandler<GlitchLayerHandlerProperties>
{
protected override UserControl CreateControl()
{
return new Control_GlitchLayer(this);
}
}

0 comments on commit ab7b22c

Please sign in to comment.