From fd0f73e455657d77b8091deacac144f5693b4e84 Mon Sep 17 00:00:00 2001 From: MikiraSora Date: Thu, 10 Oct 2024 01:28:44 +0800 Subject: [PATCH] implement BulletSize.Large --- .../BulletBell/BellDrawingTarget.cs | 90 ++++---- .../BulletBell/BulletDrawingTarget.cs | 208 ++++++++++-------- 2 files changed, 161 insertions(+), 137 deletions(-) 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 6d950ca5..c184e715 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/BulletBell/BellDrawingTarget.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/BulletBell/BellDrawingTarget.cs @@ -13,46 +13,52 @@ namespace OngekiFumenEditor.Modules.FumenVisualEditor.Graphics.Drawing.TargetImpl.OngekiObjects.BulletBell { - [Export(typeof(IFumenEditorDrawingTarget))] - public class BellDrawingTarget : BulletPalleteReferencableBatchDrawTargetBase - { - private readonly Texture texture; - private readonly Vector2 size; - - 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); - } - - texture = LoadTex("bell.png"); - size = new Vector2(40, 40); - normalDrawList[texture] = new(); - selectedDrawList[texture] = new(); - } - - public override IEnumerable DrawTargetID { get; } = new[] { "BEL" }; - public override int DefaultRenderOrder => 1000; - - public override void DrawVisibleObject_DesignMode(IFumenEditorDrawingContext target, Bell obj, Vector2 pos, float rotate) - { - var offsetPos = pos; - normalDrawList[texture].Add((size, offsetPos, 0)); - if (obj.IsSelected) - selectedDrawList[texture].Add((size * 1.3f, offsetPos, 0)); - drawStrList.Add((offsetPos, obj)); - target.RegisterSelectableObject(obj, offsetPos, size); - } - - public override void DrawVisibleObject_PreviewMode(IFumenEditorDrawingContext target, Bell obj, Vector2 pos, float rotate) - { - var offsetPos = pos; - normalDrawList[texture].Add((size, offsetPos, 0)); - if (obj.IsSelected) - selectedDrawList[texture].Add((size * 1.3f, offsetPos, 0)); - } - } + [Export(typeof(IFumenEditorDrawingTarget))] + public class BellDrawingTarget : BulletPalleteReferencableBatchDrawTargetBase + { + private readonly Texture texture; + private readonly Vector2 sizeNormal; + private readonly Vector2 sizeLarge; + + 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); + } + + texture = LoadTex("bell.png"); + sizeNormal = new Vector2(40, 40); + sizeLarge = sizeNormal * 1.4f; + normalDrawList[texture] = new(); + selectedDrawList[texture] = new(); + } + + public override IEnumerable DrawTargetID { get; } = new[] { "BEL" }; + public override int DefaultRenderOrder => 1000; + + public override void DrawVisibleObject_DesignMode(IFumenEditorDrawingContext target, Bell obj, Vector2 pos, float rotate) + { + var size = obj.ReferenceBulletPallete?.SizeValue is BulletSize.Large ? sizeLarge : sizeNormal; + var offsetPos = pos; + + normalDrawList[texture].Add((size, offsetPos, 0)); + if (obj.IsSelected) + selectedDrawList[texture].Add((size * 1.3f, offsetPos, 0)); + drawStrList.Add((offsetPos, obj)); + target.RegisterSelectableObject(obj, offsetPos, size); + } + + public override void DrawVisibleObject_PreviewMode(IFumenEditorDrawingContext target, Bell obj, Vector2 pos, float rotate) + { + var size = obj.ReferenceBulletPallete?.SizeValue is BulletSize.Large ? sizeLarge : sizeNormal; + var offsetPos = pos; + + normalDrawList[texture].Add((size, offsetPos, 0)); + if (obj.IsSelected) + selectedDrawList[texture].Add((size * 1.3f, offsetPos, 0)); + } + } } 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 cae80c6e..d418a0b4 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/BulletBell/BulletDrawingTarget.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/BulletBell/BulletDrawingTarget.cs @@ -15,99 +15,117 @@ namespace OngekiFumenEditor.Modules.FumenVisualEditor.Graphics.Drawing.TargetImpl.OngekiObjects.BulletBell { - [Export(typeof(IFumenEditorDrawingTarget))] - public class BulletDrawingTarget : BulletPalleteReferencableBatchDrawTargetBase - { - private IDictionary spritesSize; - private IDictionary spritesOriginOffset; - private IDictionary> spritesMap; - - 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); - } - - var _spritesOriginOffset = new Dictionary(); - var _spritesSize = new Dictionary(); - var _spritesMap = new Dictionary>(); - - void SetTexture(BulletDamageType k1, BulletType k2, string rPath, Vector2 size, Vector2 origOffset) - { - if (!_spritesMap.TryGetValue(k1, out var dic)) - { - dic = new Dictionary(); - _spritesMap[k1] = dic; - } - - var tex = LoadTex(rPath); - dic[k2] = tex; - normalDrawList[tex] = new(); - selectedDrawList[tex] = new(); - - _spritesSize[tex] = size; - _spritesOriginOffset[tex] = origOffset; - } - - var size = new Vector2(40, 40); - var origOffset = new Vector2(0, 0); - SetTexture(BulletDamageType.Normal, BulletType.Circle, "nt_mine_red.png", size, origOffset); - SetTexture(BulletDamageType.Hard, BulletType.Circle, "nt_mine_pur.png", size, origOffset); - SetTexture(BulletDamageType.Danger, BulletType.Circle, "nt_mine_blk.png", size, origOffset); - - size = new(30, 80); - origOffset = new Vector2(0, 35); - SetTexture(BulletDamageType.Normal, BulletType.Needle, "tri_bullet0.png", size, origOffset); - SetTexture(BulletDamageType.Hard, BulletType.Needle, "tri_bullet1.png", size, origOffset); - SetTexture(BulletDamageType.Danger, BulletType.Needle, "tri_bullet2.png", size, origOffset); - - size = new(30, 80); - origOffset = new Vector2(0, 35); - SetTexture(BulletDamageType.Normal, BulletType.Square, "sqrt_bullet0.png", size, origOffset); - SetTexture(BulletDamageType.Hard, BulletType.Square, "sqrt_bullet1.png", size, origOffset); - SetTexture(BulletDamageType.Danger, BulletType.Square, "sqrt_bullet2.png", size, origOffset); - - spritesMap = _spritesMap.ToImmutableDictionary(); - spritesSize = _spritesSize.ToImmutableDictionary(); - spritesOriginOffset = _spritesOriginOffset.ToImmutableDictionary(); - } - - public override IEnumerable DrawTargetID { get; } = new[] { "BLT" }; - public override int DefaultRenderOrder => 1500; - - public override void DrawVisibleObject_DesignMode(IFumenEditorDrawingContext target, Bullet obj, Vector2 pos, float rotate) - { - var damageType = obj.BulletDamageTypeValue; - var bulletType = obj.ReferenceBulletPallete.TypeValue; - - var texture = spritesMap[damageType][bulletType]; - var size = spritesSize[texture]; - var origOffset = spritesOriginOffset[texture]; - - var offsetPos = pos + origOffset; - normalDrawList[texture].Add((size, offsetPos, 0)); - if (obj.IsSelected) - selectedDrawList[texture].Add((size * 1.3f, offsetPos, 0)); - drawStrList.Add((offsetPos, obj)); - target.RegisterSelectableObject(obj, offsetPos, size); - } - - public override void DrawVisibleObject_PreviewMode(IFumenEditorDrawingContext target, Bullet obj, Vector2 pos, float rotate) - { - var damageType = obj.BulletDamageTypeValue; - var bulletType = obj.ReferenceBulletPallete.TypeValue; - - var texture = spritesMap[damageType][bulletType]; - var size = spritesSize[texture]; - var origOffset = spritesOriginOffset[texture]; - - var offsetPos = pos + origOffset; - normalDrawList[texture].Add((size, offsetPos, rotate)); - if (obj.IsSelected) - selectedDrawList[texture].Add((size * 1.3f, offsetPos, rotate)); - } - } + [Export(typeof(IFumenEditorDrawingTarget))] + public class BulletDrawingTarget : BulletPalleteReferencableBatchDrawTargetBase + { + private IDictionary spritesSize; + private IDictionary spritesOriginOffset; + private IDictionary spritesSizeLarge; + private IDictionary spritesOriginOffsetLarge; + private IDictionary> spritesMap; + + 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); + } + + var _spritesOriginOffset = new Dictionary(); + var _spritesSize = new Dictionary(); + var _spritesOriginOffsetLarge = new Dictionary(); + var _spritesSizeLarge = new Dictionary(); + var _spritesMap = new Dictionary>(); + + void SetTexture(BulletDamageType k1, BulletType k2, string rPath, Vector2 size, Vector2 origOffset, Vector2 sizeLarge, Vector2 origOffsetLarge) + { + if (!_spritesMap.TryGetValue(k1, out var dic)) + { + dic = new Dictionary(); + _spritesMap[k1] = dic; + } + + var tex = LoadTex(rPath); + dic[k2] = tex; + normalDrawList[tex] = new(); + selectedDrawList[tex] = new(); + + _spritesSize[tex] = size; + _spritesOriginOffset[tex] = origOffset; + _spritesSizeLarge[tex] = sizeLarge; + _spritesOriginOffsetLarge[tex] = origOffsetLarge; + } + + var size = new Vector2(40, 40); + 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); + + 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); + + 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); + + spritesMap = _spritesMap.ToImmutableDictionary(); + spritesSize = _spritesSize.ToImmutableDictionary(); + spritesOriginOffset = _spritesOriginOffset.ToImmutableDictionary(); + spritesSizeLarge = _spritesSizeLarge.ToImmutableDictionary(); + spritesOriginOffsetLarge = _spritesOriginOffsetLarge.ToImmutableDictionary(); + } + + public override IEnumerable DrawTargetID { get; } = new[] { "BLT" }; + public override int DefaultRenderOrder => 1500; + + public override void DrawVisibleObject_DesignMode(IFumenEditorDrawingContext target, Bullet obj, Vector2 pos, float rotate) + { + var damageType = obj.BulletDamageTypeValue; + var bulletType = obj.ReferenceBulletPallete.TypeValue; + + var texture = spritesMap[damageType][bulletType]; + + var isLarge = obj.ReferenceBulletPallete.SizeValue == BulletSize.Large; + var size = (isLarge ? spritesSizeLarge : spritesSize)[texture]; + var origOffset = (isLarge ? spritesOriginOffsetLarge : spritesOriginOffset)[texture]; + + var offsetPos = pos + origOffset; + normalDrawList[texture].Add((size, offsetPos, 0)); + if (obj.IsSelected) + selectedDrawList[texture].Add((size * 1.3f, offsetPos, 0)); + drawStrList.Add((offsetPos, obj)); + target.RegisterSelectableObject(obj, offsetPos, size); + } + + public override void DrawVisibleObject_PreviewMode(IFumenEditorDrawingContext target, Bullet obj, Vector2 pos, float rotate) + { + var damageType = obj.BulletDamageTypeValue; + var bulletType = obj.ReferenceBulletPallete.TypeValue; + + var texture = spritesMap[damageType][bulletType]; + + var isLarge = obj.ReferenceBulletPallete.SizeValue == BulletSize.Large; + var size = (isLarge ? spritesSizeLarge : spritesSize)[texture]; + var origOffset = (isLarge ? spritesOriginOffsetLarge : spritesOriginOffset)[texture]; + + var offsetPos = pos + origOffset; + normalDrawList[texture].Add((size, offsetPos, rotate)); + if (obj.IsSelected) + selectedDrawList[texture].Add((size * 1.3f, offsetPos, rotate)); + } + } }