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]; } } }