using MoonSharp.Interpreter;
using osu.Game.Rulesets.Mania.Objects;
using osu.Game.Rulesets.Mania.UI;
namespace osu.Game.Rulesets.Mania.Skinning.Scripting
{
///
/// Provides mania-specific extensions for skin scripts.
///
[MoonSharpUserData]
public class ManiaSkinScriptExtensions
{
private readonly ManiaAction[] columnBindings;
private readonly StageDefinition stageDefinition;
///
/// Initializes a new instance of the class.
///
/// The stage this extension is for.
public ManiaSkinScriptExtensions(Stage stage)
{
stageDefinition = stage.Definition;
// Store column bindings
columnBindings = new ManiaAction[stageDefinition.Columns];
for (int i = 0; i < stageDefinition.Columns; i++)
{
columnBindings[i] = stageDefinition.GetActionForColumn(i);
}
}
///
/// Gets the number of columns in the stage.
///
/// The number of columns.
[MoonSharpVisible(true)]
public int GetColumnCount()
{
return stageDefinition.Columns;
}
///
/// Gets the column index for a specific note.
///
/// The note.
/// The column index.
[MoonSharpVisible(true)]
public int GetNoteColumn(Note note)
{
return note.Column;
}
///
/// Gets the binding (action) for a specific column.
///
/// The column index.
/// The binding action as a string.
[MoonSharpVisible(true)]
public string GetColumnBinding(int column)
{
if (column < 0 || column >= columnBindings.Length)
return "Invalid";
return columnBindings[column].ToString();
}
///
/// Gets the width of a specific column.
///
/// The column index.
/// The column width.
[MoonSharpVisible(true)]
public float GetColumnWidth(int column)
{
if (column < 0 || column >= stageDefinition.Columns)
return 0;
return stageDefinition.ColumnWidths[column];
}
}
}