From 9ca9d4d5977a0c6dbd2c3f3fa0dcdbe8bc4e9524 Mon Sep 17 00:00:00 2001 From: MikiraSora Date: Sat, 26 Oct 2024 06:28:39 +0800 Subject: [PATCH] expose editor texture resources --- .../Editors/DrawPlayerLocationHelper.cs | 2 +- ...oPlayFaderLaneEditorObjectDrawingTarget.cs | 30 +- .../Lane/BeamEditorObjectDrawingTarget.cs | 28 +- .../NormalLaneEditorObjectDrawingTarget.cs | 30 +- .../TextureLaneEditorObjectDrawingTarget.cs | 36 +- .../Lane/WallLaneEditorObjectDrawingTarget.cs | 30 +- .../LaneCurvePathControlDrawingTarget.cs | 2 +- .../SVG/SvgObjectDrawingTarget.cs | 2 +- .../Beam/BeamLazerDrawingTarget.cs | 225 ++++++------ .../BulletBell/BellDrawingTarget.cs | 5 +- .../BulletBell/BulletDrawingTarget.cs | 23 +- .../OngekiObjects/FlickDrawingTarget.cs | 4 +- .../OngekiObjects/TapDrawingTarget.cs | 321 +++++++++--------- .../Views/OngekiObjects/BellView.xaml | 41 --- .../Views/OngekiObjects/BellView.xaml.cs | 15 - .../Views/OngekiObjects/BulletView.xaml | 147 -------- .../Views/OngekiObjects/BulletView.xaml.cs | 15 - .../Views/OngekiObjects/FlickView.xaml | 21 -- .../Views/OngekiObjects/FlickView.xaml.cs | 15 - .../Views/OngekiObjects/Line.cs | 88 ----- .../Views/OngekiObjects/TapView.xaml | 59 ---- .../Views/OngekiObjects/TapView.xaml.cs | 15 - .../Views/OngekiObjects/WallTapView.xaml | 72 ---- .../Views/OngekiObjects/WallTapView.xaml.cs | 15 - .../OngekiObjects/danger_normal_bullet.svg | 10 - .../OngekiObjects/hard_normal_bullet.svg | 10 - .../OngekiObjects/normal_normal_bullet.svg | 10 - .../Views/OngekiObjects/nt_linehold_pur.png | Bin 2444 -> 0 bytes OngekiFumenEditor/OngekiFumenEditor.csproj | 199 ++++++----- .../OngekiObjects => Resources/editor}/BE.png | Bin .../OngekiObjects => Resources/editor}/BN.png | Bin .../OngekiObjects => Resources/editor}/BS.png | Bin .../editor/beamBody.png} | Bin .../editor/beamWarn.png} | Bin .../editor}/bell.png | Bin .../editor/blueTap.png} | Bin .../editor/bulletCircleDanger.png} | Bin .../editor/bulletCircleHard.png} | Bin .../editor/bulletCircleNormal.png} | Bin .../editor/bulletNeedleDanger.png} | Bin .../editor/bulletNeedleHard.png} | Bin .../editor/bulletNeedleNormal.png} | Bin .../editor/bulletSquareDanger.png} | Bin .../editor/bulletSquareHard.png} | Bin .../editor/bulletSquareNormal.png} | Bin .../editor/commonCircle.png} | Bin .../editor/exTapEffect.png} | Bin .../editor/exflickEffect.png} | Bin .../editor}/flick.png | Bin .../editor/greenTap.png} | Bin .../NE.png => Resources/editor/laneEnd.png} | Bin .../NN.png => Resources/editor/laneNext.png} | Bin .../NS.png => Resources/editor/laneStart.png} | Bin .../editor}/playerLoc.png | Bin .../editor/redTap.png} | Bin .../editor}/sqrt_bullet.png | Bin .../editor}/tapCritical.png | Bin .../editor}/tri_bullet.png | Bin .../editor/unsetTap.png} | Bin .../WE.png => Resources/editor/wallEnd.png} | Bin .../WN.png => Resources/editor/wallNext.png} | Bin .../WS.png => Resources/editor/wallStart.png} | Bin .../editor/wallTap.png} | Bin .../editor/wallTapEffect.png} | Bin OngekiFumenEditor/Utils/ResourceUtils.cs | 90 ++++- 65 files changed, 539 insertions(+), 1021 deletions(-) delete mode 100644 OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BellView.xaml delete mode 100644 OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BellView.xaml.cs delete mode 100644 OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BulletView.xaml delete mode 100644 OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BulletView.xaml.cs delete mode 100644 OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/FlickView.xaml delete mode 100644 OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/FlickView.xaml.cs delete mode 100644 OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/Line.cs delete mode 100644 OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/TapView.xaml delete mode 100644 OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/TapView.xaml.cs delete mode 100644 OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/WallTapView.xaml delete mode 100644 OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/WallTapView.xaml.cs delete mode 100644 OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/danger_normal_bullet.svg delete mode 100644 OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/hard_normal_bullet.svg delete mode 100644 OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/normal_normal_bullet.svg delete mode 100644 OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/nt_linehold_pur.png rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects => Resources/editor}/BE.png (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects => Resources/editor}/BN.png (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects => Resources/editor}/BS.png (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/beam_body.png => Resources/editor/beamBody.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/beam_warn.png => Resources/editor/beamWarn.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects => Resources/editor}/bell.png (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/mu3_nt_hold_02.png => Resources/editor/blueTap.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/nt_mine_blk.png => Resources/editor/bulletCircleDanger.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/nt_mine_pur.png => Resources/editor/bulletCircleHard.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/nt_mine_red.png => Resources/editor/bulletCircleNormal.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/tri_bullet2.png => Resources/editor/bulletNeedleDanger.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/tri_bullet1.png => Resources/editor/bulletNeedleHard.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/tri_bullet0.png => Resources/editor/bulletNeedleNormal.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/sqrt_bullet2.png => Resources/editor/bulletSquareDanger.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/sqrt_bullet1.png => Resources/editor/bulletSquareHard.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/sqrt_bullet0.png => Resources/editor/bulletSquareNormal.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/CC.png => Resources/editor/commonCircle.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/tap_exEff.png => Resources/editor/exTapEffect.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/exflick_Eff.png => Resources/editor/exflickEffect.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects => Resources/editor}/flick.png (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/mu3_nt_extap_02.png => Resources/editor/greenTap.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/NE.png => Resources/editor/laneEnd.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/NN.png => Resources/editor/laneNext.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/NS.png => Resources/editor/laneStart.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects => Resources/editor}/playerLoc.png (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/mu3_nt_tap_02.png => Resources/editor/redTap.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects => Resources/editor}/sqrt_bullet.png (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects => Resources/editor}/tapCritical.png (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects => Resources/editor}/tri_bullet.png (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/mu3_nt_extap_01.png => Resources/editor/unsetTap.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/WE.png => Resources/editor/wallEnd.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/WN.png => Resources/editor/wallNext.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/WS.png => Resources/editor/wallStart.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/walltap.png => Resources/editor/wallTap.png} (100%) rename OngekiFumenEditor/{Modules/FumenVisualEditor/Views/OngekiObjects/walltap_Eff.png => Resources/editor/wallTapEffect.png} (100%) diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/Editors/DrawPlayerLocationHelper.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/Editors/DrawPlayerLocationHelper.cs index c5c78df0..0e1755d0 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/Editors/DrawPlayerLocationHelper.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/Editors/DrawPlayerLocationHelper.cs @@ -23,7 +23,7 @@ public DrawPlayerLocationHelper() textureDrawing = IoC.Get(); arr[0].rotation = 0f; - texture = ResourceUtils.OpenReadTextureFromResource(@"Modules\FumenVisualEditor\Views\OngekiObjects\playerLoc.png"); + texture = ResourceUtils.OpenReadTextureFromFile(@".\Resources\editor\playerLoc.png"); UpdateProps(); Properties.EditorGlobalSetting.Default.PropertyChanged += Default_PropertyChanged; diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/Lane/AutoPlayFaderLaneEditorObjectDrawingTarget.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/Lane/AutoPlayFaderLaneEditorObjectDrawingTarget.cs index aa5ac7b8..b7843ff8 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/Lane/AutoPlayFaderLaneEditorObjectDrawingTarget.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/Lane/AutoPlayFaderLaneEditorObjectDrawingTarget.cs @@ -3,20 +3,20 @@ namespace OngekiFumenEditor.Modules.FumenVisualEditor.Graphics.Drawing.TargetImpl.EditorObjects.Lane { - [Export(typeof(IFumenEditorDrawingTarget))] - internal class AutoPlayFaderLaneEditorObjectDrawingTarget : TextureLaneEditorObjectDrawingTarget - { - public override IEnumerable DrawTargetID { get; } = new[] - { - "[APFS]", - }; + [Export(typeof(IFumenEditorDrawingTarget))] + internal class AutoPlayFaderLaneEditorObjectDrawingTarget : TextureLaneEditorObjectDrawingTarget + { + public override IEnumerable DrawTargetID { get; } = new[] + { + "[APFS]", + }; - public AutoPlayFaderLaneEditorObjectDrawingTarget() : base( - LoadTextrueFromDefaultResource("NS.png"), - LoadTextrueFromDefaultResource("NN.png"), - LoadTextrueFromDefaultResource("NE.png") - ) - { - } - } + public AutoPlayFaderLaneEditorObjectDrawingTarget() : base( + LoadTextrueFromDefaultResource("laneStart.png"), + LoadTextrueFromDefaultResource("laneNext.png"), + LoadTextrueFromDefaultResource("laneEnd.png") + ) + { + } + } } diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/Lane/BeamEditorObjectDrawingTarget.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/Lane/BeamEditorObjectDrawingTarget.cs index 81ebb578..45b899ee 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/Lane/BeamEditorObjectDrawingTarget.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/Lane/BeamEditorObjectDrawingTarget.cs @@ -3,21 +3,21 @@ namespace OngekiFumenEditor.Modules.FumenVisualEditor.Graphics.Drawing.TargetImpl.EditorObjects.Lane { - [Export(typeof(IFumenEditorDrawingTarget))] - internal class BeamEditorObjectDrawingTarget : TextureLaneEditorObjectDrawingTarget - { - public override IEnumerable DrawTargetID { get; } = new[] - { - "BMS","OBS" + [Export(typeof(IFumenEditorDrawingTarget))] + internal class BeamEditorObjectDrawingTarget : TextureLaneEditorObjectDrawingTarget + { + public override IEnumerable DrawTargetID { get; } = new[] + { + "BMS","OBS" }; - public BeamEditorObjectDrawingTarget() : base( - LoadTextrueFromDefaultResource("NS.png"), - LoadTextrueFromDefaultResource("NN.png"), - LoadTextrueFromDefaultResource("NE.png") - ) - { + public BeamEditorObjectDrawingTarget() : base( + LoadTextrueFromDefaultResource("laneStart.png"), + LoadTextrueFromDefaultResource("laneNext.png"), + LoadTextrueFromDefaultResource("laneEnd.png") + ) + { - } - } + } + } } diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/Lane/NormalLaneEditorObjectDrawingTarget.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/Lane/NormalLaneEditorObjectDrawingTarget.cs index b174d469..1622e94b 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/Lane/NormalLaneEditorObjectDrawingTarget.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/Lane/NormalLaneEditorObjectDrawingTarget.cs @@ -3,20 +3,20 @@ namespace OngekiFumenEditor.Modules.FumenVisualEditor.Graphics.Drawing.TargetImpl.EditorObjects.Lane { - [Export(typeof(IFumenEditorDrawingTarget))] - internal class NormalLaneEditorObjectDrawingTarget : TextureLaneEditorObjectDrawingTarget - { - public override IEnumerable DrawTargetID { get; } = new[] - { - "LLS","LCS","LRS","CLS","ENS" - }; + [Export(typeof(IFumenEditorDrawingTarget))] + internal class NormalLaneEditorObjectDrawingTarget : TextureLaneEditorObjectDrawingTarget + { + public override IEnumerable DrawTargetID { get; } = new[] + { + "LLS","LCS","LRS","CLS","ENS" + }; - public NormalLaneEditorObjectDrawingTarget() : base( - LoadTextrueFromDefaultResource("NS.png"), - LoadTextrueFromDefaultResource("NN.png"), - LoadTextrueFromDefaultResource("NE.png") - ) - { - } - } + public NormalLaneEditorObjectDrawingTarget() : base( + LoadTextrueFromDefaultResource("laneStart.png"), + LoadTextrueFromDefaultResource("laneNext.png"), + LoadTextrueFromDefaultResource("laneEnd.png") + ) + { + } + } } diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/Lane/TextureLaneEditorObjectDrawingTarget.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/Lane/TextureLaneEditorObjectDrawingTarget.cs index 9e21867d..3444ba7c 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/Lane/TextureLaneEditorObjectDrawingTarget.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/Lane/TextureLaneEditorObjectDrawingTarget.cs @@ -1,27 +1,27 @@ using OngekiFumenEditor.Kernel.Graphics.Base; +using OngekiFumenEditor.Utils; using System; using System.Drawing; namespace OngekiFumenEditor.Modules.FumenVisualEditor.Graphics.Drawing.TargetImpl.EditorObjects.Lane { - public abstract class TextureLaneEditorObjectDrawingTarget : CommonLaneEditorObjectDrawingTarget - { - public static Texture LoadTextrueFromDefaultResource(string rPath) - { - var info = System.Windows.Application.GetResourceStream(new Uri(@"Modules\FumenVisualEditor\Views\OngekiObjects\" + rPath, UriKind.Relative)); - using var bitmap = Image.FromStream(info.Stream) as Bitmap; - return new Texture(bitmap); - } + public abstract class TextureLaneEditorObjectDrawingTarget : CommonLaneEditorObjectDrawingTarget + { + public static Texture LoadTextrueFromDefaultResource(string rPath) + { + var texture = ResourceUtils.OpenReadTextureFromFile(@".\Resources\editor\" + rPath); + return texture; + } - public override Texture StartEditorTexture { get; } - public override Texture NextEditorTexture { get; } - public override Texture EndEditorTexture { get; } + public override Texture StartEditorTexture { get; } + public override Texture NextEditorTexture { get; } + public override Texture EndEditorTexture { get; } - public TextureLaneEditorObjectDrawingTarget(Texture startEditorTexture, Texture nextEditorTexture, Texture endEditorTexture) - { - StartEditorTexture = startEditorTexture; - NextEditorTexture = nextEditorTexture; - EndEditorTexture = endEditorTexture; - } - } + public TextureLaneEditorObjectDrawingTarget(Texture startEditorTexture, Texture nextEditorTexture, Texture endEditorTexture) + { + StartEditorTexture = startEditorTexture; + NextEditorTexture = nextEditorTexture; + EndEditorTexture = endEditorTexture; + } + } } diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/Lane/WallLaneEditorObjectDrawingTarget.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/Lane/WallLaneEditorObjectDrawingTarget.cs index 751e63fd..4b8d29ea 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/Lane/WallLaneEditorObjectDrawingTarget.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/Lane/WallLaneEditorObjectDrawingTarget.cs @@ -3,20 +3,20 @@ namespace OngekiFumenEditor.Modules.FumenVisualEditor.Graphics.Drawing.TargetImpl.EditorObjects.Lane { - [Export(typeof(IFumenEditorDrawingTarget))] - internal class WallLaneEditorObjectDrawingTarget : TextureLaneEditorObjectDrawingTarget - { - public override IEnumerable DrawTargetID { get; } = new[] - { - "WLS","WRS" - }; + [Export(typeof(IFumenEditorDrawingTarget))] + internal class WallLaneEditorObjectDrawingTarget : TextureLaneEditorObjectDrawingTarget + { + public override IEnumerable DrawTargetID { get; } = new[] + { + "WLS","WRS" + }; - public WallLaneEditorObjectDrawingTarget() : base( - LoadTextrueFromDefaultResource("WS.png"), - LoadTextrueFromDefaultResource("WN.png"), - LoadTextrueFromDefaultResource("WE.png") - ) - { - } - } + public WallLaneEditorObjectDrawingTarget() : base( + LoadTextrueFromDefaultResource("wallStart.png"), + LoadTextrueFromDefaultResource("wallNext.png"), + LoadTextrueFromDefaultResource("wallEnd.png") + ) + { + } + } } diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/LaneCurvePathControlDrawingTarget.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/LaneCurvePathControlDrawingTarget.cs index 7e51094f..fbc64685 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/LaneCurvePathControlDrawingTarget.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/LaneCurvePathControlDrawingTarget.cs @@ -34,7 +34,7 @@ public class LaneCurvePathControlDrawingTarget : CommonBatchDrawTargetBase(); stringDrawing = IoC.Get(); highlightDrawing = IoC.Get(); diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/SVG/SvgObjectDrawingTarget.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/SVG/SvgObjectDrawingTarget.cs index e0a47584..1e33f13c 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/SVG/SvgObjectDrawingTarget.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/EditorObjects/SVG/SvgObjectDrawingTarget.cs @@ -29,7 +29,7 @@ public class SvgObjectDrawingTarget : CommonDrawTargetBase, IDisp public SvgObjectDrawingTarget() { - texture = ResourceUtils.OpenReadTextureFromResource(@"Modules\FumenVisualEditor\Views\OngekiObjects\CC.png"); + texture = ResourceUtils.OpenReadTextureFromFile(@".\Resources\editor\commonCircle.png"); cachedSvgRenderDataManager = IoC.Get(); lineDrawing = IoC.Get(); diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/Beam/BeamLazerDrawingTarget.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/Beam/BeamLazerDrawingTarget.cs index 0e1c986a..ee80b0f7 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/Beam/BeamLazerDrawingTarget.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/Beam/BeamLazerDrawingTarget.cs @@ -10,54 +10,51 @@ namespace OngekiFumenEditor.Modules.FumenVisualEditor.Graphics.Drawing.TargetImpl.OngekiObjects.Beam { - [Export(typeof(IFumenEditorDrawingTarget))] - internal class BeamLazerDrawingTarget : CommonDrawTargetBase, IDisposable - { - private DefaultBeamLazerTextureDrawing lazerDrawing; - private Texture textureBody; - private Texture textureWarn; + [Export(typeof(IFumenEditorDrawingTarget))] + internal class BeamLazerDrawingTarget : CommonDrawTargetBase, IDisposable + { + private DefaultBeamLazerTextureDrawing lazerDrawing; + private Texture textureBody; + private Texture textureWarn; - public override IEnumerable DrawTargetID { get; } = new[] { "BMS", "OBS" }; - public override DrawingVisible DefaultVisible => DrawingVisible.Preview; + public override IEnumerable DrawTargetID { get; } = new[] { "BMS", "OBS" }; + public override DrawingVisible DefaultVisible => DrawingVisible.Preview; - public override int DefaultRenderOrder => 300; + public override int DefaultRenderOrder => 300; - public BeamLazerDrawingTarget() - { - lazerDrawing = new(); + public BeamLazerDrawingTarget() + { + lazerDrawing = new(); - void load(ref Texture t, string name) - { - var info = System.Windows.Application.GetResourceStream(new Uri(@"Modules\FumenVisualEditor\Views\OngekiObjects\" + name, UriKind.Relative)); - using var bitmap = Image.FromStream(info.Stream) as Bitmap; - t = new Texture(bitmap); + void load(ref Texture t, string name) + { + t = ResourceUtils.OpenReadTextureFromFile(@".\Resources\editor\" + name); + } - } + load(ref textureBody, "beamBody.png"); + textureBody.TextureWrapT = OpenTK.Graphics.OpenGL.TextureWrapMode.Repeat; - load(ref textureBody, "beam_body.png"); - textureBody.TextureWrapT = OpenTK.Graphics.OpenGL.TextureWrapMode.Repeat; + load(ref textureWarn, "beamWarn.png"); + textureWarn.TextureWrapS = OpenTK.Graphics.OpenGL.TextureWrapMode.Repeat; + textureWarn.TextureWrapT = OpenTK.Graphics.OpenGL.TextureWrapMode.Repeat; + } - load(ref textureWarn, "beam_warn.png"); - textureWarn.TextureWrapS = OpenTK.Graphics.OpenGL.TextureWrapMode.Repeat; - textureWarn.TextureWrapT = OpenTK.Graphics.OpenGL.TextureWrapMode.Repeat; - } + public override void Draw(IFumenEditorDrawingContext target, BeamStart obj) + { + //todo 宽度目测的,需要精确计算 + var xGridWidth = XGridCalculator.CalculateXUnitSize(target.Editor.Setting.XGridDisplayMaxUnit, target.ViewWidth, target.Editor.Setting.XGridUnitSpace) / target.Editor.Setting.XGridUnitSpace; + var width = xGridWidth * 3f * obj.WidthId; - public override void Draw(IFumenEditorDrawingContext target, BeamStart obj) - { - //todo 宽度目测的,需要精确计算 - var xGridWidth = XGridCalculator.CalculateXUnitSize(target.Editor.Setting.XGridDisplayMaxUnit, target.ViewWidth, target.Editor.Setting.XGridUnitSpace) / target.Editor.Setting.XGridUnitSpace; - var width = xGridWidth * 3f * obj.WidthId; + var beginTGrid = obj.MinTGrid; + var endTGrid = obj.MaxTGrid; - var beginTGrid = obj.MinTGrid; - var endTGrid = obj.MaxTGrid; + var duration = endTGrid.TotalGrid - beginTGrid.TotalGrid; + if (duration == 0) + return; - var duration = endTGrid.TotalGrid - beginTGrid.TotalGrid; - if (duration == 0) - return; + var curTGrid = target.Editor.GetCurrentTGrid(); - var curTGrid = target.Editor.GetCurrentTGrid(); - - /* ^ -- leadOutTGrid + /* ^ -- leadOutTGrid * | | * | | progress = [1,2] * | | @@ -74,81 +71,81 @@ public override void Draw(IFumenEditorDrawingContext target, BeamStart obj) * --leadInTGrid */ - double progress; - XGrid xGrid; - bool prepareWarn = false; - - if (curTGrid < beginTGrid) - { - //progress = [-1,0] - var leadBodyInTGrid = TGridCalculator.ConvertAudioTimeToTGrid(TGridCalculator.ConvertTGridToAudioTime(beginTGrid, target.Editor) - TimeSpan.FromMilliseconds(BeamStart.LEAD_IN_BODY_DURATION), target.Editor); - progress = MathUtils.Normalize(leadBodyInTGrid.TotalGrid, beginTGrid.TotalGrid, curTGrid.TotalGrid) - 1; - xGrid = obj.XGrid; - - prepareWarn = true; - } - else if (curTGrid > endTGrid) - { - //progress = [1,2] - var leadOutTGrid = TGridCalculator.ConvertAudioTimeToTGrid(TGridCalculator.ConvertTGridToAudioTime(endTGrid, target.Editor) + TimeSpan.FromMilliseconds(BeamStart.LEAD_OUT_DURATION), target.Editor); - progress = MathUtils.Normalize(endTGrid.TotalGrid, leadOutTGrid.TotalGrid, curTGrid.TotalGrid) + 1; - xGrid = obj.Children.LastOrDefault()?.XGrid; - } - else - { - //progress = [0,1] - progress = MathUtils.Normalize(beginTGrid.TotalGrid, endTGrid.TotalGrid, curTGrid.TotalGrid); - xGrid = obj.CalulateXGrid(curTGrid); - } - - if (xGrid is null) - return; - var currentX = (float)XGridCalculator.ConvertXGridToX(xGrid, target.Editor); - - var rotate = 0f; - var x = currentX; - var judgeOffset = (float)target.Editor.Setting.JudgeLineOffsetY; - - if (obj.ObliqueSourceXGridOffset is not null) - { - //It's oblique beam. - IBeamObject curBeamObj = obj.Children.LastOrDefault(x => curTGrid > x.TGrid) as IBeamObject ?? obj; - var curObliqueTopXGrid = obj.XGrid.TotalUnit + curBeamObj.ObliqueSourceXGridOffset.TotalUnit; - - var currentY = target.ConvertToY(target.Editor.GetCurrentTGrid()); - var obliqueTopX = (float)XGridCalculator.ConvertXGridToX(curObliqueTopXGrid, target.Editor); - var obliqueTopY = currentY - judgeOffset + target.ViewHeight; - - x = (obliqueTopX + currentX) / 2; - - rotate = (float)Math.Atan((currentX - obliqueTopX) / (obliqueTopY - currentY)); - } - - if (prepareWarn) - { - var audioTime = TGridCalculator.ConvertTGridToAudioTime(beginTGrid, target.Editor); - var leadAudioTime = audioTime - TGridCalculator.ConvertFrameToAudioTime(BeamStart.LEAD_IN_DURATION_FRAME); - var leadInTGrid = TGridCalculator.ConvertAudioTimeToTGrid(leadAudioTime, target.Editor); - if (leadInTGrid is null) - leadInTGrid = TGrid.Zero; - var warnProgress = MathUtils.Normalize(leadInTGrid.TotalGrid, beginTGrid.TotalGrid, curTGrid.TotalGrid); - if(warnProgress < 0) warnProgress = -1; - lazerDrawing.Draw(target, textureWarn, (int)width, x, (float)warnProgress, new(1, 215 / 255.0f, 0, 0.5f), rotate, judgeOffset); - } - - lazerDrawing.Draw(target, textureBody, (int)width, x, (float)progress, OpenTK.Mathematics.Vector4.One, rotate, judgeOffset); - } - - public void Dispose() - { - lazerDrawing?.Dispose(); - lazerDrawing = default; - - textureBody?.Dispose(); - textureBody = default; - - textureWarn?.Dispose(); - textureWarn = default; - } - } + double progress; + XGrid xGrid; + bool prepareWarn = false; + + if (curTGrid < beginTGrid) + { + //progress = [-1,0] + var leadBodyInTGrid = TGridCalculator.ConvertAudioTimeToTGrid(TGridCalculator.ConvertTGridToAudioTime(beginTGrid, target.Editor) - TimeSpan.FromMilliseconds(BeamStart.LEAD_IN_BODY_DURATION), target.Editor); + progress = MathUtils.Normalize(leadBodyInTGrid.TotalGrid, beginTGrid.TotalGrid, curTGrid.TotalGrid) - 1; + xGrid = obj.XGrid; + + prepareWarn = true; + } + else if (curTGrid > endTGrid) + { + //progress = [1,2] + var leadOutTGrid = TGridCalculator.ConvertAudioTimeToTGrid(TGridCalculator.ConvertTGridToAudioTime(endTGrid, target.Editor) + TimeSpan.FromMilliseconds(BeamStart.LEAD_OUT_DURATION), target.Editor); + progress = MathUtils.Normalize(endTGrid.TotalGrid, leadOutTGrid.TotalGrid, curTGrid.TotalGrid) + 1; + xGrid = obj.Children.LastOrDefault()?.XGrid; + } + else + { + //progress = [0,1] + progress = MathUtils.Normalize(beginTGrid.TotalGrid, endTGrid.TotalGrid, curTGrid.TotalGrid); + xGrid = obj.CalulateXGrid(curTGrid); + } + + if (xGrid is null) + return; + var currentX = (float)XGridCalculator.ConvertXGridToX(xGrid, target.Editor); + + var rotate = 0f; + var x = currentX; + var judgeOffset = (float)target.Editor.Setting.JudgeLineOffsetY; + + if (obj.ObliqueSourceXGridOffset is not null) + { + //It's oblique beam. + IBeamObject curBeamObj = obj.Children.LastOrDefault(x => curTGrid > x.TGrid) as IBeamObject ?? obj; + var curObliqueTopXGrid = obj.XGrid.TotalUnit + curBeamObj.ObliqueSourceXGridOffset.TotalUnit; + + var currentY = target.ConvertToY(target.Editor.GetCurrentTGrid()); + var obliqueTopX = (float)XGridCalculator.ConvertXGridToX(curObliqueTopXGrid, target.Editor); + var obliqueTopY = currentY - judgeOffset + target.ViewHeight; + + x = (obliqueTopX + currentX) / 2; + + rotate = (float)Math.Atan((currentX - obliqueTopX) / (obliqueTopY - currentY)); + } + + if (prepareWarn) + { + var audioTime = TGridCalculator.ConvertTGridToAudioTime(beginTGrid, target.Editor); + var leadAudioTime = audioTime - TGridCalculator.ConvertFrameToAudioTime(BeamStart.LEAD_IN_DURATION_FRAME); + var leadInTGrid = TGridCalculator.ConvertAudioTimeToTGrid(leadAudioTime, target.Editor); + if (leadInTGrid is null) + leadInTGrid = TGrid.Zero; + var warnProgress = MathUtils.Normalize(leadInTGrid.TotalGrid, beginTGrid.TotalGrid, curTGrid.TotalGrid); + if (warnProgress < 0) warnProgress = -1; + lazerDrawing.Draw(target, textureWarn, (int)width, x, (float)warnProgress, new(1, 215 / 255.0f, 0, 0.5f), rotate, judgeOffset); + } + + lazerDrawing.Draw(target, textureBody, (int)width, x, (float)progress, OpenTK.Mathematics.Vector4.One, rotate, judgeOffset); + } + + public void Dispose() + { + lazerDrawing?.Dispose(); + lazerDrawing = default; + + textureBody?.Dispose(); + textureBody = default; + + textureWarn?.Dispose(); + textureWarn = default; + } + } } diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/BulletBell/BellDrawingTarget.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/BulletBell/BellDrawingTarget.cs index c184e715..38385fd9 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/BulletBell/BellDrawingTarget.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/BulletBell/BellDrawingTarget.cs @@ -2,6 +2,7 @@ using OngekiFumenEditor.Base.OngekiObjects; using OngekiFumenEditor.Base.OngekiObjects.BulletPalleteEnums; using OngekiFumenEditor.Kernel.Graphics.Base; +using OngekiFumenEditor.Utils; using System; using System.Collections.Generic; using System.ComponentModel.Composition; @@ -24,9 +25,7 @@ public BellDrawingTarget() { Texture LoadTex(string rPath) { - var info = System.Windows.Application.GetResourceStream(new Uri(@"Modules\FumenVisualEditor\Views\OngekiObjects\" + rPath, UriKind.Relative)); - using var bitmap = Image.FromStream(info.Stream) as Bitmap; - return new Texture(bitmap); + return ResourceUtils.OpenReadTextureFromFile(@".\Resources\editor\" + rPath); } texture = LoadTex("bell.png"); diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/BulletBell/BulletDrawingTarget.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/BulletBell/BulletDrawingTarget.cs index d418a0b4..36addd9e 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/BulletBell/BulletDrawingTarget.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/BulletBell/BulletDrawingTarget.cs @@ -2,6 +2,7 @@ using OngekiFumenEditor.Base.OngekiObjects; using OngekiFumenEditor.Base.OngekiObjects.BulletPalleteEnums; using OngekiFumenEditor.Kernel.Graphics.Base; +using OngekiFumenEditor.Utils; using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -28,9 +29,7 @@ public BulletDrawingTarget() { Texture LoadTex(string rPath) { - var info = System.Windows.Application.GetResourceStream(new Uri(@"Modules\FumenVisualEditor\Views\OngekiObjects\" + rPath, UriKind.Relative)); - using var bitmap = Image.FromStream(info.Stream) as Bitmap; - return new Texture(bitmap); + return ResourceUtils.OpenReadTextureFromFile(@".\Resources\editor\" + rPath); } var _spritesOriginOffset = new Dictionary(); @@ -62,25 +61,25 @@ void SetTexture(BulletDamageType k1, BulletType k2, string rPath, Vector2 size, var origOffset = new Vector2(0, 0); var sizeLarge = size * 1.4f; var origOffsetLarge = origOffset * 1.4f; - SetTexture(BulletDamageType.Normal, BulletType.Circle, "nt_mine_red.png", size, origOffset, sizeLarge, origOffsetLarge); - SetTexture(BulletDamageType.Hard, BulletType.Circle, "nt_mine_pur.png", size, origOffset, sizeLarge, origOffsetLarge); - SetTexture(BulletDamageType.Danger, BulletType.Circle, "nt_mine_blk.png", size, origOffset, sizeLarge, origOffsetLarge); + SetTexture(BulletDamageType.Normal, BulletType.Circle, "bulletCircleNormal.png", size, origOffset, sizeLarge, origOffsetLarge); + SetTexture(BulletDamageType.Hard, BulletType.Circle, "bulletCircleHard.png", size, origOffset, sizeLarge, origOffsetLarge); + SetTexture(BulletDamageType.Danger, BulletType.Circle, "bulletCircleDanger.png", size, origOffset, sizeLarge, origOffsetLarge); size = new(30, 80); origOffset = new Vector2(0, 35); sizeLarge = size * 1.4f; origOffsetLarge = origOffset * 1.4f; - SetTexture(BulletDamageType.Normal, BulletType.Needle, "tri_bullet0.png", size, origOffset, sizeLarge, origOffsetLarge); - SetTexture(BulletDamageType.Hard, BulletType.Needle, "tri_bullet1.png", size, origOffset, sizeLarge, origOffsetLarge); - SetTexture(BulletDamageType.Danger, BulletType.Needle, "tri_bullet2.png", size, origOffset, sizeLarge, origOffsetLarge); + SetTexture(BulletDamageType.Normal, BulletType.Needle, "bulletNeedleNormal.png", size, origOffset, sizeLarge, origOffsetLarge); + SetTexture(BulletDamageType.Hard, BulletType.Needle, "bulletNeedleHard.png", size, origOffset, sizeLarge, origOffsetLarge); + SetTexture(BulletDamageType.Danger, BulletType.Needle, "bulletNeedleDanger.png", size, origOffset, sizeLarge, origOffsetLarge); size = new(30, 80); origOffset = new Vector2(0, 35); sizeLarge = size * 1.4f; origOffsetLarge = origOffset * 1.4f; - SetTexture(BulletDamageType.Normal, BulletType.Square, "sqrt_bullet0.png", size, origOffset, sizeLarge, origOffsetLarge); - SetTexture(BulletDamageType.Hard, BulletType.Square, "sqrt_bullet1.png", size, origOffset, sizeLarge, origOffsetLarge); - SetTexture(BulletDamageType.Danger, BulletType.Square, "sqrt_bullet2.png", size, origOffset, sizeLarge, origOffsetLarge); + SetTexture(BulletDamageType.Normal, BulletType.Square, "bulletSquareNormal.png", size, origOffset, sizeLarge, origOffsetLarge); + SetTexture(BulletDamageType.Hard, BulletType.Square, "bulletSquareHard.png", size, origOffset, sizeLarge, origOffsetLarge); + SetTexture(BulletDamageType.Danger, BulletType.Square, "bulletSquareDanger.png", size, origOffset, sizeLarge, origOffsetLarge); spritesMap = _spritesMap.ToImmutableDictionary(); spritesSize = _spritesSize.ToImmutableDictionary(); diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/FlickDrawingTarget.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/FlickDrawingTarget.cs index 2fe47c71..399d2832 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/FlickDrawingTarget.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/FlickDrawingTarget.cs @@ -34,8 +34,8 @@ public class FlickDrawingTarget : CommonBatchDrawTargetBase, IDisposable public FlickDrawingTarget() : base() { - texture = ResourceUtils.OpenReadTextureFromResource(@"Modules\FumenVisualEditor\Views\OngekiObjects\flick.png"); - exFlickEffTexture = ResourceUtils.OpenReadTextureFromResource(@"Modules\FumenVisualEditor\Views\OngekiObjects\exflick_Eff.png"); + texture = ResourceUtils.OpenReadTextureFromFile(@".\Resources\editor\flick.png"); + exFlickEffTexture = ResourceUtils.OpenReadTextureFromFile(@".\Resources\editor\exflickEffect.png"); leftSize = new Vector2(104, 69.333f); rightSize = new Vector2(-104, 69.333f); diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/TapDrawingTarget.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/TapDrawingTarget.cs index 08554a22..8a3738d6 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/TapDrawingTarget.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/TapDrawingTarget.cs @@ -12,170 +12,159 @@ namespace OngekiFumenEditor.Modules.FumenVisualEditor.Graphics.Drawing.TargetImpl.OngekiObjects { - [Export(typeof(IFumenEditorDrawingTarget))] - [Export(typeof(TapDrawingTarget))] - public class TapDrawingTarget : CommonBatchDrawTargetBase, IDisposable - { - public override IEnumerable DrawTargetID { get; } = new[] { "TAP", "CTP", "XTP" }; - - public override int DefaultRenderOrder => 1200; - - private Texture redTexture; - private Texture greenTexture; - private Texture blueTexture; - private Texture wallTexture; - private Texture tapExTexture; - private Texture wallExTexture; - private Texture untagExTexture; - - private Vector2 tapSize = new Vector2(40, 16); - private Vector2 exTapEffSize = new Vector2(40, 16); - private Vector2 leftWallSize = new Vector2(40, 40); - private Vector2 rightWallSize = new Vector2(-40, 40); - - private Dictionary> normalList = new(); - private Dictionary> exList = new(); - private Dictionary> selectTapList = new(); - - private IBatchTextureDrawing batchTextureDrawing; - private IHighlightBatchTextureDrawing highlightDrawing; - - public TapDrawingTarget() : base() - { - redTexture = ResourceUtils.OpenReadTextureFromResource(@"Modules\FumenVisualEditor\Views\OngekiObjects\mu3_nt_tap_02.png"); - - greenTexture = ResourceUtils.OpenReadTextureFromResource(@"Modules\FumenVisualEditor\Views\OngekiObjects\mu3_nt_extap_02.png"); - - blueTexture = ResourceUtils.OpenReadTextureFromResource(@"Modules\FumenVisualEditor\Views\OngekiObjects\mu3_nt_hold_02.png"); - - wallTexture = ResourceUtils.OpenReadTextureFromResource(@"Modules\FumenVisualEditor\Views\OngekiObjects\walltap.png"); - - tapExTexture = ResourceUtils.OpenReadTextureFromResource(@"Modules\FumenVisualEditor\Views\OngekiObjects\tap_exEff.png"); - - wallExTexture = ResourceUtils.OpenReadTextureFromResource(@"Modules\FumenVisualEditor\Views\OngekiObjects\walltap_Eff.png"); - - untagExTexture = ResourceUtils.OpenReadTextureFromResource(@"Modules\FumenVisualEditor\Views\OngekiObjects\mu3_nt_extap_01.png"); - - void init(Texture texture) - { - normalList[texture] = new(); - selectTapList[texture] = new(); - } - - init(redTexture); - init(greenTexture); - init(blueTexture); - init(wallTexture); - init(untagExTexture); - - exList[tapExTexture] = new(); - exList[wallExTexture] = new(); - - batchTextureDrawing = IoC.Get(); - highlightDrawing = IoC.Get(); - } - - public void Draw(IFumenEditorDrawingContext target, LaneType? laneType, OngekiMovableObjectBase tap, bool isCritical) - { - var texture = laneType switch - { - LaneType.Left => redTexture, - LaneType.Center => greenTexture, - LaneType.Right => blueTexture, - LaneType.WallRight or LaneType.WallLeft => wallTexture, - _ => untagExTexture - }; - - if (texture is null) - return; - - var size = laneType switch - { - LaneType.WallRight => rightWallSize, - LaneType.WallLeft => leftWallSize, - _ => tapSize - }; - - var x = XGridCalculator.ConvertXGridToX(tap.XGrid, target.Editor); - var y = target.ConvertToY(tap.TGrid); - - var pos = new Vector2((float)x, (float)y); - normalList[texture].Add((size, pos, 0f)); - - if (tap.IsSelected) - { - if (laneType == LaneType.WallLeft || laneType == LaneType.WallRight) - { - size = new(Math.Sign(size.X) * 42, 42); - } - else - { - size = tapSize * new Vector2(1.5f, 1.5f); - } - - selectTapList[texture].Add((size, pos, 0f)); - } - - if (isCritical) - { - if (laneType == LaneType.WallLeft || laneType == LaneType.WallRight) - { - size = new(Math.Sign(size.X) * 39, 39); - texture = wallExTexture; - } - else - { - size = new(68, 30); - texture = tapExTexture; - } - - exList[texture].Add((size, pos, 0f)); - } - - size.X = Math.Abs(size.X); - target.RegisterSelectableObject(tap, pos, size); - } - - private void ClearList() - { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - void clear(Dictionary> map) - { - foreach (var list in map.Values) - list.Clear(); - } - - clear(normalList); - clear(exList); - clear(selectTapList); - } - - public void Dispose() - { - redTexture?.Dispose(); - greenTexture?.Dispose(); - blueTexture?.Dispose(); - wallTexture?.Dispose(); - } - - public override void DrawBatch(IFumenEditorDrawingContext target, IEnumerable objs) - { - foreach (var tap in objs) - Draw(target, tap.ReferenceLaneStart?.LaneType, tap, tap.IsCritical); - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - void draw(Dictionary> map) - { - foreach (var item in map) - batchTextureDrawing.Draw(target, item.Key, item.Value); - } - - foreach (var item in selectTapList) - highlightDrawing.Draw(target, item.Key, item.Value); - draw(exList); - draw(normalList); - - ClearList(); - } - } + [Export(typeof(IFumenEditorDrawingTarget))] + [Export(typeof(TapDrawingTarget))] + public class TapDrawingTarget : CommonBatchDrawTargetBase, IDisposable + { + public override IEnumerable DrawTargetID { get; } = new[] { "TAP", "CTP", "XTP" }; + + public override int DefaultRenderOrder => 1200; + + private Texture redTexture; + private Texture greenTexture; + private Texture blueTexture; + private Texture wallTexture; + private Texture tapExTexture; + private Texture wallExTexture; + private Texture untagExTexture; + + private Vector2 tapSize = new Vector2(40, 16); + private Vector2 exTapEffSize = new Vector2(40, 16); + private Vector2 leftWallSize = new Vector2(40, 40); + private Vector2 rightWallSize = new Vector2(-40, 40); + + private Dictionary> normalList = new(); + private Dictionary> exList = new(); + private Dictionary> selectTapList = new(); + + private IBatchTextureDrawing batchTextureDrawing; + private IHighlightBatchTextureDrawing highlightDrawing; + + public TapDrawingTarget() : base() + { + void init(ref Texture texture, string resourceName) + { + texture = ResourceUtils.OpenReadTextureFromFile(@".\Resources\editor\" + resourceName); + normalList[texture] = new(); + selectTapList[texture] = new(); + } + + init(ref redTexture, "redTap.png"); + init(ref greenTexture, "greenTap.png"); + init(ref blueTexture, "blueTap.png"); + init(ref wallTexture, "wallTap.png"); + init(ref tapExTexture, "exTapEffect.png"); + init(ref wallExTexture, "wallTapEffect.png"); + init(ref untagExTexture, "unsetTap.png"); + + exList[tapExTexture] = new(); + exList[wallExTexture] = new(); + + batchTextureDrawing = IoC.Get(); + highlightDrawing = IoC.Get(); + } + + public void Draw(IFumenEditorDrawingContext target, LaneType? laneType, OngekiMovableObjectBase tap, bool isCritical) + { + var texture = laneType switch + { + LaneType.Left => redTexture, + LaneType.Center => greenTexture, + LaneType.Right => blueTexture, + LaneType.WallRight or LaneType.WallLeft => wallTexture, + _ => untagExTexture + }; + + if (texture is null) + return; + + var size = laneType switch + { + LaneType.WallRight => rightWallSize, + LaneType.WallLeft => leftWallSize, + _ => tapSize + }; + + var x = XGridCalculator.ConvertXGridToX(tap.XGrid, target.Editor); + var y = target.ConvertToY(tap.TGrid); + + var pos = new Vector2((float)x, (float)y); + normalList[texture].Add((size, pos, 0f)); + + if (tap.IsSelected) + { + if (laneType == LaneType.WallLeft || laneType == LaneType.WallRight) + { + size = new(Math.Sign(size.X) * 42, 42); + } + else + { + size = tapSize * new Vector2(1.5f, 1.5f); + } + + selectTapList[texture].Add((size, pos, 0f)); + } + + if (isCritical) + { + if (laneType == LaneType.WallLeft || laneType == LaneType.WallRight) + { + size = new(Math.Sign(size.X) * 39, 39); + texture = wallExTexture; + } + else + { + size = new(68, 30); + texture = tapExTexture; + } + + exList[texture].Add((size, pos, 0f)); + } + + size.X = Math.Abs(size.X); + target.RegisterSelectableObject(tap, pos, size); + } + + private void ClearList() + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + void clear(Dictionary> map) + { + foreach (var list in map.Values) + list.Clear(); + } + + clear(normalList); + clear(exList); + clear(selectTapList); + } + + public void Dispose() + { + redTexture?.Dispose(); + greenTexture?.Dispose(); + blueTexture?.Dispose(); + wallTexture?.Dispose(); + } + + public override void DrawBatch(IFumenEditorDrawingContext target, IEnumerable objs) + { + foreach (var tap in objs) + Draw(target, tap.ReferenceLaneStart?.LaneType, tap, tap.IsCritical); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + void draw(Dictionary> map) + { + foreach (var item in map) + batchTextureDrawing.Draw(target, item.Key, item.Value); + } + + foreach (var item in selectTapList) + highlightDrawing.Draw(target, item.Key, item.Value); + draw(exList); + draw(normalList); + + ClearList(); + } + } } diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BellView.xaml b/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BellView.xaml deleted file mode 100644 index 5c2b819f..00000000 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BellView.xaml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BellView.xaml.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BellView.xaml.cs deleted file mode 100644 index 9a9d6455..00000000 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BellView.xaml.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace OngekiFumenEditor.Modules.FumenVisualEditor.Views.OngekiObjects -{ - /// - /// Bell.xaml 的交互逻辑 - /// - /// - - public partial class BellView : OngekiObjectViewBase - { - public BellView() - { - InitializeComponent(); - } - } -} diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BulletView.xaml b/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BulletView.xaml deleted file mode 100644 index a76a4ac4..00000000 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BulletView.xaml +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BulletView.xaml.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BulletView.xaml.cs deleted file mode 100644 index 89d4cf44..00000000 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BulletView.xaml.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace OngekiFumenEditor.Modules.FumenVisualEditor.Views.OngekiObjects -{ - /// - /// Bell.xaml 的交互逻辑 - /// - /// - - public partial class BulletView : OngekiObjectViewBase - { - public BulletView() - { - InitializeComponent(); - } - } -} diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/FlickView.xaml b/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/FlickView.xaml deleted file mode 100644 index 4e0135f9..00000000 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/FlickView.xaml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/FlickView.xaml.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/FlickView.xaml.cs deleted file mode 100644 index 88d4e052..00000000 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/FlickView.xaml.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace OngekiFumenEditor.Modules.FumenVisualEditor.Views.OngekiObjects -{ - /// - /// Bell.xaml 的交互逻辑 - /// - /// - - public partial class FlickView : OngekiObjectViewBase - { - public FlickView() - { - InitializeComponent(); - } - } -} diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/Line.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/Line.cs deleted file mode 100644 index 13d8f9b4..00000000 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/Line.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System.Windows; -using System.Windows.Media; -using System.Windows.Shapes; - -namespace OngekiFumenEditor.Modules.FumenVisualEditor.Controls.OngekiObjects -{ - public class Line : Shape - { - private const FrameworkPropertyMetadataOptions MetadataOptions = - FrameworkPropertyMetadataOptions.AffectsMeasure | - FrameworkPropertyMetadataOptions.AffectsRender; - - private Geometry _geometry; - - public static readonly DependencyProperty X1Property = DependencyProperty.Register( - "X1", typeof(double), typeof(Line), - new FrameworkPropertyMetadata(0.0, MetadataOptions)); - - public double X1 - { - get { return (double)GetValue(X1Property); } - set { SetValue(X1Property, value); } - } - - public static readonly DependencyProperty X2Property = DependencyProperty.Register( - "X2", typeof(double), typeof(Line), - new FrameworkPropertyMetadata(0.0, MetadataOptions)); - - public double X2 - { - get { return (double)GetValue(X2Property); } - set { SetValue(X2Property, value); } - } - - public static readonly DependencyProperty Y1Property = DependencyProperty.Register( - "Y1", typeof(double), typeof(Line), - new FrameworkPropertyMetadata(0.0, MetadataOptions)); - - public double Y1 - { - get { return (double)GetValue(Y1Property); } - set { SetValue(Y1Property, value); } - } - - public static readonly DependencyProperty Y2Property = DependencyProperty.Register( - "Y2", typeof(double), typeof(Line), - new FrameworkPropertyMetadata(0.0, MetadataOptions)); - - public double Y2 - { - get { return (double)GetValue(Y2Property); } - set { SetValue(Y2Property, value); } - } - - protected override Geometry DefiningGeometry - { - get { return _geometry; } - } - - protected override Size MeasureOverride(Size constraint) - { - var midX = X1 + ((X2 - X1) / 2); - - _geometry = new PathGeometry - { - Figures = - { - new PathFigure - { - IsFilled = false, - StartPoint = new Point(X1, Y1), - Segments = - { - new LineSegment - { - Point = new Point(X2, Y2), - IsSmoothJoin = true, - IsStroked = true - } - } - } - } - }; - - return base.MeasureOverride(constraint); - } - } -} \ No newline at end of file diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/TapView.xaml b/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/TapView.xaml deleted file mode 100644 index 25c2e4f2..00000000 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/TapView.xaml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/TapView.xaml.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/TapView.xaml.cs deleted file mode 100644 index 5998508c..00000000 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/TapView.xaml.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace OngekiFumenEditor.Modules.FumenVisualEditor.Views.OngekiObjects -{ - /// - /// Bell.xaml 的交互逻辑 - /// - /// - - public partial class TapView : OngekiObjectViewBase - { - public TapView() - { - InitializeComponent(); - } - } -} diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/WallTapView.xaml b/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/WallTapView.xaml deleted file mode 100644 index e8e20d10..00000000 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/WallTapView.xaml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/WallTapView.xaml.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/WallTapView.xaml.cs deleted file mode 100644 index 72b7bdde..00000000 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/WallTapView.xaml.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace OngekiFumenEditor.Modules.FumenVisualEditor.Views.OngekiObjects -{ - /// - /// Bell.xaml 的交互逻辑 - /// - /// - - public partial class WallTapView : OngekiObjectViewBase - { - public WallTapView() - { - InitializeComponent(); - } - } -} diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/danger_normal_bullet.svg b/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/danger_normal_bullet.svg deleted file mode 100644 index b3877d56..00000000 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/danger_normal_bullet.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/hard_normal_bullet.svg b/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/hard_normal_bullet.svg deleted file mode 100644 index 1961cf86..00000000 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/hard_normal_bullet.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/normal_normal_bullet.svg b/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/normal_normal_bullet.svg deleted file mode 100644 index 25246876..00000000 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/normal_normal_bullet.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/nt_linehold_pur.png b/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/nt_linehold_pur.png deleted file mode 100644 index 8db354fe607c0fbabb05612fb6083c1c72c6abc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2444 zcmV;733K*|P)!y zuTW6SZaE_vwQVIz;y-P>Wp~T^O=U8Z@x->Iw50yJrI(*xep8M=OLbCb^_6;UzP@&k zZ`2p=@v6RcuYaku`yTSaeF3Fa_mu6E?jEN?U;hL@f6@J_3!`*t-21zKDU>>QubzU5Y@1}b{-MxKv{n!{mzy1w#I-nJ|6_wFmixU*I2KllEBsZZ)3_Y9AJ-Q(};F~44Z{O&~&qr;00 z2pa-5zVf#O&S@WOg9s?Aun~BM%61Lp4PXekp*4*FJ_q3^o-<};HT6|~EXW%GTzZUZ zl2Z8qT&p4etj75C1N2=$XBG8;RW^0iSc1BS@q_Cx%SvHL)dD~nytz+&>HeqvVov1UWI08B{E0*o=I@?jqBeF3HF zA1}akZ0o7u&=e4^(R5>#%ZxG0m<5PQ5*8o@KR~ts2Pa#A6>#bTmXeMID94>ax@hOQ zMPZah_yA79%oqIZed7R5T|lb^wAT#RJ~a-2GAOKm(pnx)b}Lij89@|JU?vVCJb@Wm zY^DaTe_uHR#~4~b`@W1_!8YiIeJntR249v?`M#V>qOm}fE+Cd7cw}OYtyVVxXpv!S z%oQI8U#{T?-x5rI;)y{jHwG$V&a759fTzAF{Jp1zLhReAFm8?v$GRp`j^Ccw0^sW; zV3G-bipvZwpmb#b#Z<%b^}sN1piH6cS6YFBvehAA{vXZxNi6_e z6jc5a#=^*_kTwlm8s^=Ut)-d&d&so_&sc@_g@jF2eoC1^aIfa!kg<@kp$22QX#rSA z(2{t-vC8M>2Us!&zy^g{;#(#21kUM`a$?9c*r3p`oC!REa>Bw>>H_*mJ}f+c;_+XTD^vn|P9}6*PNn!}K9L$ZFa(uk z->7rZK4+??EUNnU%2VY_$_v0w1L20x3*!egr*;K(c^>;eEQQ44s)6z#r&hok6BI%f1APYWo- z%mOlTpdSN7Lg#5<1G_N*mY4%Tn^;t^sKk&bC2(RE(8dFFgGEG2IA)zdPBDS#bpl=A zuj{sdhgg8Ri3fl`oO`u^EB3z3S6YMp)(Fa4zzwVx5QAu1z?i{bq6MVRlor5tv1krh zb)1DFsbQ}L_df|dj_?#twF96n4lJbA?F0#n3EVn4S53?kpu3Sn;4R^7=%p> ziP7nhHvnJxGO9`jJ`xDZmVIJ~p6~}`mZ1Z|&BId+>R7YxUmsc>*A>iq`}nOki7*EW z2*JW4EPUyXA$b;X13L=<*d~UQ$i5%60N~Bt@EHW6GOra})#h3*y~|?6(*lZJT)`j; zopX5Dm29sn5HFNl)` zfNL}}_6_u40ze{IfHd|DI*J8|!DfjeA=KevR>_xx$HKtGB!=uowgAha9|KJI10Wv2 z?~#XDD;N_Gz=`?s0PR}Au&1&fvy4{AEWksp1soaHS^x)97z6Bum|dHc>zNkM?e|8btc~otQ8!t6X>^&WtkV?R|t_a2A0L+3LzBi(gi>s z+`H@~x&leEA9r#q>?8)|?BI~9OO_o<5EUf`;kJ#_!88B4eO#c=_fg#E_}IgMqwa=rb7qf0H0e zn;24%T7b|GK)qJ*k?3m-zDz?u01FF%<+0zVObn4O20>YbxdEcYpr_nGWIa$OhDfKH zQQ_=!1E+3fZcHHR8WgX9kU5}Z0@d@rL88|Qq{ONm61J4xaszXE_zi4&xQM7=j26%w zH*=AwF((kWE@18oAybP)iP8d^s|1l}piY+V9h@qdy@MN|t$|oXE1=P@51_jX%y|KH z_`CpJ2dh5lEf?^vm7!P+z$ZAhzib#Vz - - @@ -58,40 +56,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -250,40 +214,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -394,15 +324,6 @@ Code - - Code - - - Code - - - Code - Code @@ -467,6 +388,111 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + PreserveNewest @@ -648,21 +674,6 @@ $(DefaultXamlRuntime) Designer - - $(DefaultXamlRuntime) - Designer - - - $(DefaultXamlRuntime) - Designer - - - $(DefaultXamlRuntime) - Designer - - - $(DefaultXamlRuntime) - $(DefaultXamlRuntime) Designer diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BE.png b/OngekiFumenEditor/Resources/editor/BE.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BE.png rename to OngekiFumenEditor/Resources/editor/BE.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BN.png b/OngekiFumenEditor/Resources/editor/BN.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BN.png rename to OngekiFumenEditor/Resources/editor/BN.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BS.png b/OngekiFumenEditor/Resources/editor/BS.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/BS.png rename to OngekiFumenEditor/Resources/editor/BS.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/beam_body.png b/OngekiFumenEditor/Resources/editor/beamBody.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/beam_body.png rename to OngekiFumenEditor/Resources/editor/beamBody.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/beam_warn.png b/OngekiFumenEditor/Resources/editor/beamWarn.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/beam_warn.png rename to OngekiFumenEditor/Resources/editor/beamWarn.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/bell.png b/OngekiFumenEditor/Resources/editor/bell.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/bell.png rename to OngekiFumenEditor/Resources/editor/bell.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/mu3_nt_hold_02.png b/OngekiFumenEditor/Resources/editor/blueTap.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/mu3_nt_hold_02.png rename to OngekiFumenEditor/Resources/editor/blueTap.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/nt_mine_blk.png b/OngekiFumenEditor/Resources/editor/bulletCircleDanger.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/nt_mine_blk.png rename to OngekiFumenEditor/Resources/editor/bulletCircleDanger.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/nt_mine_pur.png b/OngekiFumenEditor/Resources/editor/bulletCircleHard.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/nt_mine_pur.png rename to OngekiFumenEditor/Resources/editor/bulletCircleHard.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/nt_mine_red.png b/OngekiFumenEditor/Resources/editor/bulletCircleNormal.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/nt_mine_red.png rename to OngekiFumenEditor/Resources/editor/bulletCircleNormal.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/tri_bullet2.png b/OngekiFumenEditor/Resources/editor/bulletNeedleDanger.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/tri_bullet2.png rename to OngekiFumenEditor/Resources/editor/bulletNeedleDanger.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/tri_bullet1.png b/OngekiFumenEditor/Resources/editor/bulletNeedleHard.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/tri_bullet1.png rename to OngekiFumenEditor/Resources/editor/bulletNeedleHard.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/tri_bullet0.png b/OngekiFumenEditor/Resources/editor/bulletNeedleNormal.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/tri_bullet0.png rename to OngekiFumenEditor/Resources/editor/bulletNeedleNormal.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/sqrt_bullet2.png b/OngekiFumenEditor/Resources/editor/bulletSquareDanger.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/sqrt_bullet2.png rename to OngekiFumenEditor/Resources/editor/bulletSquareDanger.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/sqrt_bullet1.png b/OngekiFumenEditor/Resources/editor/bulletSquareHard.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/sqrt_bullet1.png rename to OngekiFumenEditor/Resources/editor/bulletSquareHard.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/sqrt_bullet0.png b/OngekiFumenEditor/Resources/editor/bulletSquareNormal.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/sqrt_bullet0.png rename to OngekiFumenEditor/Resources/editor/bulletSquareNormal.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/CC.png b/OngekiFumenEditor/Resources/editor/commonCircle.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/CC.png rename to OngekiFumenEditor/Resources/editor/commonCircle.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/tap_exEff.png b/OngekiFumenEditor/Resources/editor/exTapEffect.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/tap_exEff.png rename to OngekiFumenEditor/Resources/editor/exTapEffect.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/exflick_Eff.png b/OngekiFumenEditor/Resources/editor/exflickEffect.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/exflick_Eff.png rename to OngekiFumenEditor/Resources/editor/exflickEffect.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/flick.png b/OngekiFumenEditor/Resources/editor/flick.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/flick.png rename to OngekiFumenEditor/Resources/editor/flick.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/mu3_nt_extap_02.png b/OngekiFumenEditor/Resources/editor/greenTap.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/mu3_nt_extap_02.png rename to OngekiFumenEditor/Resources/editor/greenTap.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/NE.png b/OngekiFumenEditor/Resources/editor/laneEnd.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/NE.png rename to OngekiFumenEditor/Resources/editor/laneEnd.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/NN.png b/OngekiFumenEditor/Resources/editor/laneNext.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/NN.png rename to OngekiFumenEditor/Resources/editor/laneNext.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/NS.png b/OngekiFumenEditor/Resources/editor/laneStart.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/NS.png rename to OngekiFumenEditor/Resources/editor/laneStart.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/playerLoc.png b/OngekiFumenEditor/Resources/editor/playerLoc.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/playerLoc.png rename to OngekiFumenEditor/Resources/editor/playerLoc.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/mu3_nt_tap_02.png b/OngekiFumenEditor/Resources/editor/redTap.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/mu3_nt_tap_02.png rename to OngekiFumenEditor/Resources/editor/redTap.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/sqrt_bullet.png b/OngekiFumenEditor/Resources/editor/sqrt_bullet.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/sqrt_bullet.png rename to OngekiFumenEditor/Resources/editor/sqrt_bullet.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/tapCritical.png b/OngekiFumenEditor/Resources/editor/tapCritical.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/tapCritical.png rename to OngekiFumenEditor/Resources/editor/tapCritical.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/tri_bullet.png b/OngekiFumenEditor/Resources/editor/tri_bullet.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/tri_bullet.png rename to OngekiFumenEditor/Resources/editor/tri_bullet.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/mu3_nt_extap_01.png b/OngekiFumenEditor/Resources/editor/unsetTap.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/mu3_nt_extap_01.png rename to OngekiFumenEditor/Resources/editor/unsetTap.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/WE.png b/OngekiFumenEditor/Resources/editor/wallEnd.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/WE.png rename to OngekiFumenEditor/Resources/editor/wallEnd.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/WN.png b/OngekiFumenEditor/Resources/editor/wallNext.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/WN.png rename to OngekiFumenEditor/Resources/editor/wallNext.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/WS.png b/OngekiFumenEditor/Resources/editor/wallStart.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/WS.png rename to OngekiFumenEditor/Resources/editor/wallStart.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/walltap.png b/OngekiFumenEditor/Resources/editor/wallTap.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/walltap.png rename to OngekiFumenEditor/Resources/editor/wallTap.png diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/walltap_Eff.png b/OngekiFumenEditor/Resources/editor/wallTapEffect.png similarity index 100% rename from OngekiFumenEditor/Modules/FumenVisualEditor/Views/OngekiObjects/walltap_Eff.png rename to OngekiFumenEditor/Resources/editor/wallTapEffect.png diff --git a/OngekiFumenEditor/Utils/ResourceUtils.cs b/OngekiFumenEditor/Utils/ResourceUtils.cs index 77ed51bc..8ae00629 100644 --- a/OngekiFumenEditor/Utils/ResourceUtils.cs +++ b/OngekiFumenEditor/Utils/ResourceUtils.cs @@ -1,25 +1,81 @@ +using OngekiFumenEditor.Base.OngekiObjects; using System; using System.Drawing; using System.IO; +using System.Numerics; +using System.Runtime.InteropServices; +using System.Text; using Texture = OngekiFumenEditor.Kernel.Graphics.Base.Texture; namespace OngekiFumenEditor.Utils { - public static class ResourceUtils - { - public static Stream OpenReadFromLocalAssemblyResourcesFolder(string resourceName) => typeof(ResourceUtils).Assembly.GetManifestResourceStream("OngekiFumenEditor.Resources." + resourceName); - - public static Stream OpenReadResourceStream(string relativeUrl) - { - var info = System.Windows.Application.GetResourceStream(new Uri(relativeUrl, UriKind.Relative)); - return info.Stream; - } - - public static Texture OpenReadTextureFromResource(string relativeUrl) - { - using var stream = OpenReadResourceStream(relativeUrl); - using var bitmap = Image.FromStream(stream) as Bitmap; - return new Texture(bitmap); - } - } + public static class ResourceUtils + { + public static Stream OpenReadFromLocalAssemblyResourcesFolder(string resourceName) + => typeof(ResourceUtils).Assembly.GetManifestResourceStream("OngekiFumenEditor.Resources." + resourceName); + + public static Stream OpenReadResourceStream(string relativeUrl) + { + var info = System.Windows.Application.GetResourceStream(new Uri(relativeUrl, UriKind.Relative)); + return info.Stream; + } + + public static Texture OpenReadTextureFromResource(string relativeUrl) + { + using var stream = OpenReadResourceStream(relativeUrl); + using var bitmap = Image.FromStream(stream) as Bitmap; + return new Texture(bitmap); + } + + public static Texture OpenReadTextureFromFile(string path) + { + using var stream = File.OpenRead(path); + using var bitmap = Image.FromStream(stream) as Bitmap; + return new Texture(bitmap); + } + + [DllImport("kernel32", CharSet = CharSet.Auto)] + private static extern int GetPrivateProfileString( + string section, string key, string defaultValue, + StringBuilder retVal, int size, string filePath); + + public static string ReadIniConfig(string filePath, string section, string key) + { + var result = new StringBuilder(255); + + try + { + GetPrivateProfileString(section, key, string.Empty, result, 255, filePath); + return result.ToString(); + } + catch (Exception e) + { + Log.LogError($"Read .ini file {filePath} failed: {e.Message}"); + return default; + } + } + + public static bool OpenReadTextureSizeOriginByConfigFile(string iniFilePath, string textureName, out Vector2 size, out Vector2 origin) + { + size = default; + origin = default; + + try + { + var str = ReadIniConfig(iniFilePath, "TextureSizeOrigin", textureName + "Size"); + var split = str.Split(','); + size = new(float.Parse(split[0]), float.Parse(split[1])); + + str = ReadIniConfig(iniFilePath, "TextureSizeOrigin", textureName + "Origin"); + split = str.Split(','); + origin = new(float.Parse(split[0]), float.Parse(split[1])); + return true; + } + catch (Exception e) + { + //todo log + return false; + } + } + } }