@@ -181,13 +181,50 @@ private void additionBankChanged(string bankName, TernaryState state)
181181
182182 public SampleBankTernaryButton [ ] SampleBankTernaryStates { get ; private set ; }
183183
184+ /// <summary>
185+ /// Create the new combo ternary button. Mainly used to customize the displayed icon
186+ /// depending on the ruleset. Can be overriden to return null if a ruleset does not
187+ /// provide combo-supporting HitObjects.
188+ /// </summary>
189+ /// <returns></returns>
190+ [ CanBeNull ]
191+ protected virtual Drawable CreateNewComboButton ( ) => new NewComboTernaryButton
192+ {
193+ Current = NewCombo ,
194+ CreateIcon = ( ) => new Container
195+ {
196+ Children = new Drawable [ ]
197+ {
198+ new SpriteIcon
199+ {
200+ Anchor = Anchor . BottomLeft ,
201+ Origin = Anchor . BottomLeft ,
202+ // This is currently using the osu! hitcircle icon as a default in order
203+ // not to break any custom rulesets that depend on there being a defined
204+ // new combo button.
205+ // Could consider removing it and let rulesets specify their own buttons/icons.
206+ Icon = OsuIcon . EditorHitCircle ,
207+ Size = new Vector2 ( 15 ) ,
208+ } ,
209+ new SpriteIcon
210+ {
211+ Icon = OsuIcon . EditorNewComboSparkles ,
212+ Size = new Vector2 ( 20 ) ,
213+ }
214+ } ,
215+ } ,
216+ } ;
217+
184218 /// <summary>
185219 /// Create all ternary states required to be displayed to the user.
186220 /// </summary>
187221 protected virtual IEnumerable < Drawable > CreateTernaryButtons ( )
188222 {
189223 //TODO: this should only be enabled (visible?) for rulesets that provide combo-supporting HitObjects.
190- yield return new NewComboTernaryButton { Current = NewCombo } ;
224+ var newComboButton = CreateNewComboButton ( ) ;
225+
226+ if ( newComboButton != null )
227+ yield return newComboButton ;
191228
192229 foreach ( var kvp in SelectionHandler . SelectionSampleStates )
193230 {
0 commit comments