1
0
mirror of synced 2024-11-23 20:10:57 +01:00

working on music order editor

This commit is contained in:
NotImplementedLife 2023-07-28 22:28:05 +03:00
parent e8e6693306
commit 71c7899d58
17 changed files with 701 additions and 5 deletions

149
Controls/MusicOrderViewer.Designer.cs generated Normal file
View File

@ -0,0 +1,149 @@
namespace TaikoSoundEditor.Controls
{
partial class MusicOrderViewer
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.MusicOrdersPanel = new System.Windows.Forms.Panel();
this.RightButton = new System.Windows.Forms.Button();
this.ControlsPanel = new System.Windows.Forms.Panel();
this.PasteButton = new System.Windows.Forms.Button();
this.CutButton = new System.Windows.Forms.Button();
this.PageLabel = new System.Windows.Forms.Label();
this.LeftButton = new System.Windows.Forms.Button();
this.ControlsPanel.SuspendLayout();
this.SuspendLayout();
//
// MusicOrdersPanel
//
this.MusicOrdersPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.MusicOrdersPanel.Location = new System.Drawing.Point(20, 32);
this.MusicOrdersPanel.Name = "MusicOrdersPanel";
this.MusicOrdersPanel.Size = new System.Drawing.Size(467, 265);
this.MusicOrdersPanel.TabIndex = 0;
this.MusicOrdersPanel.Paint += new System.Windows.Forms.PaintEventHandler(this.MusicOrdersPanel_Paint);
this.MusicOrdersPanel.MouseDown += new System.Windows.Forms.MouseEventHandler(this.MusicOrdersPanel_MouseDown);
this.MusicOrdersPanel.MouseLeave += new System.EventHandler(this.MusicOrdersPanel_MouseLeave);
this.MusicOrdersPanel.MouseMove += new System.Windows.Forms.MouseEventHandler(this.MusicOrdersPanel_MouseMove);
this.MusicOrdersPanel.Resize += new System.EventHandler(this.MusicOrdersPanel_Resize);
//
// RightButton
//
this.RightButton.Dock = System.Windows.Forms.DockStyle.Right;
this.RightButton.Location = new System.Drawing.Point(487, 32);
this.RightButton.Name = "RightButton";
this.RightButton.Size = new System.Drawing.Size(20, 265);
this.RightButton.TabIndex = 1;
this.RightButton.Text = ">";
this.RightButton.UseVisualStyleBackColor = true;
this.RightButton.Click += new System.EventHandler(this.RightButton_Click);
//
// ControlsPanel
//
this.ControlsPanel.Controls.Add(this.PasteButton);
this.ControlsPanel.Controls.Add(this.CutButton);
this.ControlsPanel.Controls.Add(this.PageLabel);
this.ControlsPanel.Dock = System.Windows.Forms.DockStyle.Top;
this.ControlsPanel.Location = new System.Drawing.Point(0, 0);
this.ControlsPanel.Name = "ControlsPanel";
this.ControlsPanel.Size = new System.Drawing.Size(507, 32);
this.ControlsPanel.TabIndex = 2;
//
// PasteButton
//
this.PasteButton.BackgroundImage = global::TaikoSoundEditor.Properties.Resources.ic_paste_gs;
this.PasteButton.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
this.PasteButton.FlatAppearance.BorderSize = 0;
this.PasteButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.PasteButton.Location = new System.Drawing.Point(33, 3);
this.PasteButton.Name = "PasteButton";
this.PasteButton.Size = new System.Drawing.Size(24, 24);
this.PasteButton.TabIndex = 2;
this.PasteButton.UseVisualStyleBackColor = true;
this.PasteButton.Click += new System.EventHandler(this.PasteButton_Click);
//
// CutButton
//
this.CutButton.BackgroundImage = global::TaikoSoundEditor.Properties.Resources.ic_cut_gs;
this.CutButton.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
this.CutButton.FlatAppearance.BorderSize = 0;
this.CutButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.CutButton.Location = new System.Drawing.Point(3, 3);
this.CutButton.Name = "CutButton";
this.CutButton.Size = new System.Drawing.Size(24, 24);
this.CutButton.TabIndex = 1;
this.CutButton.UseVisualStyleBackColor = true;
this.CutButton.Click += new System.EventHandler(this.CutButton_Click);
//
// PageLabel
//
this.PageLabel.Anchor = System.Windows.Forms.AnchorStyles.Top;
this.PageLabel.AutoSize = true;
this.PageLabel.Location = new System.Drawing.Point(217, 8);
this.PageLabel.Name = "PageLabel";
this.PageLabel.Size = new System.Drawing.Size(67, 15);
this.PageLabel.TabIndex = 0;
this.PageLabel.Text = "Page # of #";
//
// LeftButton
//
this.LeftButton.Dock = System.Windows.Forms.DockStyle.Left;
this.LeftButton.Location = new System.Drawing.Point(0, 32);
this.LeftButton.Name = "LeftButton";
this.LeftButton.Size = new System.Drawing.Size(20, 265);
this.LeftButton.TabIndex = 3;
this.LeftButton.Text = "<";
this.LeftButton.UseVisualStyleBackColor = true;
this.LeftButton.Click += new System.EventHandler(this.LeftButton_Click);
//
// MusicOrderViewer
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.MusicOrdersPanel);
this.Controls.Add(this.LeftButton);
this.Controls.Add(this.RightButton);
this.Controls.Add(this.ControlsPanel);
this.Name = "MusicOrderViewer";
this.Size = new System.Drawing.Size(507, 297);
this.ControlsPanel.ResumeLayout(false);
this.ControlsPanel.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private Panel MusicOrdersPanel;
private Button RightButton;
private Panel ControlsPanel;
private Button LeftButton;
private Label PageLabel;
private Button CutButton;
private Button PasteButton;
}
}

View File

@ -0,0 +1,347 @@
using System.Diagnostics;
using System.Drawing.Drawing2D;
using TaikoSoundEditor.Data;
using TaikoSoundEditor.Properties;
namespace TaikoSoundEditor.Controls
{
public partial class MusicOrderViewer : UserControl
{
public MusicOrderViewer()
{
InitializeComponent();
typeof(Control).GetProperty("DoubleBuffered", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)
.SetValue(MusicOrdersPanel, true);
}
internal WordList WordList { get; set; }
private List<SongCard> SongCards = new();
public void AddSong(MusicOrder mo)
{
SongCards.Add(new SongCard(WordList, mo));
CurrentPage = CurrentPage;
}
private int _CurrentPage = 0;
public int CurrentPage
{
get => _CurrentPage;
set
{
_CurrentPage = value;
PageLabel.Text = $"Page {_CurrentPage + 1} of {PagesCount}";
MusicOrdersPanel.Invalidate();
LeftButton.Enabled = _CurrentPage > 0;
RightButton.Enabled = _CurrentPage < PagesCount - 1;
}
}
public int PagesCount => (SongCards.Count + ItemsPerPage - 1) / ItemsPerPage;
private int _ItemsPerRow = 4;
private int _ItemsPerCol = 5;
public int ItemsPerRow
{
get => _ItemsPerRow;
set
{
_ItemsPerRow = value;
MusicOrdersPanel.Invalidate();
}
}
public int ItemsPerCol
{
get => _ItemsPerCol;
set
{
_ItemsPerCol = value;
MusicOrdersPanel.Invalidate();
}
}
public int ItemsPerPage => ItemsPerRow * ItemsPerCol;
private static int ItemsPadding = 3;
public void RefreshMusicOrdersPanel(Graphics g)
{
var cards = SongCards.Skip(CurrentPage * ItemsPerPage).Take(ItemsPerPage).ToArray();
int itemW = MusicOrdersPanel.Width / ItemsPerRow - 2 * ItemsPadding;
int itemH = MusicOrdersPanel.Height / ItemsPerCol - 2 * ItemsPadding;
var cursor = MusicOrdersPanel.PointToClient(Cursor.Position);
for (int r = 0; r < ItemsPerCol; r++)
{
for (int c = 0; c < ItemsPerRow; c++)
{
int index = r * ItemsPerRow + c;
var rect = new Rectangle(
c * (itemW + 2 * ItemsPadding) + ItemsPadding,
r * (itemH + 2 * ItemsPadding) + ItemsPadding,
itemW,
itemH);
if (index >= cards.Length)
{
if (index == cards.Length && rect.Contains(cursor) && PasteMode)
{
g.DrawLine(Pens.Black, rect.Left - 2, rect.Top, rect.Left - 2, rect.Top + rect.Height);
}
break;
}
var card = cards[index];
g.FillRectangle(new SolidBrush(card.Color), rect);
if(card.IsSelected)
{
g.DrawRectangle(Pens.Blue, rect.Left - 1, rect.Top - 1, rect.Width + 1, rect.Height + 1);
g.DrawRectangle(Pens.Green, rect.Left - 2, rect.Top - 2, rect.Width + 3, rect.Height + 3);
g.FillRectangle(new SolidBrush(Color.FromArgb(128, Color.White)), rect);
}
if(card.IsCut)
{
g.FillRectangle(new HatchBrush(HatchStyle.ForwardDiagonal, Color.White, card.Color), rect);
}
if (rect.Contains(cursor))
{
if (PasteMode)
{
g.DrawLine(Pens.Black, rect.Left - 2, rect.Top, rect.Left - 2, rect.Top + rect.Height);
}
else
{
g.FillRectangle(new SolidBrush(Color.FromArgb(192, Color.White)), rect);
}
}
var cardInfo = $"{card.Id} ({card.Genre})\n{card.Title}\n{card.Subtitle}";
g.DrawString(cardInfo, Font, Brushes.Black, rect);
}
}
}
private void MusicOrdersPanel_Resize(object sender, EventArgs e)
{
MusicOrdersPanel.Invalidate();
}
private void MusicOrdersPanel_Paint(object sender, PaintEventArgs e)
{
RefreshMusicOrdersPanel(e.Graphics);
}
private void LeftButton_Click(object sender, EventArgs e)
{
if (CurrentPage > 0) CurrentPage--;
}
private void RightButton_Click(object sender, EventArgs e)
{
if (CurrentPage < PagesCount - 1) CurrentPage++;
}
private void MusicOrdersPanel_MouseMove(object sender, MouseEventArgs e)
{
Invalidate();
}
private void MusicOrdersPanel_MouseLeave(object sender, EventArgs e)
{
Invalidate();
}
public HashSet<SongCard> Selection = new();
public HashSet<SongCard> CutSelection = new();
private void MusicOrdersPanel_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left) return;
var cursor = e.Location;
int itemW = MusicOrdersPanel.Width / ItemsPerRow;
int itemH = MusicOrdersPanel.Height / ItemsPerCol;
int row = cursor.Y / itemH;
int col = cursor.X / itemW;
//Debug.WriteLine($"{row} {col}");
if (row < 0 || row >= ItemsPerCol || col < 0 || col >= ItemsPerRow)
return;
var index = CurrentPage * ItemsPerPage + row * ItemsPerRow + col;
if (PasteMode)
{
if (index < 0 || index > SongCards.Count) return;
SongCard before = null, after = null;
for (int i = index; i < SongCards.Count; i++)
if (!SongCards[i].IsCut)
{
before = SongCards[i];
break;
}
for (int i = index - 1; i >= 0; i--)
if (!SongCards[i].IsCut)
{
after = SongCards[i];
break;
}
string message = "Do you want to move the selected songs?";
if (before != null)
{
if (after != null && before != after)
{
message = $"Do you want to move the selected songs before {before.Id} and after {after.Id}?";
}
else
{
message = $"Do you want to move the selected songs before {before.Id}?";
}
}
else if(after != null)
{
message = $"Do you want to move the selected songs after {after.Id}?";
}
if (MessageBox.Show(message, "Move songs?", MessageBoxButtons.YesNo) != DialogResult.Yes)
return;
SongCards.RemoveAll(CutSelection.Contains);
var ix = after != null ? SongCards.IndexOf(after)+1 : before != null ? SongCards.IndexOf(before) : 0;
SongCards.InsertRange(ix, CutSelection);
foreach (var c in CutSelection) c.IsCut = false;
CutSelection.Clear();
PasteMode = false;
PasteActive = false;
CutActive = false;
MusicOrdersPanel.Invalidate();
return;
}
if (index < 0 || index >= SongCards.Count) return;
var card = SongCards[index];
if (Form.ModifierKeys == Keys.Control)
{
if(card.IsSelected)
{
card.IsSelected = false;
Selection.Remove(card);
}
else
{
card.IsSelected = true;
Selection.Add(card);
}
MusicOrdersPanel.Invalidate();
}
else
{
foreach(var sel in Selection)
{
sel.IsSelected = false;
}
Selection.Clear();
card.IsSelected = true;
Selection.Add(card);
MusicOrdersPanel.Invalidate();
}
CutActive = Selection.Count > 0;
}
private bool _CutActive = false;
public bool CutActive
{
get => _CutActive;
set
{
_CutActive = value;
CutButton.BackgroundImage = CutActive ? Resources.ic_cut : Resources.ic_cut_gs;
CutButton.Enabled = CutActive;
}
}
private bool _PasteActive = false;
public bool PasteActive
{
get => _PasteActive;
set
{
_PasteActive = value;
PasteButton.BackgroundImage = PasteActive ? Resources.ic_paste : Resources.ic_paste_gs;
PasteButton.Enabled = PasteActive;
}
}
private void CutButton_Click(object sender, EventArgs e)
{
PasteMode = false;
foreach(var card in CutSelection)
{
card.IsCut = false;
}
CutSelection.Clear();
foreach(var card in Selection)
{
card.IsCut = true;
card.IsSelected = false;
CutSelection.Add(card);
}
Selection.Clear();
PasteActive = CutSelection.Count > 0;
CutActive= Selection.Count > 0;
MusicOrdersPanel.Invalidate();
}
private bool _PasteMode = false;
public bool PasteMode
{
get => _PasteMode;
set
{
_PasteMode = value;
PasteButton.FlatAppearance.BorderSize = _PasteMode ? 1 : 0;
}
}
private void PasteButton_Click(object sender, EventArgs e)
{
PasteMode = !PasteMode;
foreach (var card in Selection)
card.IsSelected = false;
Selection.Clear();
MusicOrdersPanel.Invalidate();
}
}
}

View File

@ -0,0 +1,60 @@
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

30
Controls/SongCard.cs Normal file
View File

@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using TaikoSoundEditor.Data;
using TaikoSoundEditor.Extensions;
using TaikoSoundEditor.Utils;
namespace TaikoSoundEditor.Controls
{
public class SongCard
{
internal WordList WordList { get; }
public MusicOrder MusicOrder { get; }
public string Id => $"{MusicOrder.UniqueId}.{MusicOrder.Id}";
public string Title => WordList.GetBySong(MusicOrder.Id).JapaneseText;
public string Subtitle => WordList.GetBySongSub(MusicOrder.Id).JapaneseText;
public string Genre => MusicOrder.Genre.ToString();
public Color Color => Constants.GenreColors[MusicOrder.GenreNo.Clamp(0, Constants.GenreColors.Length - 1)];
public SongCard(WordList wordList, MusicOrder musicOrder)
{
WordList = wordList;
MusicOrder = musicOrder;
}
public bool IsSelected { get; set; } = false;
public bool IsCut { get; set; } = false;
}
}

View File

@ -7,7 +7,7 @@ using System.Threading.Tasks;
namespace TaikoSoundEditor.Data
{
internal class WordList
public class WordList
{
[JsonPropertyName("items")]
public List<Word> Items { get; set; } = new List<Word>();

View File

@ -0,0 +1,7 @@
namespace TaikoSoundEditor.Extensions
{
internal static class IntExtensions
{
public static int Clamp(this int x, int a, int b) => x <= a ? a : x >= b ? b : x;
}
}

16
MainForm.Designer.cs generated
View File

@ -87,6 +87,7 @@
this.WordsGB = new System.Windows.Forms.GroupBox();
this.WordsGrid = new System.Windows.Forms.PropertyGrid();
this.MusicOrderTab = new System.Windows.Forms.TabPage();
this.MusicOrderViewer = new TaikoSoundEditor.Controls.MusicOrderViewer();
this.RemoveSongButton = new System.Windows.Forms.Button();
this.DatatableSpaces = new System.Windows.Forms.CheckBox();
this.ExportOpenOnFinished = new System.Windows.Forms.CheckBox();
@ -143,6 +144,7 @@
this.WordDetailGB.SuspendLayout();
this.WordSubGB.SuspendLayout();
this.WordsGB.SuspendLayout();
this.MusicOrderTab.SuspendLayout();
this.groupBox8.SuspendLayout();
this.groupBox3.SuspendLayout();
this.tabPage3.SuspendLayout();
@ -789,6 +791,7 @@
//
// MusicOrderTab
//
this.MusicOrderTab.Controls.Add(this.MusicOrderViewer);
this.MusicOrderTab.Location = new System.Drawing.Point(4, 24);
this.MusicOrderTab.Name = "MusicOrderTab";
this.MusicOrderTab.Padding = new System.Windows.Forms.Padding(3);
@ -797,6 +800,17 @@
this.MusicOrderTab.Text = "Music Order";
this.MusicOrderTab.UseVisualStyleBackColor = true;
//
// MusicOrderViewer
//
this.MusicOrderViewer.CurrentPage = 0;
this.MusicOrderViewer.Dock = System.Windows.Forms.DockStyle.Fill;
this.MusicOrderViewer.ItemsPerCol = 5;
this.MusicOrderViewer.ItemsPerRow = 4;
this.MusicOrderViewer.Location = new System.Drawing.Point(3, 3);
this.MusicOrderViewer.Name = "MusicOrderViewer";
this.MusicOrderViewer.Size = new System.Drawing.Size(515, 290);
this.MusicOrderViewer.TabIndex = 0;
//
// RemoveSongButton
//
this.RemoveSongButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
@ -1195,6 +1209,7 @@
this.WordDetailGB.ResumeLayout(false);
this.WordSubGB.ResumeLayout(false);
this.WordsGB.ResumeLayout(false);
this.MusicOrderTab.ResumeLayout(false);
this.groupBox8.ResumeLayout(false);
this.groupBox3.ResumeLayout(false);
this.tabPage3.ResumeLayout(false);
@ -1300,5 +1315,6 @@
private Label label19;
private NumericUpDown SimpleStarUraBox;
private Button LocateInMusicOrderButton;
private Controls.MusicOrderViewer MusicOrderViewer;
}
}

View File

@ -103,9 +103,18 @@ namespace TaikoSoundEditor
Logger.Info($"Setting LoadedMusicBox DataSource");
LoadedMusicBinding = new BindingSource();
LoadedMusicBinding.DataSource = MusicInfos.Items.Where(mi => mi.UniqueId != 0).ToList();
var cleanList = MusicInfos.Items.Where(mi => mi.UniqueId != 0).ToList();
LoadedMusicBinding.DataSource = cleanList;
LoadedMusicBox.DataSource = LoadedMusicBinding;
TabControl.SelectedIndex = 1;
MusicOrderViewer.WordList = WordList;
foreach (var musicOrder in MusicOrders.Items)
{
MusicOrderViewer.AddSong(musicOrder);
}
});
#endregion

View File

@ -18,7 +18,7 @@ namespace TaikoSoundEditor
NewSoundsBox.DataSource = AddedMusicBinding;
TabControl.SelectedIndexChanged += TabControl_SelectedIndexChanged;
SimpleGenreBox.DataSource = Enum.GetValues(typeof(Genre));
SimpleGenreBox.DataSource = Enum.GetValues(typeof(Genre));
}
private void TabControl_SelectedIndexChanged(object sender, EventArgs e)
@ -175,6 +175,11 @@ namespace TaikoSoundEditor
private void SoundViewTab_SelectedIndexChanged(object sender, EventArgs e)
{
if(SoundViewTab.SelectedTab==MusicOrderTab)
{
return;
}
if (!(SoundViewTab.SelectedTab == SoundViewerExpert || SoundViewTab.SelectedTab == SoundViewerSimple))
return;
@ -235,7 +240,6 @@ namespace TaikoSoundEditor
item.MusicInfo.StarUra = (int)SimpleStarUraBox.Value;
return;
}
});
}
}

View File

@ -60,6 +60,46 @@ namespace TaikoSoundEditor.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap ic_cut {
get {
object obj = ResourceManager.GetObject("ic_cut", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap ic_cut_gs {
get {
object obj = ResourceManager.GetObject("ic_cut_gs", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap ic_paste {
get {
object obj = ResourceManager.GetObject("ic_paste", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap ic_paste_gs {
get {
object obj = ResourceManager.GetObject("ic_paste_gs", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Byte[].
/// </summary>

View File

@ -118,6 +118,18 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ic_cut" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ic_cut.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ic_cut_gs" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ic_cut_gs.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ic_paste" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ic_paste.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ic_paste_gs" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ic_paste_gs.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="song_ABCDEF_nus3bank" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\song_ABCDEF_nus3bank.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>

View File

@ -5,4 +5,5 @@ A simple tool to automatize the process of converting music to .nus3bank format
## Credits
- big shoutout to [Nabix](https://github.com/Nabixlol) for reaching me with the idea to create this tool, testing it and
offering careful and insightful guidance through all the conversion steps to someone who has never even heard about this game before :))
offering careful and insightful guidance through all the conversion steps to someone who has never even heard about this game before :))
- https://www.softicons.com/

BIN
Resources/ic_cut.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
Resources/ic_cut_gs.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
Resources/ic_paste.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
Resources/ic_paste_gs.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

21
Utils/Constants.cs Normal file
View File

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
namespace TaikoSoundEditor.Utils
{
internal static class Constants
{
static Random ColorRand = new Random(1236);
public static Color[] Colors = typeof(Color)
.GetProperties(BindingFlags.Static | BindingFlags.Public)
.Where(p => p.PropertyType == typeof(Color)).Select(p => (Color)p.GetValue(null))
.Where(c => c != Color.Transparent)
.OrderBy(_ => ColorRand.Next())
.ToArray();
public static Color[] GenreColors = Colors.Where(c => 0.5 <= c.GetBrightness() && c.GetBrightness() < 0.7 && c.GetSaturation() > 0.5).ToArray();
}
}