Skip to content

Commit 02d1754

Browse files
committed
Add target FPS option
1 parent 5941d5b commit 02d1754

File tree

2 files changed

+42
-18
lines changed

2 files changed

+42
-18
lines changed

src/TSMapEditor/UI/MapUI.cs

+17-16
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public interface ICursorActionTarget : IMapView
5959
/// </summary>
6060
public class MapUI : XNAControl, ICursorActionTarget, IMutationTarget
6161
{
62-
private const float RightClickScrollRateDivisor = 64f;
62+
private const float RightClickScrollRateDivisor = 48f;
6363
private const double ZoomStep = 0.1;
6464

6565
private static Color[] MarbleMadnessTileHeightLevelColors = new Color[]
@@ -482,19 +482,6 @@ public override void OnMouseOnControl()
482482
}
483483
}
484484

485-
if (isRightClickScrolling)
486-
{
487-
if (Cursor.RightDown)
488-
{
489-
var newCursorPosition = GetCursorPoint();
490-
var result = newCursorPosition - rightClickScrollInitPos;
491-
float rightClickScrollRate = (float)((scrollRate / RightClickScrollRateDivisor) / Camera.ZoomLevel);
492-
493-
Camera.FloatTopLeftPoint = new Vector2(Camera.FloatTopLeftPoint.X + result.X * rightClickScrollRate,
494-
Camera.FloatTopLeftPoint.Y + result.Y * rightClickScrollRate);
495-
}
496-
}
497-
498485
pressedDownPoint = GetCursorPoint();
499486

500487
base.OnMouseOnControl();
@@ -619,9 +606,23 @@ public override void Update(GameTime gameTime)
619606
// 1000 ms (1 second) divided by 60 frames =~ 16.667 ms / frame
620607
int scrollRate = (int)(this.scrollRate * (gameTime.ElapsedGameTime.TotalMilliseconds / 16.667));
621608

622-
if (IsActive && !(WindowManager.SelectedControl is XNATextBox))
609+
if (IsActive)
623610
{
624-
Camera.KeyboardUpdate(Keyboard, scrollRate);
611+
if (!(WindowManager.SelectedControl is XNATextBox))
612+
Camera.KeyboardUpdate(Keyboard, scrollRate);
613+
614+
if (isRightClickScrolling)
615+
{
616+
if (Cursor.RightDown)
617+
{
618+
var newCursorPosition = GetCursorPoint();
619+
var result = newCursorPosition - rightClickScrollInitPos;
620+
float rightClickScrollRate = (float)((scrollRate / RightClickScrollRateDivisor) / Camera.ZoomLevel);
621+
622+
Camera.FloatTopLeftPoint = new Vector2(Camera.FloatTopLeftPoint.X + result.X * rightClickScrollRate,
623+
Camera.FloatTopLeftPoint.Y + result.Y * rightClickScrollRate);
624+
}
625+
}
625626
}
626627

627628
if (leftPressedDownOnControl && !Cursor.LeftDown)

src/TSMapEditor/UI/SettingsPanel.cs

+25-2
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)