@@ -75,6 +75,7 @@ public SettingsPanel(WindowManager windowManager) : base(windowManager)
7575 }
7676
7777 private XNADropDown ddRenderScale ;
78+ private XNADropDown ddTargetFPS ;
7879 private XNACheckBox chkBorderless ;
7980 private XNADropDown ddTheme ;
8081 private XNADropDown ddScrollRate ;
@@ -129,11 +130,28 @@ public override void Initialize()
129130 }
130131 }
131132
133+ var lblTargetFPS = new XNALabel ( WindowManager ) ;
134+ lblTargetFPS . Name = nameof ( lblTargetFPS ) ;
135+ lblTargetFPS . Text = "Target FPS:" ;
136+ lblTargetFPS . X = Constants . UIEmptySideSpace ;
137+ lblTargetFPS . Y = ddRenderScale . Bottom + Constants . UIEmptyTopSpace + 1 ;
138+ AddChild ( lblTargetFPS ) ;
139+
140+ ddTargetFPS = new XNADropDown ( WindowManager ) ;
141+ ddTargetFPS . Name = nameof ( ddTargetFPS ) ;
142+ ddTargetFPS . X = ddRenderScale . X ;
143+ ddTargetFPS . Y = lblTargetFPS . Y - 1 ;
144+ ddTargetFPS . Width = ddRenderScale . Width ;
145+ AddChild ( ddTargetFPS ) ;
146+ var targetFramerates = new int [ ] { 1000 , 480 , 240 , 144 , 120 , 90 , 75 , 60 , 30 , 20 } ;
147+ foreach ( int frameRate in targetFramerates )
148+ ddTargetFPS . AddItem ( new XNADropDownItem ( ) { Text = frameRate . ToString ( CultureInfo . InvariantCulture ) , Tag = frameRate } ) ;
149+
132150 var lblTheme = new XNALabel ( WindowManager ) ;
133151 lblTheme . Name = nameof ( lblTheme ) ;
134152 lblTheme . Text = "Theme:" ;
135153 lblTheme . X = lblRenderScale . X ;
136- lblTheme . Y = ddRenderScale . Bottom + Constants . UIEmptyTopSpace ;
154+ lblTheme . Y = ddTargetFPS . Bottom + Constants . UIEmptyTopSpace ;
137155 AddChild ( lblTheme ) ;
138156
139157 ddTheme = new XNADropDown ( WindowManager ) ;
@@ -218,6 +236,7 @@ private void LoadSettings()
218236 var userSettings = UserSettings . Instance ;
219237
220238 ddRenderScale . SelectedIndex = ddRenderScale . Items . FindIndex ( i => ( double ) i . Tag == userSettings . RenderScale . GetValue ( ) ) ;
239+ ddTargetFPS . SelectedIndex = ddTargetFPS . Items . FindIndex ( item => ( int ) item . Tag == userSettings . TargetFPS . GetValue ( ) ) ;
221240
222241 int selectedTheme = ddTheme . Items . FindIndex ( i => i . Text == userSettings . Theme ) ;
223242 if ( selectedTheme == - 1 )
@@ -249,8 +268,12 @@ public void ApplySettings()
249268 userSettings . FullscreenWindowed . UserDefinedValue = chkBorderless . Checked ;
250269
251270 if ( ddRenderScale . SelectedItem != null )
252- {
253271 userSettings . RenderScale . UserDefinedValue = ( double ) ddRenderScale . SelectedItem . Tag ;
272+
273+ if ( ddTargetFPS . SelectedItem != null )
274+ {
275+ userSettings . TargetFPS . UserDefinedValue = ( int ) ddTargetFPS . SelectedItem . Tag ;
276+ WindowManager . Game . TargetElapsedTime = TimeSpan . FromMilliseconds ( 1000.0 / UserSettings . Instance . TargetFPS ) ;
254277 }
255278
256279 userSettings . TextEditorPath . UserDefinedValue = tbTextEditorPath . Text ;
0 commit comments