Skip to content

Commit

Permalink
implement BulletSize.Large
Browse files Browse the repository at this point in the history
  • Loading branch information
MikiraSora committed Oct 9, 2024
1 parent 1359017 commit fd0f73e
Show file tree
Hide file tree
Showing 2 changed files with 161 additions and 137 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,46 +13,52 @@

namespace OngekiFumenEditor.Modules.FumenVisualEditor.Graphics.Drawing.TargetImpl.OngekiObjects.BulletBell
{
[Export(typeof(IFumenEditorDrawingTarget))]
public class BellDrawingTarget : BulletPalleteReferencableBatchDrawTargetBase<Bell>
{
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<string> 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<Bell>
{
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<string> 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));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,99 +15,117 @@

namespace OngekiFumenEditor.Modules.FumenVisualEditor.Graphics.Drawing.TargetImpl.OngekiObjects.BulletBell
{
[Export(typeof(IFumenEditorDrawingTarget))]
public class BulletDrawingTarget : BulletPalleteReferencableBatchDrawTargetBase<Bullet>
{
private IDictionary<Texture, Vector2> spritesSize;
private IDictionary<Texture, Vector2> spritesOriginOffset;
private IDictionary<BulletDamageType, Dictionary<BulletType, Texture>> 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<Texture, Vector2>();
var _spritesSize = new Dictionary<Texture, Vector2>();
var _spritesMap = new Dictionary<BulletDamageType, Dictionary<BulletType, Texture>>();

void SetTexture(BulletDamageType k1, BulletType k2, string rPath, Vector2 size, Vector2 origOffset)
{
if (!_spritesMap.TryGetValue(k1, out var dic))
{
dic = new Dictionary<BulletType, Texture>();
_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<string> 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<Bullet>
{
private IDictionary<Texture, Vector2> spritesSize;
private IDictionary<Texture, Vector2> spritesOriginOffset;
private IDictionary<Texture, Vector2> spritesSizeLarge;
private IDictionary<Texture, Vector2> spritesOriginOffsetLarge;
private IDictionary<BulletDamageType, Dictionary<BulletType, Texture>> 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<Texture, Vector2>();
var _spritesSize = new Dictionary<Texture, Vector2>();
var _spritesOriginOffsetLarge = new Dictionary<Texture, Vector2>();
var _spritesSizeLarge = new Dictionary<Texture, Vector2>();
var _spritesMap = new Dictionary<BulletDamageType, Dictionary<BulletType, Texture>>();

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<BulletType, Texture>();
_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<string> 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));
}
}
}

0 comments on commit fd0f73e

Please sign in to comment.