Files
WacK/Scripts/Things/TunnelObjects/THNotePlay.cs
T

74 lines
1.6 KiB
C#
Raw Normal View History

2023-09-16 00:40:36 -07:00
using Godot;
using WacK.Data.Chart;
namespace WacK.Things.TunnelObjects
{
public partial class THNotePlay : Control
{
2023-09-29 17:58:32 -07:00
[Export]
private NinePatchRect noteBase;
2023-09-16 00:40:36 -07:00
public NotePlay noteData;
public void Init(NotePlay noteData)
2023-09-16 00:40:36 -07:00
{
this.noteData = noteData;
2023-10-09 01:22:41 -07:00
SetPosSize((int)noteData.pos, (int)noteData.size);
// handle swipe arrow color
if (noteData.type == NotePlayType.SwipeCW)
{
var n = (SwipeArrow) FindChild("SwipeArrow");
n.SetCW(noteData.type == NotePlayType.SwipeCW);
}
2023-09-16 00:40:36 -07:00
}
2023-10-09 01:22:41 -07:00
public void SetPosSize(int pos, int size)
2023-09-16 00:40:36 -07:00
{
float pxPerMinute = Constants.BASE_2D_RESOLUTION / 60;
float posPx = 0;
float sizePx = 0;
if (size <= 59)
{
if (size >= 3)
{
posPx = (pos + 1) * pxPerMinute;
sizePx = (size - 2) * pxPerMinute;
}
else // 2 or smaller
{
posPx = pos * pxPerMinute;
sizePx = size * pxPerMinute;
}
// end-caps
posPx -= 12;
sizePx += 24;
}
else // size is 60 or greater
2023-09-17 23:51:50 -07:00
{
size = 60;
sizePx = Constants.BASE_2D_RESOLUTION;
// remove end-caps
2023-09-29 17:58:32 -07:00
noteBase.RegionRect = new Rect2(12, 0, new Vector2(488, 36));
noteBase.PatchMarginLeft = 0;
noteBase.PatchMarginRight = 0;
2023-09-17 23:51:50 -07:00
}
2023-10-09 01:22:41 -07:00
var nPos = noteBase.Position;
nPos.X = posPx;
noteBase.SetDeferred("position", nPos);
2023-09-16 00:40:36 -07:00
2023-10-09 01:22:41 -07:00
var nSize = noteBase.Size;
nSize.X = sizePx;
noteBase.SetDeferred("size", nSize);
2023-10-09 01:22:41 -07:00
// handle swipe arrow size
if (noteData.type == NotePlayType.SwipeCW || noteData.type == NotePlayType.SwipeCCW)
{
var n = (SwipeArrow) FindChild("SwipeArrow");
n.SetPosSize(pos, size);
}
2023-09-16 00:40:36 -07:00
}
}
}