public static Checkbox slowerArpeggiations = null; //la asigno en el initialize, así me aseguro de que para ese momento va a haber cargado lo necesario. La hago public porque quiero que el ChordVoicing pueda acceder a ella, para determinar la velocidad a la que hacer los arpegios. public static void Initialize() { //creo los bangs, asocio los delegates a las funciones correspondientes, y luego los agrego al diccionario (podría agregarlos al diccionario y luego asociar sus delegates, pero eso creo que sería menos eficiente, porque buscar al bang correspondiente adentro de un diccionario lleva más tiempo que accederlo directamente, me parece) Bang currentBang = null; //voy a usar una variable llamada "currentBang" como carretilla, para ir referenciando a los bangs que creo, asignándoles una función a su delegate, y agregándolos al diccionario. currentBang = new Bang(new Vector2(LayoutManager.marginLeft, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 2), "Randomize Chord", (int)BangCategory.Chord, true, Keys.Left); currentBang.BangClickedWithLeftButton += OnRandomizeBangClickedWithLeftButton; chordPlaying.Add(DictionaryKeyForRandomize, currentBang); //una vez que agregué ese bang al diccionario, voy a acceder a él por medio del diccionario, así que paso a usar la variable "currentBang" para hacer lo mismo con los otros bangs. currentBang = new Bang(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 2), "Repeat Chord", (int)BangCategory.Chord, false, Keys.Right); currentBang.BangClickedWithLeftButton += OnRepeatBangClickedWithLeftButton; chordPlaying.Add(DictionaryKeyForRepeat, currentBang); currentBang = new Bang(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation * 2, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 2), "Repeat as Arpeggio", (int)BangCategory.Chord, false, Keys.Up); currentBang.BangClickedWithLeftButton += OnArpeggiateBangClickedWithLeftButton; chordPlaying.Add(DictionaryKeyForArpeggiate, currentBang); slowerArpeggiations = new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation * 3, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 2), "Slower Arpeggiations", (int)CheckboxCategory.Option, true, false, Keys.OemMinus, Keys.Subtract); slowerArpeggiations.CheckboxClickedWithLeftButton += OnSlowerArpeggiationsCheckboxClickedWithLeftButton; }
} = 0; //variable donde almaceno el número correspondiente a la inversión de acorde que tenga seleccionada el jugador (por defecto la primera) public static void Initialize() { for (int i = 0; i < ChordVoicing.isTypeEnabled.Length; i++) { ChordVoicing.isTypeEnabled[i] = true; //por ahora comienzo la instancia del acorde con todos los tipos de acorde habilitados } for (int i = 0; i < ChordVoicing.isInversionEnabled.Length; i++) { ChordVoicing.isInversionEnabled[i] = true; //por ahora voy a mantener siempre todas las inversiones habilitadas, porque funcionan de forma demasiado particular dependiendo del tipo de acorde, y hasta que desarrolle un buen sistema para implementarlas dan para problemas. Lo que sí podría hacer tal vez sin demasiado trabajo es que al seleccionar un tipo de acorde se muestren en rojo las inversiones que no aplican; HACER ESTO, Y TRABAJAR EL DESHABILITADO DE INVERSIONES DE FORMA PURAMENTE ESTÉTICA (QUE SE MUESTREN EN ROJO LAS QUE NO APLICAN), NO DESACTIVAR VERDADERAMENTE LAS INVERSIONES DE LA CLASS "CHORD" (INCLUSO DESHABILITAR ESA POSIBILIDAD, Y ELIMINAR LA VARIABLE "isInversionEnabled", PORQUE SINO ME PARECE QUE SE PODRÍAN DAR PROBLEMAS. } //OBS.: Las tríadas aumentadas y tétradas disminuidas ignoran los settings de Inversions habilitadas, siempre se consideran en root position. Y los acordes con 9na y los sus siempre los hago en estado fundamental (aunque estos sí a lo mejor podrían tener inversiones), al menos por ahora. _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 5), $"{Dictionaries.chordType[0]}", (int)CheckboxCategory.ChordType, true, true)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 6), $"{Dictionaries.chordType[1]}", (int)CheckboxCategory.ChordType, true, false)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 7), $"{Dictionaries.chordType[2]}", (int)CheckboxCategory.ChordType, true, false)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 8), $"{Dictionaries.chordType[3]}", (int)CheckboxCategory.ChordType, true, false)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 5), $"{Dictionaries.chordType[4]}", (int)CheckboxCategory.ChordType, true, false)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 6), $"{Dictionaries.chordType[5]}", (int)CheckboxCategory.ChordType, true, false)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 7), $"{Dictionaries.chordType[6]}", (int)CheckboxCategory.ChordType, true, false)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 8), $"{Dictionaries.chordType[7]}", (int)CheckboxCategory.ChordType, true, false)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 9), $"{Dictionaries.chordType[8]}", (int)CheckboxCategory.ChordType, true, false)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 10), $"{Dictionaries.chordType[9]}", (int)CheckboxCategory.ChordType, true, false)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 11), $"{Dictionaries.chordType[10]}", (int)CheckboxCategory.ChordType, true, false)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation * 2, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 5), $"{Dictionaries.chordType[11]}", (int)CheckboxCategory.ChordType, true, false)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation * 2, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 6), $"{Dictionaries.chordType[12]}", (int)CheckboxCategory.ChordType, true, false)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation * 2, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 7), $"{Dictionaries.chordType[13]}", (int)CheckboxCategory.ChordType, true, false)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation * 2, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 8), $"{Dictionaries.chordType[14]}", (int)CheckboxCategory.ChordType, true, false)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation * 2, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 9), $"{Dictionaries.chordType[15]}", (int)CheckboxCategory.ChordType, true, false)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation * 2, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 10), $"{Dictionaries.chordType[16]}", (int)CheckboxCategory.ChordType, true, false)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation * 2, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 11), $"{Dictionaries.chordType[17]}", (int)CheckboxCategory.ChordType, true, false)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation * 3, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 5), $"{Dictionaries.chordType[18]}", (int)CheckboxCategory.ChordType, true, false)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation * 3, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 6), $"{Dictionaries.chordType[19]}", (int)CheckboxCategory.ChordType, true, false)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation * 3, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 7), $"{Dictionaries.chordType[20]}", (int)CheckboxCategory.ChordType, true, false)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation * 3, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 8), $"{Dictionaries.chordType[21]}", (int)CheckboxCategory.ChordType, true, false)); _chordType.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation * 3, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 9), $"{Dictionaries.chordType[22]}", (int)CheckboxCategory.ChordType, true, false)); _chordInversion.Add(new Checkbox(new Vector2(LayoutManager.marginLeft, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 15), $"{Dictionaries.chordInversion[0]}", (int)CheckboxCategory.ChordInversion, true, true)); _chordInversion.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 15), $"{Dictionaries.chordInversion[1]}", (int)CheckboxCategory.ChordInversion, true, false)); _chordInversion.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation * 2, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 15), $"{Dictionaries.chordInversion[2]}", (int)CheckboxCategory.ChordInversion, true, false)); _chordInversion.Add(new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation * 3, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 15), $"{Dictionaries.chordInversion[3]}", (int)CheckboxCategory.ChordInversion, true, false)); _onlyRootPosition = new Checkbox(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation * 3, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 18), "Only Root Position", (int)CheckboxCategory.Option, true, false, Keys.D0, Keys.NumPad0); //asocio los delegates de los Checkboxes con las funciones correspondientes for (int checkboxIndexInTypeList = 0; checkboxIndexInTypeList < _chordType.Count; checkboxIndexInTypeList++) { _chordType[checkboxIndexInTypeList].CheckboxClickedWithLeftButton += GetOnChordTypeCheckboxClickedWithLeftButton(checkboxIndexInTypeList); //ver comentario de asignación anterior, hago más o menos lo mismo. _chordType[checkboxIndexInTypeList].CheckboxClickedWithRightButton += GetOnChordTypeCheckboxClickedWithRightButton(checkboxIndexInTypeList); //al delegate "CheckboxClickedRight" de cada uno de los checkboxes de la lista "chordType" le asigno lo que devuelva la función "GetOnChordTypeCheckboxClickedWithRightButton(checkboxIndexInTypeList)", siendo checkboxIndexInTypeList el número de la checkbox en la lista (que se corresponde con el número de chordType de acorde) (va a devolver un una lambda expression que use ese checkboxIndexInTypeList) } for (int checkboxIndexInInversionList = 0; checkboxIndexInInversionList < _chordInversion.Count; checkboxIndexInInversionList++) { _chordInversion[checkboxIndexInInversionList].CheckboxClickedWithLeftButton += GetOnChordInversionCheckboxClickedWithLeftButton(checkboxIndexInInversionList); //ver comentario de asignación anterior, hago más o menos lo mismo. } _onlyRootPosition.CheckboxClickedWithLeftButton += OnOnlyRootPositionCheckboxClickedWithLeftButton; //creo los bangs, asocio los delegates a las funciones correspondientes, y luego los agrego al diccionario (podría agregarlos al diccionario y luego asociar sus delegates, pero eso creo que sería menos eficiente, porque buscar al bang correspondiente adentro de un diccionario lleva más tiempo que accederlo directamente, me parece) Bang currentBang = null; //voy a usar una variable llamada "currentBang" como carretilla, para ir referenciando a los bangs que creo, asignándoles una función a su delegate, y agregándolos al diccionario. currentBang = new Bang(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 12), "Basic", (int)BangCategory.Chord, true, Keys.D1, Keys.NumPad1); currentBang.BangClickedWithLeftButton += OnChordTypePresets1BangClickedWithLeftButton; _chordTypePresets.Add(1, currentBang); //una vez que agregué ese bang al diccionario, voy a acceder a él por medio del diccionario, así que paso a usar la variable "currentBang" para hacer lo mismo con los otros bangs. currentBang = new Bang(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation * 2, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 12), "Advanced", (int)BangCategory.Chord, true, Keys.D2, Keys.NumPad2); currentBang.BangClickedWithLeftButton += OnChordTypePresets2BangClickedWithLeftButton; _chordTypePresets.Add(2, currentBang); currentBang = new Bang(new Vector2(LayoutManager.marginLeft + LayoutManager.gridColumnSeparation * 3, LayoutManager.marginTop + LayoutManager.gridRowSeparation * 12), "Expert", (int)BangCategory.Chord, true, Keys.D3, Keys.NumPad3); currentBang.BangClickedWithLeftButton += OnChordTypePresets3BangClickedWithLeftButton; _chordTypePresets.Add(3, currentBang); }