private void bindColumnKeys() { int bindingIndex = Math.Min(stageIndex, 1); int columns = PrimaryStageColumns; bool useSpecialColumn = AllowSpecialStyle && SpecialStyle != ManiaSpecialStyle.None; //Use a layout if we have one instead of the default LayoutMania layout = LayoutList.Layout; if (layout != null) { foreach (ColumnMania col in Columns) { col.Key = layout[col]; } if (useSpecialColumn) { Columns[SpecialColumn].AlternateKey = layout[bindingIndex, ManiaLayoutAccess.AlternateKeys]; } return; } int specialOffset = 0; if (useSpecialColumn) { columns--; specialOffset = SpecialColumn == 0 ? 1 : 0; Columns[SpecialColumn].Key = BindingManager.ManiaDefaultSpecialKeys[bindingIndex]; Columns[SpecialColumn].AlternateKey = BindingManager.ManiaDefaultAlternateSpecialKeys[bindingIndex]; } //The leftmost key to start from int key = Math.Max(0, (BindingManager.ManiaMiddleKeys[bindingIndex]) - columns / 2); //If we should skip the binding for the middle key bool skipMiddle = columns % 2 == 0 && columns < 10; for (int i = 0; i < columns; i++) { if (skipMiddle && (key == BindingManager.ManiaMiddleKeys[0] || key == BindingManager.ManiaMiddleKeys[1])) { key++; } Columns[i + specialOffset].Key = BindingManager.ManiaDefaultKeys[key++]; } }
internal void CopyBindingToLayout(LayoutMania layout) { if (layout == null) { return; } foreach (StageMania stage in this) { foreach (ColumnMania col in stage.Columns) { layout[col] = col.Key; } if (stage.AllowSpecialStyle && stage.SpecialStyle != ManiaSpecialStyle.None) { layout[Math.Min(stage.stageIndex, 1), ManiaLayoutAccess.AlternateKeys] = stage.Columns[stage.SpecialColumn].AlternateKey; } } }