1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-15 21:03:08 +08:00

Merge remote-tracking branch 'refs/remotes/ppy/master' into percentage

This commit is contained in:
EVAST9919 2017-05-06 17:33:51 +03:00
commit d06b5783cb
42 changed files with 541 additions and 839 deletions

@ -1 +1 @@
Subproject commit 72525837cf68aa9967cfede6fbe95489ed3b05ec Subproject commit cebdfb1bbb260e5aaca0a01e06d7128b3d1faae4

View File

@ -0,0 +1,70 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.Extensions.IEnumerableExtensions;
using osu.Framework.Input;
using osu.Framework.Testing;
using osu.Framework.Graphics;
using osu.Game.Rulesets.Mania.UI;
using System.Linq;
using System;
namespace osu.Desktop.VisualTests.Tests
{
internal class TestCaseManiaPlayfield : TestCase
{
public override string Description => @"Mania playfield";
protected override double TimePerAction => 200;
public override void Reset()
{
base.Reset();
const int max_columns = 10;
Action<int, SpecialColumnPosition> createPlayfield = (cols, pos) =>
{
Clear();
Add(new ManiaPlayfield(cols)
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
SpecialColumnPosition = pos
});
};
for (int i = 1; i <= max_columns; i++)
{
int tempI = i;
AddStep($"{i} column" + (i > 1 ? "s" : ""), () => createPlayfield(tempI, SpecialColumnPosition.Normal));
AddStep("Trigger keys down", () => ((ManiaPlayfield)Children.First()).Columns.Children.ForEach(triggerKeyDown));
AddStep("Trigger keys up", () => ((ManiaPlayfield)Children.First()).Columns.Children.ForEach(triggerKeyUp));
AddStep("Left special style", () => createPlayfield(tempI, SpecialColumnPosition.Left));
AddStep("Right special style", () => createPlayfield(tempI, SpecialColumnPosition.Right));
}
AddStep("Normal special style", () => createPlayfield(max_columns, SpecialColumnPosition.Normal));
}
private void triggerKeyDown(Column column)
{
column.TriggerKeyDown(new InputState(), new KeyDownEventArgs
{
Key = column.Key,
Repeat = false
});
}
private void triggerKeyUp(Column column)
{
column.TriggerKeyUp(new InputState(), new KeyUpEventArgs
{
Key = column.Key
});
}
}
}

View File

@ -29,7 +29,7 @@ namespace osu.Desktop.VisualTests
host.DrawThread.InactiveHz = host.DrawThread.ActiveHz; host.DrawThread.InactiveHz = host.DrawThread.ActiveHz;
host.InputThread.InactiveHz = host.InputThread.ActiveHz; host.InputThread.InactiveHz = host.InputThread.ActiveHz;
host.Window.CursorState = CursorState.Hidden; host.Window.CursorState |= CursorState.Hidden;
} }
} }
} }

View File

@ -190,6 +190,7 @@
<Compile Include="Tests\TestCaseDrawings.cs" /> <Compile Include="Tests\TestCaseDrawings.cs" />
<Compile Include="Tests\TestCaseGamefield.cs" /> <Compile Include="Tests\TestCaseGamefield.cs" />
<Compile Include="Tests\TestCaseGraph.cs" /> <Compile Include="Tests\TestCaseGraph.cs" />
<Compile Include="Tests\TestCaseManiaPlayfield.cs" />
<Compile Include="Tests\TestCaseMenuOverlays.cs" /> <Compile Include="Tests\TestCaseMenuOverlays.cs" />
<Compile Include="Tests\TestCaseMusicController.cs" /> <Compile Include="Tests\TestCaseMusicController.cs" />
<Compile Include="Tests\TestCaseNotificationManager.cs" /> <Compile Include="Tests\TestCaseNotificationManager.cs" />

View File

@ -43,7 +43,7 @@ namespace osu.Desktop
var desktopWindow = host.Window as DesktopGameWindow; var desktopWindow = host.Window as DesktopGameWindow;
if (desktopWindow != null) if (desktopWindow != null)
{ {
desktopWindow.CursorState = CursorState.Hidden; desktopWindow.CursorState |= CursorState.Hidden;
desktopWindow.Icon = Icon.ExtractAssociatedIcon(Assembly.GetExecutingAssembly().Location); desktopWindow.Icon = Icon.ExtractAssociatedIcon(Assembly.GetExecutingAssembly().Location);
desktopWindow.Title = Name; desktopWindow.Title = Name;

View File

@ -0,0 +1,202 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using OpenTK;
using OpenTK.Graphics;
using OpenTK.Input;
using osu.Framework.Extensions.Color4Extensions;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Colour;
using osu.Framework.Input;
using osu.Game.Graphics;
namespace osu.Game.Rulesets.Mania.UI
{
public class Column : Container, IHasAccentColour
{
private const float key_size = 50;
private const float key_icon_size = 10;
private const float key_icon_corner_radius = 3;
private const float key_icon_border_radius = 2;
private const float hit_target_height = 10;
private const float hit_target_bar_height = 2;
private const float column_width = 45;
private const float special_column_width = 70;
public Key Key;
private readonly Box background;
private readonly Container hitTargetBar;
private readonly Container keyIcon;
public Column()
{
RelativeSizeAxes = Axes.Y;
Width = column_width;
Children = new Drawable[]
{
background = new Box
{
Name = "Foreground",
RelativeSizeAxes = Axes.Both,
Alpha = 0.2f
},
new FillFlowContainer
{
Name = "Key + hit target",
Anchor = Anchor.BottomCentre,
Origin = Anchor.BottomCentre,
RelativeSizeAxes = Axes.X,
AutoSizeAxes = Axes.Y,
Direction = FillDirection.Vertical,
Children = new[]
{
new Container
{
Name = "Key",
Anchor = Anchor.BottomCentre,
Origin = Anchor.BottomCentre,
RelativeSizeAxes = Axes.X,
Height = key_size,
Children = new Drawable[]
{
new Box
{
Name = "Key gradient",
RelativeSizeAxes = Axes.Both,
ColourInfo = ColourInfo.GradientVertical(Color4.Black, Color4.Black.Opacity(0)),
Alpha = 0.5f
},
keyIcon = new Container
{
Name = "Key icon",
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Size = new Vector2(key_icon_size),
Masking = true,
CornerRadius = key_icon_corner_radius,
BorderThickness = 2,
BorderColour = Color4.White, // Not true
Children = new[]
{
new Box
{
RelativeSizeAxes = Axes.Both,
Alpha = 0,
AlwaysPresent = true
}
}
}
}
},
new Container
{
Name = "Hit target",
Anchor = Anchor.BottomCentre,
Origin = Anchor.BottomCentre,
RelativeSizeAxes = Axes.X,
Height = hit_target_height,
Children = new Drawable[]
{
new Box
{
Name = "Background",
RelativeSizeAxes = Axes.Both,
Colour = Color4.Black
},
hitTargetBar = new Container
{
Name = "Bar",
Anchor = Anchor.BottomCentre,
Origin = Anchor.BottomCentre,
RelativeSizeAxes = Axes.X,
Height = hit_target_bar_height,
Masking = true,
Children = new[]
{
new Box
{
RelativeSizeAxes = Axes.Both
}
}
}
}
}
}
}
};
}
private bool isSpecial;
public bool IsSpecial
{
get { return isSpecial; }
set
{
if (isSpecial == value)
return;
isSpecial = value;
Width = isSpecial ? special_column_width : column_width;
}
}
private Color4 accentColour;
public Color4 AccentColour
{
get { return accentColour; }
set
{
if (accentColour == value)
return;
accentColour = value;
background.Colour = accentColour;
hitTargetBar.EdgeEffect = new EdgeEffect
{
Type = EdgeEffectType.Glow,
Radius = 5,
Colour = accentColour.Opacity(0.5f),
};
keyIcon.EdgeEffect = new EdgeEffect
{
Type = EdgeEffectType.Glow,
Radius = 5,
Colour = accentColour.Opacity(0.5f),
};
}
}
protected override bool OnKeyDown(InputState state, KeyDownEventArgs args)
{
if (args.Key == Key && !args.Repeat)
{
background.FadeTo(background.Alpha + 0.2f, 50, EasingTypes.OutQuint);
keyIcon.ScaleTo(1.4f, 50, EasingTypes.OutQuint);
}
return false;
}
protected override bool OnKeyUp(InputState state, KeyUpEventArgs args)
{
if (args.Key == Key)
{
background.FadeTo(0.2f, 800, EasingTypes.OutQuart);
keyIcon.ScaleTo(1f, 400, EasingTypes.OutQuart);
}
return false;
}
}
}

View File

@ -8,29 +8,153 @@ using osu.Game.Rulesets.UI;
using OpenTK; using OpenTK;
using OpenTK.Graphics; using OpenTK.Graphics;
using osu.Game.Rulesets.Mania.Judgements; using osu.Game.Rulesets.Mania.Judgements;
using osu.Framework.Graphics.Containers;
using System;
using osu.Framework.Graphics.Primitives;
using osu.Game.Graphics;
using osu.Framework.Allocation;
using OpenTK.Input;
using System.Linq;
using System.Collections.Generic;
namespace osu.Game.Rulesets.Mania.UI namespace osu.Game.Rulesets.Mania.UI
{ {
public class ManiaPlayfield : Playfield<ManiaBaseHit, ManiaJudgement> public class ManiaPlayfield : Playfield<ManiaBaseHit, ManiaJudgement>
{ {
public ManiaPlayfield(int columns) /// <summary>
/// Default column keys, expanding outwards from the middle as more column are added.
/// E.g. 2 columns use FJ, 4 columns use DFJK, 6 use SDFJKL, etc...
/// </summary>
private static readonly Key[] default_keys = { Key.A, Key.S, Key.D, Key.F, Key.J, Key.K, Key.L, Key.Semicolon };
private SpecialColumnPosition specialColumnPosition;
/// <summary>
/// The style to use for the special column.
/// </summary>
public SpecialColumnPosition SpecialColumnPosition
{ {
Size = new Vector2(0.8f, 1f); get { return specialColumnPosition; }
Anchor = Anchor.BottomCentre; set
Origin = Anchor.BottomCentre; {
if (IsLoaded)
throw new InvalidOperationException($"Setting {nameof(SpecialColumnPosition)} after the playfield is loaded requires re-creating the playfield.");
specialColumnPosition = value;
}
}
Add(new Box { RelativeSizeAxes = Axes.Both, Alpha = 0.5f }); public readonly FlowContainer<Column> Columns;
for (int i = 0; i < columns; i++) private List<Color4> normalColumnColours = new List<Color4>();
Add(new Box private Color4 specialColumnColour;
private readonly int columnCount;
public ManiaPlayfield(int columnCount)
{
this.columnCount = columnCount;
if (columnCount <= 0)
throw new ArgumentException("Can't have zero or fewer columns.");
Children = new Drawable[]
{
new Container
{ {
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
RelativeSizeAxes = Axes.Y, RelativeSizeAxes = Axes.Y,
Size = new Vector2(2, 1), AutoSizeAxes = Axes.X,
RelativePositionAxes = Axes.Both, Children = new Drawable[]
Position = new Vector2((float)i / columns, 0), {
Alpha = 0.5f, new Box
Colour = Color4.Black {
}); RelativeSizeAxes = Axes.Both,
Colour = Color4.Black
},
Columns = new FillFlowContainer<Column>
{
RelativeSizeAxes = Axes.Y,
AutoSizeAxes = Axes.X,
Direction = FillDirection.Horizontal,
Padding = new MarginPadding { Left = 1, Right = 1 },
Spacing = new Vector2(1, 0)
}
}
}
};
for (int i = 0; i < columnCount; i++)
Columns.Add(new Column());
}
[BackgroundDependencyLoader]
private void load(OsuColour colours)
{
normalColumnColours = new List<Color4>
{
colours.RedDark,
colours.GreenDark
};
specialColumnColour = colours.BlueDark;
// Set the special column + colour + key
for (int i = 0; i < columnCount; i++)
{
Column column = Columns.Children.ElementAt(i);
column.IsSpecial = isSpecialColumn(i);
if (!column.IsSpecial)
continue;
column.Key = Key.Space;
column.AccentColour = specialColumnColour;
}
var nonSpecialColumns = Columns.Children.Where(c => !c.IsSpecial).ToList();
// We'll set the colours of the non-special columns in a separate loop, because the non-special
// column colours are mirrored across their centre and special styles mess with this
for (int i = 0; i < Math.Ceiling(nonSpecialColumns.Count / 2f); i++)
{
Color4 colour = normalColumnColours[i % normalColumnColours.Count];
nonSpecialColumns[i].AccentColour = colour;
nonSpecialColumns[nonSpecialColumns.Count - 1 - i].AccentColour = colour;
}
// We'll set the keys for non-special columns in another separate loop because it's not mirrored like the above colours
// Todo: This needs to go when we get to bindings and use Button1, ..., ButtonN instead
for (int i = 0; i < nonSpecialColumns.Count; i++)
{
Column column = nonSpecialColumns[i];
int keyOffset = default_keys.Length / 2 - nonSpecialColumns.Count / 2 + i;
if (keyOffset >= 0 && keyOffset < default_keys.Length)
column.Key = default_keys[keyOffset];
else
// There is no default key defined for this column. Let's set this to Unknown for now
// however note that this will be gone after bindings are in place
column.Key = Key.Unknown;
}
}
/// <summary>
/// Whether the column index is a special column for this playfield.
/// </summary>
/// <param name="column">The 0-based column index.</param>
/// <returns>Whether the column is a special column.</returns>
private bool isSpecialColumn(int column)
{
switch (SpecialColumnPosition)
{
default:
case SpecialColumnPosition.Normal:
return columnCount % 2 == 1 && column == columnCount / 2;
case SpecialColumnPosition.Left:
return column == 0;
case SpecialColumnPosition.Right:
return column == columnCount - 1;
}
} }
} }
} }

View File

@ -0,0 +1,21 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
namespace osu.Game.Rulesets.Mania.UI
{
public enum SpecialColumnPosition
{
/// <summary>
/// The special column will lie in the center of the columns.
/// </summary>
Normal,
/// <summary>
/// The special column will lie to the left of the columns.
/// </summary>
Left,
/// <summary>
/// The special column will lie to the right of the columns.
/// </summary>
Right
}
}

View File

@ -56,10 +56,12 @@
<Compile Include="Objects\ManiaBaseHit.cs" /> <Compile Include="Objects\ManiaBaseHit.cs" />
<Compile Include="Objects\Note.cs" /> <Compile Include="Objects\Note.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="UI\Column.cs" />
<Compile Include="UI\ManiaHitRenderer.cs" /> <Compile Include="UI\ManiaHitRenderer.cs" />
<Compile Include="UI\ManiaPlayfield.cs" /> <Compile Include="UI\ManiaPlayfield.cs" />
<Compile Include="ManiaRuleset.cs" /> <Compile Include="ManiaRuleset.cs" />
<Compile Include="Mods\ManiaMod.cs" /> <Compile Include="Mods\ManiaMod.cs" />
<Compile Include="UI\SpecialColumnPosition.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\osu-framework\osu.Framework\osu.Framework.csproj"> <ProjectReference Include="..\osu-framework\osu.Framework\osu.Framework.csproj">

View File

@ -1,12 +0,0 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
namespace osu.Game.Configuration
{
public enum ConfineMouseMode
{
Never,
Fullscreen,
Always
}
}

View File

@ -1,7 +1,6 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>. // Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System;
using osu.Framework.Configuration; using osu.Framework.Configuration;
using osu.Framework.Platform; using osu.Framework.Platform;
using osu.Game.Screens.Select; using osu.Game.Screens.Select;
@ -12,172 +11,65 @@ namespace osu.Game.Configuration
{ {
protected override void InitialiseDefaults() protected override void InitialiseDefaults()
{ {
#pragma warning disable CS0612 // Type or member is obsolete // UI/selection defaults
Set(OsuConfig.Ruleset, 0, 0, int.MaxValue);
Set(OsuConfig.BeatmapDetailTab, BeatmapDetailTab.Details);
Set(OsuConfig.DisplayStarsMinimum, 0.0, 0, 10);
Set(OsuConfig.DisplayStarsMaximum, 10.0, 0, 10);
// Online settings
Set(OsuConfig.Username, string.Empty); Set(OsuConfig.Username, string.Empty);
Set(OsuConfig.Token, string.Empty); Set(OsuConfig.Token, string.Empty);
Set(OsuConfig.Ruleset, 0, 0, int.MaxValue); Set(OsuConfig.SavePassword, false).ValueChanged += val =>
{
if (val) Set(OsuConfig.SaveUsername, true);
};
Set(OsuConfig.SaveUsername, true).ValueChanged += val =>
{
if (!val) Set(OsuConfig.SavePassword, false);
};
// Audio
Set(OsuConfig.AudioDevice, string.Empty); Set(OsuConfig.AudioDevice, string.Empty);
Set(OsuConfig.SavePassword, false);
Set(OsuConfig.SaveUsername, true);
Set(OsuConfig.MenuCursorSize, 1.0, 0.5f, 2);
Set(OsuConfig.GameplayCursorSize, 1.0, 0.5f, 2);
Set(OsuConfig.DimLevel, 0.3, 0, 1);
Set(OsuConfig.MouseDisableButtons, false);
Set(OsuConfig.MouseDisableWheel, false);
Set(OsuConfig.SnakingInSliders, true);
Set(OsuConfig.SnakingOutSliders, true);
Set(OsuConfig.MenuParallax, true);
Set(OsuConfig.MenuVoice, true); Set(OsuConfig.MenuVoice, true);
Set(OsuConfig.MenuMusic, true); Set(OsuConfig.MenuMusic, true);
Set(OsuConfig.BeatmapDetailTab, BeatmapDetailTab.Details); Set(OsuConfig.AudioOffset, 0, -500.0, 500.0);
// Input
Set(OsuConfig.MenuCursorSize, 1.0, 0.5f, 2);
Set(OsuConfig.GameplayCursorSize, 1.0, 0.5f, 2);
Set(OsuConfig.MouseDisableButtons, false);
Set(OsuConfig.MouseDisableWheel, false);
// Graphics
Set(OsuConfig.ShowFpsDisplay, false);
Set(OsuConfig.MenuParallax, true);
Set(OsuConfig.SnakingInSliders, true);
Set(OsuConfig.SnakingOutSliders, true);
// Gameplay
Set(OsuConfig.DimLevel, 0.3, 0, 1);
Set(OsuConfig.ShowInterface, true); Set(OsuConfig.ShowInterface, true);
Set(OsuConfig.KeyOverlay, false); Set(OsuConfig.KeyOverlay, false);
//todo: implement all settings below this line (remove the Disabled set when doing so). // Update
Set(OsuConfig.AudioOffset, 0, -500.0, 500.0);
Set(OsuConfig.MouseSpeed, 1.0).Disabled = true; Set(OsuConfig.ReleaseStream, ReleaseStream.Lazer);
Set(OsuConfig.BeatmapDirectory, @"Songs").Disabled = true; // TODO: use thi.Disabled = trues
Set(OsuConfig.AllowPublicInvites, true).Disabled = true;
Set(OsuConfig.AutoChatHide, true).Disabled = true;
Set(OsuConfig.AutomaticDownload, true).Disabled = true;
Set(OsuConfig.AutomaticDownloadNoVideo, false).Disabled = true;
Set(OsuConfig.BlockNonFriendPM, false).Disabled = true;
Set(OsuConfig.Bloom, false).Disabled = true;
Set(OsuConfig.BloomSoftening, false).Disabled = true;
Set(OsuConfig.BossKeyFirstActivation, true).Disabled = true;
Set(OsuConfig.ChatAudibleHighlight, true).Disabled = true;
Set(OsuConfig.ChatChannels, string.Empty).Disabled = true;
Set(OsuConfig.ChatFilter, false).Disabled = true;
Set(OsuConfig.ChatHighlightName, true).Disabled = true;
Set(OsuConfig.ChatMessageNotification, true).Disabled = true;
Set(OsuConfig.ChatLastChannel, string.Empty).Disabled = true;
Set(OsuConfig.ChatRemoveForeign, false).Disabled = true;
//Set(OsuConfig.ChatSortMode, UserSortMode.Rank).Disabled = true;
Set(OsuConfig.ComboBurst, true).Disabled = true;
Set(OsuConfig.ComboFire, false).Disabled = true;
Set(OsuConfig.ComboFireHeight, 3).Disabled = true;
Set(OsuConfig.ConfirmExit, false).Disabled = true;
Set(OsuConfig.AutoSendNowPlaying, true).Disabled = true;
Set(OsuConfig.AutomaticCursorSizing, false).Disabled = true;
Set(OsuConfig.Display, 1).Disabled = true;
Set(OsuConfig.DisplayCityLocation, false).Disabled = true;
Set(OsuConfig.DistanceSpacingEnabled, true).Disabled = true;
Set(OsuConfig.EditorTip, 0).Disabled = true;
Set(OsuConfig.VideoEditor, true).Disabled = true;
Set(OsuConfig.EditorDefaultSkin, false).Disabled = true;
Set(OsuConfig.EditorSnakingSliders, true).Disabled = true;
Set(OsuConfig.EditorHitAnimations, false).Disabled = true;
Set(OsuConfig.EditorFollowPoints, true).Disabled = true;
Set(OsuConfig.EditorStacking, true).Disabled = true;
Set(OsuConfig.ForceSliderRendering, false).Disabled = true;
Set(OsuConfig.FpsCounter, false).Disabled = true;
Set(OsuConfig.FrameTimeDisplay, false).Disabled = true;
Set(OsuConfig.GuideTips, @"").Disabled = true;
Set(OsuConfig.CursorRipple, false).Disabled = true;
Set(OsuConfig.HighlightWords, string.Empty).Disabled = true;
Set(OsuConfig.HighResolution, false).Disabled = true;
Set(OsuConfig.HitLighting, true).Disabled = true;
Set(OsuConfig.IgnoreBarline, false).Disabled = true;
Set(OsuConfig.IgnoreBeatmapSamples, false).Disabled = true;
Set(OsuConfig.IgnoreBeatmapSkins, false).Disabled = true;
Set(OsuConfig.IgnoreList, string.Empty).Disabled = true;
Set(OsuConfig.AllowNowPlayingHighlights, false).Disabled = true;
Set(OsuConfig.LastVersion, string.Empty).Disabled = true;
Set(OsuConfig.LastVersionPermissionsFailed, string.Empty).Disabled = true;
Set(OsuConfig.LoadSubmittedThread, true).Disabled = true;
Set(OsuConfig.LobbyPlayMode, -1).Disabled = true;
Set(OsuConfig.ShowInterfaceDuringRelax, false).Disabled = true;
Set(OsuConfig.LobbyShowExistingOnly, false).Disabled = true;
Set(OsuConfig.LobbyShowFriendsOnly, false).Disabled = true;
Set(OsuConfig.LobbyShowFull, false).Disabled = true;
Set(OsuConfig.LobbyShowInProgress, true).Disabled = true;
Set(OsuConfig.LobbyShowPassworded, true).Disabled = true;
Set(OsuConfig.LogPrivateMessages, false).Disabled = true;
Set(OsuConfig.LowResolution, false).Disabled = true;
//Set(OsuConfig.ManiaSpeed, SpeedMania.SPEED_DEFAULT, SpeedMania.SPEED_MIN, SpeedMania.SPEED_MAX).Disabled = true;
Set(OsuConfig.UsePerBeatmapManiaSpeed, true).Disabled = true;
Set(OsuConfig.ManiaSpeedBPMScale, true).Disabled = true;
Set(OsuConfig.MenuTip, 0).Disabled = true;
Set(OsuConfig.MouseSpeed, 1, 0.4, 6).Disabled = true;
Set(OsuConfig.ScoreMeterScale, 1, 0.5, 2).Disabled = true;
//Set(OsuConfig.ScoreMeterScale, 1, 0.5, OsuGame.Tournament ? 10 : 2).Disabled = true;
Set(OsuConfig.DistanceSpacing, 0.8, 0.1, 6).Disabled = true;
Set(OsuConfig.EditorBeatDivisor, 1, 1, 16).Disabled = true;
Set(OsuConfig.EditorGridSize, 32, 4, 32).Disabled = true;
Set(OsuConfig.EditorGridSizeDesign, 32, 4, 32).Disabled = true;
Set(OsuConfig.CustomFrameLimit, 240, 240, 999).Disabled = true;
Set(OsuConfig.MsnIntegration, false).Disabled = true;
Set(OsuConfig.MyPcSucks, false).Disabled = true;
Set(OsuConfig.NotifyFriends, true).Disabled = true;
Set(OsuConfig.NotifySubmittedThread, true).Disabled = true;
Set(OsuConfig.PopupDuringGameplay, true).Disabled = true;
Set(OsuConfig.ProgressBarType, ProgressBarType.Pie).Disabled = true;
Set(OsuConfig.RankType, RankingType.Top).Disabled = true;
Set(OsuConfig.RefreshRate, 60).Disabled = true;
Set(OsuConfig.OverrideRefreshRate, Get<int>(OsuConfig.RefreshRate) != 60).Disabled = true;
//Set(OsuConfig.ScaleMode, ScaleMode.WidescreenConservative).Disabled = true;
Set(OsuConfig.ScoreboardVisible, true).Disabled = true;
Set(OsuConfig.ScoreMeter, ScoreMeterType.Error).Disabled = true;
//Set(OsuConfig.ScoreMeter, OsuGame.Tournament ? ScoreMeterType.Colour : ScoreMeterType.Error).Disabled = true;
Set(OsuConfig.ScreenshotId, 0).Disabled = true;
Set(OsuConfig.MenuSnow, false).Disabled = true;
Set(OsuConfig.MenuTriangles, true).Disabled = true;
Set(OsuConfig.SongSelectThumbnails, true).Disabled = true;
Set(OsuConfig.ScreenshotFormat, ScreenshotFormat.Jpg).Disabled = true;
Set(OsuConfig.ShowReplayComments, true).Disabled = true;
Set(OsuConfig.ShowSpectators, true).Disabled = true;
Set(OsuConfig.ShowStoryboard, true).Disabled = true;
//Set(OsuConfig.Skin, SkinManager.DEFAULT_SKIN).Disabled = true;
Set(OsuConfig.SkinSamples, true).Disabled = true;
Set(OsuConfig.SkipTablet, false).Disabled = true;
Set(OsuConfig.Tablet, false).Disabled = true;
Set(OsuConfig.UpdatePending, false).Disabled = true;
Set(OsuConfig.UseSkinCursor, false).Disabled = true;
Set(OsuConfig.UseTaikoSkin, false).Disabled = true;
Set(OsuConfig.Video, true).Disabled = true;
Set(OsuConfig.Wiimote, false).Disabled = true;
Set(OsuConfig.YahooIntegration, false).Disabled = true;
Set(OsuConfig.ForceFrameFlush, false).Disabled = true;
Set(OsuConfig.DetectPerformanceIssues, true).Disabled = true;
Set(OsuConfig.RawInput, false).Disabled = true;
Set(OsuConfig.AbsoluteToOsuWindow, Get<bool>(OsuConfig.RawInput)).Disabled = true;
Set(OsuConfig.ShowMenuTips, true).Disabled = true;
Set(OsuConfig.HiddenShowFirstApproach, true).Disabled = true;
Set(OsuConfig.ComboColourSliderBall, true).Disabled = true;
Set(OsuConfig.AlternativeChatFont, false).Disabled = true;
Set(OsuConfig.DisplayStarsMaximum, 10.0, 0.0, 10.0).Disabled = true;
Set(OsuConfig.DisplayStarsMinimum, 0.0, 0.0, 10.0).Disabled = true;
Set(OsuConfig.ReleaseStream, ReleaseStream.Lazer).Disabled = true;
Set(OsuConfig.UpdateFailCount, 0).Disabled = true;
//Set(OsuConfig.TreeSortMode, TreeGroupMode.Show_All).Disabled = true;
//Set(OsuConfig.TreeSortMode2, TreeSortMode.Title).Disabled = true;
Set(OsuConfig.PermanentSongInfo, false).Disabled = true;
Set(OsuConfig.Ticker, false).Disabled = true;
Set(OsuConfig.CompatibilityContext, false).Disabled = true;
Set(OsuConfig.CanForceOptimusCompatibility, true).Disabled = true;
Set(OsuConfig.ConfineMouse, Get<bool>(OsuConfig.ConfineMouseToFullscreen) ?
ConfineMouseMode.Fullscreen : ConfineMouseMode.Never).Disabled = true;
GetOriginalBindable<bool>(OsuConfig.SavePassword).ValueChanged += delegate
{
if (Get<bool>(OsuConfig.SavePassword)) Set(OsuConfig.SaveUsername, true);
};
GetOriginalBindable<bool>(OsuConfig.SaveUsername).ValueChanged += delegate
{
if (!Get<bool>(OsuConfig.SaveUsername)) Set(OsuConfig.SavePassword, false);
};
#pragma warning restore CS0612 // Type or member is obsolete
} }
public OsuConfigManager(Storage storage) : base(storage) public OsuConfigManager(Storage storage) : base(storage)
@ -187,150 +79,29 @@ namespace osu.Game.Configuration
public enum OsuConfig public enum OsuConfig
{ {
// New osu:
Ruleset, Ruleset,
Token, Token,
// Imported from old osu:
BeatmapDirectory,
AllowPublicInvites,
AutoChatHide,
AutomaticDownload,
AutomaticDownloadNoVideo,
BlockNonFriendPM,
Bloom,
BloomSoftening,
BossKeyFirstActivation,
ChatAudibleHighlight,
ChatChannels,
ChatFilter,
ChatHighlightName,
ChatMessageNotification,
ChatLastChannel,
ChatRemoveForeign,
ChatSortMode,
ComboBurst,
ComboFire,
ComboFireHeight,
ConfirmExit,
AutoSendNowPlaying,
MenuCursorSize, MenuCursorSize,
GameplayCursorSize, GameplayCursorSize,
AutomaticCursorSizing,
DimLevel, DimLevel,
Display,
DisplayCityLocation,
DistanceSpacingEnabled,
EditorTip,
VideoEditor,
EditorDefaultSkin,
EditorSnakingSliders,
EditorHitAnimations,
EditorFollowPoints,
EditorStacking,
ForceSliderRendering,
FpsCounter,
FrameTimeDisplay,
GuideTips,
CursorRipple,
HighlightWords,
HighResolution,
HitLighting,
IgnoreBarline,
IgnoreBeatmapSamples,
IgnoreBeatmapSkins,
IgnoreList,
KeyOverlay, KeyOverlay,
Language,
LastPlayMode,
AllowNowPlayingHighlights,
LastVersion,
LastVersionPermissionsFailed,
LoadSubmittedThread,
LobbyPlayMode,
ShowInterface, ShowInterface,
ShowInterfaceDuringRelax,
LobbyShowExistingOnly,
LobbyShowFriendsOnly,
LobbyShowFull,
LobbyShowInProgress,
LobbyShowPassworded,
LogPrivateMessages,
LowResolution,
ManiaSpeed,
UsePerBeatmapManiaSpeed,
ManiaSpeedBPMScale,
MenuTip,
MouseDisableButtons, MouseDisableButtons,
MouseDisableWheel, MouseDisableWheel,
MouseSpeed,
AudioOffset, AudioOffset,
ScoreMeterScale,
DistanceSpacing,
EditorBeatDivisor,
EditorGridSize,
EditorGridSizeDesign,
CustomFrameLimit,
MsnIntegration,
MyPcSucks,
NotifyFriends,
NotifySubmittedThread,
PopupDuringGameplay,
ProgressBarType,
RankType,
RefreshRate,
OverrideRefreshRate,
ScaleMode,
ScoreboardVisible,
ScoreMeter,
ScreenshotId,
MenuSnow,
MenuTriangles,
SongSelectThumbnails,
ScreenshotFormat,
ShowReplayComments,
ShowSpectators,
ShowStoryboard,
Skin,
SkinSamples,
SkipTablet,
SnakingInSliders,
SnakingOutSliders,
Tablet,
UpdatePending,
UserFilter,
UseSkinCursor,
UseTaikoSkin,
Video,
Wiimote,
YahooIntegration,
ForceFrameFlush,
DetectPerformanceIssues,
MenuMusic, MenuMusic,
MenuVoice, MenuVoice,
MenuParallax, MenuParallax,
BeatmapDetailTab, BeatmapDetailTab,
RawInput,
AbsoluteToOsuWindow,
ConfineMouse,
[Obsolete]
ConfineMouseToFullscreen,
ShowMenuTips,
HiddenShowFirstApproach,
ComboColourSliderBall,
AlternativeChatFont,
Username, Username,
DisplayStarsMaximum,
DisplayStarsMinimum,
AudioDevice, AudioDevice,
ReleaseStream, ReleaseStream,
UpdateFailCount,
SavePassword, SavePassword,
SaveUsername, SaveUsername,
TreeSortMode, DisplayStarsMinimum,
TreeSortMode2, DisplayStarsMaximum,
PermanentSongInfo, SnakingInSliders,
Ticker, SnakingOutSliders,
CompatibilityContext, ShowFpsDisplay
CanForceOptimusCompatibility,
} }
} }

View File

@ -1,18 +0,0 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System.ComponentModel;
namespace osu.Game.Configuration
{
public enum ProgressBarType
{
Off,
Pie,
[Description("Top Right")]
TopRight,
[Description("Bottom Right")]
BottomRight,
Bottom
}
}

View File

@ -19,6 +19,7 @@ using osu.Game.Graphics.Cursor;
using osu.Game.Graphics.Processing; using osu.Game.Graphics.Processing;
using osu.Game.Online.API; using osu.Game.Online.API;
using SQLite.Net; using SQLite.Net;
using osu.Framework.Graphics.Performance;
namespace osu.Game namespace osu.Game
{ {
@ -44,6 +45,8 @@ namespace osu.Game
public readonly Bindable<WorkingBeatmap> Beatmap = new Bindable<WorkingBeatmap>(); public readonly Bindable<WorkingBeatmap> Beatmap = new Bindable<WorkingBeatmap>();
private Bindable<bool> fpsDisplayVisible;
protected AssemblyName AssemblyName => Assembly.GetEntryAssembly()?.GetName() ?? new AssemblyName { Version = new Version() }; protected AssemblyName AssemblyName => Assembly.GetEntryAssembly()?.GetName() ?? new AssemblyName { Version = new Version() };
public bool IsDeployedBuild => AssemblyName.Version.Major > 0; public bool IsDeployedBuild => AssemblyName.Version.Major > 0;
@ -160,6 +163,15 @@ namespace osu.Game
}, },
} }
}); });
// TODO: This is temporary until we reimplement the local FPS display.
// It's just to allow end-users to access the framework FPS display without knowing the shortcut key.
fpsDisplayVisible = LocalConfig.GetBindable<bool>(OsuConfig.ShowFpsDisplay);
fpsDisplayVisible.ValueChanged += val =>
{
FrameStatisticsMode = val ? FrameStatisticsMode.Minimal : FrameStatisticsMode.None;
};
fpsDisplayVisible.TriggerChange();
} }
public override void SetHost(GameHost host) public override void SetHost(GameHost host)

View File

@ -24,6 +24,7 @@ namespace osu.Game.Overlays.Options
set set
{ {
text.Text = value; text.Text = value;
text.Alpha = !string.IsNullOrEmpty(value) ? 1 : 0;
} }
} }

View File

@ -12,11 +12,14 @@ using osu.Game.Graphics.UserInterface;
namespace osu.Game.Overlays.Options namespace osu.Game.Overlays.Options
{ {
public class OptionSlider<T> : OptionSlider<T, OsuSliderBar<T>> where T: struct public class OptionSlider<T> : OptionSlider<T, OsuSliderBar<T>>
where T : struct
{ {
} }
public class OptionSlider<T, U> : FillFlowContainer where T : struct where U : SliderBar<T>, new() public class OptionSlider<T, U> : FillFlowContainer
where T : struct
where U : SliderBar<T>, new()
{ {
private readonly SliderBar<T> slider; private readonly SliderBar<T> slider;
private readonly SpriteText text; private readonly SpriteText text;

View File

@ -2,33 +2,31 @@
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Game.Configuration; using osu.Game.Configuration;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterface;
namespace osu.Game.Overlays.Options.Sections.Input namespace osu.Game.Overlays.Options.Sections.Audio
{ {
public class OtherInputOptions : OptionsSubsection public class MainMenuOptions : OptionsSubsection
{ {
protected override string Header => "Other"; protected override string Header => "Main Menu";
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(OsuConfigManager config) private void load(OsuConfigManager config)
{ {
Children = new Drawable[] Children = new[]
{ {
new OsuCheckbox new OsuCheckbox
{ {
LabelText = "OS TabletPC support", LabelText = "Interface voices",
Bindable = config.GetBindable<bool>(OsuConfig.Tablet) Bindable = config.GetBindable<bool>(OsuConfig.MenuVoice)
}, },
new OsuCheckbox new OsuCheckbox
{ {
LabelText = "Wiimote/TaTaCon Drum Support", LabelText = "osu! music theme",
Bindable = config.GetBindable<bool>(OsuConfig.Wiimote) Bindable = config.GetBindable<bool>(OsuConfig.MenuMusic)
}, },
}; };
} }
} }
} }

View File

@ -4,8 +4,6 @@
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Audio; using osu.Framework.Audio;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Game.Configuration;
using osu.Game.Graphics.UserInterface;
namespace osu.Game.Overlays.Options.Sections.Audio namespace osu.Game.Overlays.Options.Sections.Audio
{ {
@ -14,18 +12,13 @@ namespace osu.Game.Overlays.Options.Sections.Audio
protected override string Header => "Volume"; protected override string Header => "Volume";
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(OsuConfigManager config, AudioManager audio) private void load(AudioManager audio)
{ {
Children = new Drawable[] Children = new Drawable[]
{ {
new OptionSlider<double> { LabelText = "Master", Bindable = audio.Volume }, new OptionSlider<double> { LabelText = "Master", Bindable = audio.Volume },
new OptionSlider<double> { LabelText = "Effect", Bindable = audio.VolumeSample }, new OptionSlider<double> { LabelText = "Effect", Bindable = audio.VolumeSample },
new OptionSlider<double> { LabelText = "Music", Bindable = audio.VolumeTrack }, new OptionSlider<double> { LabelText = "Music", Bindable = audio.VolumeTrack },
new OsuCheckbox
{
LabelText = "Ignore beatmap hitsounds",
Bindable = config.GetBindable<bool>(OsuConfig.IgnoreBeatmapSamples)
}
}; };
} }
} }

View File

@ -1,7 +1,6 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>. // Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Overlays.Options.Sections.Audio; using osu.Game.Overlays.Options.Sections.Audio;
@ -17,9 +16,10 @@ namespace osu.Game.Overlays.Options.Sections
{ {
Children = new Drawable[] Children = new Drawable[]
{ {
new AudioDevicesOptions { Alpha = RuntimeInfo.IsWindows ? 1 : 0 }, new AudioDevicesOptions(),
new VolumeOptions(), new VolumeOptions(),
new OffsetOptions(), new OffsetOptions(),
new MainMenuOptions(),
}; };
} }
} }

View File

@ -1,58 +0,0 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Game.Configuration;
using osu.Game.Graphics;
using osu.Game.Graphics.UserInterface;
using OpenTK;
namespace osu.Game.Overlays.Options.Sections
{
public class EditorSection : OptionsSection
{
public override string Header => "Editor";
public override FontAwesome Icon => FontAwesome.fa_pencil;
[BackgroundDependencyLoader]
private void load(OsuConfigManager config)
{
FlowContent.Spacing = new Vector2(0, 5);
Children = new Drawable[]
{
new OsuCheckbox
{
LabelText = "Background video",
Bindable = config.GetBindable<bool>(OsuConfig.VideoEditor)
},
new OsuCheckbox
{
LabelText = "Always use default skin",
Bindable = config.GetBindable<bool>(OsuConfig.EditorDefaultSkin)
},
new OsuCheckbox
{
LabelText = "Snaking sliders",
Bindable = config.GetBindable<bool>(OsuConfig.EditorSnakingSliders)
},
new OsuCheckbox
{
LabelText = "Hit animations",
Bindable = config.GetBindable<bool>(OsuConfig.EditorHitAnimations)
},
new OsuCheckbox
{
LabelText = "Follow points",
Bindable = config.GetBindable<bool>(OsuConfig.EditorFollowPoints)
},
new OsuCheckbox
{
LabelText = "Stacking",
Bindable = config.GetBindable<bool>(OsuConfig.EditorStacking)
},
};
}
}
}

View File

@ -22,21 +22,6 @@ namespace osu.Game.Overlays.Options.Sections.Gameplay
LabelText = "Background dim", LabelText = "Background dim",
Bindable = config.GetBindable<double>(OsuConfig.DimLevel) Bindable = config.GetBindable<double>(OsuConfig.DimLevel)
}, },
new OptionEnumDropdown<ProgressBarType>
{
LabelText = "Progress display",
Bindable = config.GetBindable<ProgressBarType>(OsuConfig.ProgressBarType)
},
new OptionEnumDropdown<ScoreMeterType>
{
LabelText = "Score meter type",
Bindable = config.GetBindable<ScoreMeterType>(OsuConfig.ScoreMeter)
},
new OptionSlider<double>
{
LabelText = "Score meter size",
Bindable = config.GetBindable<double>(OsuConfig.ScoreMeterScale)
},
new OsuCheckbox new OsuCheckbox
{ {
LabelText = "Show score overlay", LabelText = "Show score overlay",
@ -47,21 +32,6 @@ namespace osu.Game.Overlays.Options.Sections.Gameplay
LabelText = "Always show key overlay", LabelText = "Always show key overlay",
Bindable = config.GetBindable<bool>(OsuConfig.KeyOverlay) Bindable = config.GetBindable<bool>(OsuConfig.KeyOverlay)
}, },
new OsuCheckbox
{
LabelText = "Show approach circle on first \"Hidden\" object",
Bindable = config.GetBindable<bool>(OsuConfig.HiddenShowFirstApproach)
},
new OsuCheckbox
{
LabelText = "Scale osu!mania scroll speed with BPM",
Bindable = config.GetBindable<bool>(OsuConfig.ManiaSpeedBPMScale)
},
new OsuCheckbox
{
LabelText = "Remember osu!mania scroll speed per beatmap",
Bindable = config.GetBindable<bool>(OsuConfig.UsePerBeatmapManiaSpeed)
},
}; };
} }
} }

View File

@ -4,7 +4,6 @@
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Configuration; using osu.Framework.Configuration;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Game.Configuration;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterface;
namespace osu.Game.Overlays.Options.Sections.General namespace osu.Game.Overlays.Options.Sections.General
@ -14,21 +13,15 @@ namespace osu.Game.Overlays.Options.Sections.General
protected override string Header => "Language"; protected override string Header => "Language";
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(OsuConfigManager osuConfig, FrameworkConfigManager frameworkConfig) private void load(FrameworkConfigManager frameworkConfig)
{ {
Children = new Drawable[] Children = new Drawable[]
{ {
new OptionLabel { Text = "TODO: Dropdown" },
new OsuCheckbox new OsuCheckbox
{ {
LabelText = "Prefer metadata in original language", LabelText = "Prefer metadata in original language",
Bindable = frameworkConfig.GetBindable<bool>(FrameworkConfig.ShowUnicode) Bindable = frameworkConfig.GetBindable<bool>(FrameworkConfig.ShowUnicode)
}, },
new OsuCheckbox
{
LabelText = "Use alternative font for chat display",
Bindable = osuConfig.GetBindable<bool>(OsuConfig.AlternativeChatFont)
},
}; };
} }
} }

View File

@ -23,7 +23,6 @@ namespace osu.Game.Overlays.Options.Sections.General
LabelText = "Release stream", LabelText = "Release stream",
Bindable = config.GetBindable<ReleaseStream>(OsuConfig.ReleaseStream), Bindable = config.GetBindable<ReleaseStream>(OsuConfig.ReleaseStream),
}, },
new OptionLabel { Text = "Your osu! is up to date" }, // TODO: map this to reality
new OsuButton new OsuButton
{ {
RelativeSizeAxes = Axes.X, RelativeSizeAxes = Axes.X,

View File

@ -27,41 +27,6 @@ namespace osu.Game.Overlays.Options.Sections.Graphics
LabelText = "Snaking out sliders", LabelText = "Snaking out sliders",
Bindable = config.GetBindable<bool>(OsuConfig.SnakingOutSliders) Bindable = config.GetBindable<bool>(OsuConfig.SnakingOutSliders)
}, },
new OsuCheckbox
{
LabelText = "Background video",
Bindable = config.GetBindable<bool>(OsuConfig.Video)
},
new OsuCheckbox
{
LabelText = "Storyboards",
Bindable = config.GetBindable<bool>(OsuConfig.ShowStoryboard)
},
new OsuCheckbox
{
LabelText = "Combo bursts",
Bindable = config.GetBindable<bool>(OsuConfig.ComboBurst)
},
new OsuCheckbox
{
LabelText = "Hit lighting",
Bindable = config.GetBindable<bool>(OsuConfig.HitLighting)
},
new OsuCheckbox
{
LabelText = "Shaders",
Bindable = config.GetBindable<bool>(OsuConfig.Bloom)
},
new OsuCheckbox
{
LabelText = "Softening filter",
Bindable = config.GetBindable<bool>(OsuConfig.BloomSoftening)
},
new OptionEnumDropdown<ScreenshotFormat>
{
LabelText = "Screenshot",
Bindable = config.GetBindable<ScreenshotFormat>(OsuConfig.ScreenshotFormat)
}
}; };
} }
} }

View File

@ -24,7 +24,6 @@ namespace osu.Game.Overlays.Options.Sections.Graphics
Children = new Drawable[] Children = new Drawable[]
{ {
new OptionLabel { Text = "Resolution: TODO dropdown" },
new OptionEnumDropdown<WindowMode> new OptionEnumDropdown<WindowMode>
{ {
LabelText = "Screen mode", LabelText = "Screen mode",

View File

@ -9,38 +9,18 @@ namespace osu.Game.Overlays.Options.Sections.Graphics
{ {
public class MainMenuOptions : OptionsSubsection public class MainMenuOptions : OptionsSubsection
{ {
protected override string Header => "Main Menu"; protected override string Header => "User Interface";
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(OsuConfigManager config) private void load(OsuConfigManager config)
{ {
Children = new[] Children = new[]
{ {
new OsuCheckbox
{
LabelText = "Snow",
Bindable = config.GetBindable<bool>(OsuConfig.MenuSnow)
},
new OsuCheckbox new OsuCheckbox
{ {
LabelText = "Parallax", LabelText = "Parallax",
Bindable = config.GetBindable<bool>(OsuConfig.MenuParallax) Bindable = config.GetBindable<bool>(OsuConfig.MenuParallax)
}, },
new OsuCheckbox
{
LabelText = "Menu tips",
Bindable = config.GetBindable<bool>(OsuConfig.ShowMenuTips)
},
new OsuCheckbox
{
LabelText = "Interface voices",
Bindable = config.GetBindable<bool>(OsuConfig.MenuVoice)
},
new OsuCheckbox
{
LabelText = "osu! music theme",
Bindable = config.GetBindable<bool>(OsuConfig.MenuMusic)
},
}; };
} }
} }

View File

@ -14,7 +14,7 @@ namespace osu.Game.Overlays.Options.Sections.Graphics
protected override string Header => "Renderer"; protected override string Header => "Renderer";
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(OsuConfigManager osuConfig, FrameworkConfigManager config) private void load(FrameworkConfigManager config, OsuConfigManager osuConfig)
{ {
// NOTE: Compatability mode omitted // NOTE: Compatability mode omitted
Children = new Drawable[] Children = new Drawable[]
@ -27,18 +27,8 @@ namespace osu.Game.Overlays.Options.Sections.Graphics
}, },
new OsuCheckbox new OsuCheckbox
{ {
LabelText = "Show FPS counter", LabelText = "Show FPS",
Bindable = osuConfig.GetBindable<bool>(OsuConfig.FpsCounter), Bindable = osuConfig.GetBindable<bool>(OsuConfig.ShowFpsDisplay)
},
new OsuCheckbox
{
LabelText = "Reduce dropped frames",
Bindable = osuConfig.GetBindable<bool>(OsuConfig.ForceFrameFlush),
},
new OsuCheckbox
{
LabelText = "Detect performance issues",
Bindable = osuConfig.GetBindable<bool>(OsuConfig.DetectPerformanceIssues),
}, },
}; };
} }

View File

@ -1,27 +0,0 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.Allocation;
using osu.Game.Configuration;
using osu.Game.Graphics.UserInterface;
namespace osu.Game.Overlays.Options.Sections.Graphics
{
public class SongSelectGraphicsOptions : OptionsSubsection
{
protected override string Header => "Song Select";
[BackgroundDependencyLoader]
private void load(OsuConfigManager config)
{
Children = new[]
{
new OsuCheckbox
{
LabelText = "Show thumbnails",
Bindable = config.GetBindable<bool>(OsuConfig.SongSelectThumbnails)
}
};
}
}
}

View File

@ -20,7 +20,6 @@ namespace osu.Game.Overlays.Options.Sections
new LayoutOptions(), new LayoutOptions(),
new DetailOptions(), new DetailOptions(),
new MainMenuOptions(), new MainMenuOptions(),
new SongSelectGraphicsOptions(),
}; };
} }
} }

View File

@ -17,13 +17,8 @@ namespace osu.Game.Overlays.Options.Sections.Input
new OsuButton new OsuButton
{ {
RelativeSizeAxes = Axes.X, RelativeSizeAxes = Axes.X,
Text = "Change keyboard bindings" Text = "Key Configuration"
}, },
new OsuButton
{
RelativeSizeAxes = Axes.X,
Text = "osu!mania layout"
}
}; };
} }
} }

View File

@ -2,7 +2,9 @@
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Configuration;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Input;
using osu.Game.Configuration; using osu.Game.Configuration;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterface;
@ -13,44 +15,24 @@ namespace osu.Game.Overlays.Options.Sections.Input
protected override string Header => "Mouse"; protected override string Header => "Mouse";
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(OsuConfigManager config) private void load(OsuConfigManager osuConfig, FrameworkConfigManager config)
{ {
Children = new Drawable[] Children = new Drawable[]
{ {
new OptionSlider<double, SensitivitySlider>
{
LabelText = "Sensitivity",
Bindable = config.GetBindable<double>(OsuConfig.MouseSpeed)
},
new OsuCheckbox
{
LabelText = "Raw input",
Bindable = config.GetBindable<bool>(OsuConfig.RawInput)
},
new OsuCheckbox
{
LabelText = "Map absolute raw input to the osu! window",
Bindable = config.GetBindable<bool>(OsuConfig.AbsoluteToOsuWindow)
},
new OptionEnumDropdown<ConfineMouseMode> new OptionEnumDropdown<ConfineMouseMode>
{ {
LabelText = "Confine mouse cursor", LabelText = "Confine mouse cursor",
Bindable = config.GetBindable<ConfineMouseMode>(OsuConfig.ConfineMouse), Bindable = config.GetBindable<ConfineMouseMode>(FrameworkConfig.ConfineMouseMode),
}, },
new OsuCheckbox new OsuCheckbox
{ {
LabelText = "Disable mouse wheel in play mode", LabelText = "Disable mouse wheel during gameplay",
Bindable = config.GetBindable<bool>(OsuConfig.MouseDisableWheel) Bindable = osuConfig.GetBindable<bool>(OsuConfig.MouseDisableWheel)
}, },
new OsuCheckbox new OsuCheckbox
{ {
LabelText = "Disable mouse buttons in play mode", LabelText = "Disable mouse buttons during gameplay",
Bindable = config.GetBindable<bool>(OsuConfig.MouseDisableButtons) Bindable = osuConfig.GetBindable<bool>(OsuConfig.MouseDisableButtons)
},
new OsuCheckbox
{
LabelText = "Cursor ripples",
Bindable = config.GetBindable<bool>(OsuConfig.CursorRipple)
}, },
}; };
} }

View File

@ -18,7 +18,6 @@ namespace osu.Game.Overlays.Options.Sections
{ {
new MouseOptions(), new MouseOptions(),
new KeyboardOptions(), new KeyboardOptions(),
new OtherInputOptions(),
}; };
} }
} }

View File

@ -3,7 +3,6 @@
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Graphics.UserInterface;
using OpenTK; using OpenTK;
namespace osu.Game.Overlays.Options.Sections namespace osu.Game.Overlays.Options.Sections
@ -18,27 +17,7 @@ namespace osu.Game.Overlays.Options.Sections
FlowContent.Spacing = new Vector2(0, 5); FlowContent.Spacing = new Vector2(0, 5);
Children = new Drawable[] Children = new Drawable[]
{ {
new OsuButton
{
RelativeSizeAxes = Axes.X,
Text = "Delete all unranked maps",
},
new OsuButton
{
RelativeSizeAxes = Axes.X,
Text = "Repair folder permissions",
},
new OsuButton
{
RelativeSizeAxes = Axes.X,
Text = "Mark all maps as played",
},
new OsuButton
{
RelativeSizeAxes = Axes.X,
Text = "Run osu! updater",
},
}; };
} }
} }
} }

View File

@ -1,53 +0,0 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Game.Configuration;
using osu.Game.Graphics.UserInterface;
namespace osu.Game.Overlays.Options.Sections.Online
{
public class InGameChatOptions : OptionsSubsection
{
protected override string Header => "Chat";
[BackgroundDependencyLoader]
private void load(OsuConfigManager config)
{
Children = new Drawable[]
{
new OsuCheckbox
{
LabelText = "Filter offensive words",
Bindable = config.GetBindable<bool>(OsuConfig.ChatFilter)
},
new OsuCheckbox
{
LabelText = "Filter foreign characters",
Bindable = config.GetBindable<bool>(OsuConfig.ChatRemoveForeign)
},
new OsuCheckbox
{
LabelText = "Log private messages",
Bindable = config.GetBindable<bool>(OsuConfig.LogPrivateMessages)
},
new OsuCheckbox
{
LabelText = "Block private messages from non-friends",
Bindable = config.GetBindable<bool>(OsuConfig.BlockNonFriendPM)
},
new OptionLabel { Text = "Chat ignore list (space-seperated list)" },
new OptionTextBox {
RelativeSizeAxes = Axes.X,
Bindable = config.GetBindable<string>(OsuConfig.IgnoreList)
},
new OptionLabel { Text = "Chat highlight words (space-seperated list)" },
new OptionTextBox {
RelativeSizeAxes = Axes.X,
Bindable = config.GetBindable<string>(OsuConfig.HighlightWords)
},
};
}
}
}

View File

@ -1,43 +0,0 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Game.Configuration;
using osu.Game.Graphics.UserInterface;
namespace osu.Game.Overlays.Options.Sections.Online
{
public class IntegrationOptions : OptionsSubsection
{
protected override string Header => "Integration";
[BackgroundDependencyLoader]
private void load(OsuConfigManager config)
{
Children = new Drawable[]
{
new OsuCheckbox
{
LabelText = "Integrate with Yahoo! status display",
Bindable = config.GetBindable<bool>(OsuConfig.YahooIntegration)
},
new OsuCheckbox
{
LabelText = "Integrate with MSN Live status display",
Bindable = config.GetBindable<bool>(OsuConfig.MsnIntegration)
},
new OsuCheckbox
{
LabelText = "Automatically start osu!direct downloads",
Bindable = config.GetBindable<bool>(OsuConfig.AutomaticDownload)
},
new OsuCheckbox
{
LabelText = "Prefer no-video downloads",
Bindable = config.GetBindable<bool>(OsuConfig.AutomaticDownloadNoVideo)
},
};
}
}
}

View File

@ -1,53 +0,0 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Game.Configuration;
using osu.Game.Graphics.UserInterface;
namespace osu.Game.Overlays.Options.Sections.Online
{
public class NotificationsOptions : OptionsSubsection
{
protected override string Header => "Notifications";
[BackgroundDependencyLoader]
private void load(OsuConfigManager config)
{
Children = new Drawable[]
{
new OsuCheckbox
{
LabelText = "Enable chat ticker",
Bindable = config.GetBindable<bool>(OsuConfig.Ticker)
},
new OsuCheckbox
{
LabelText = "Show a notification popup when someone says your name",
Bindable = config.GetBindable<bool>(OsuConfig.ChatHighlightName)
},
new OsuCheckbox
{
LabelText = "Show chat message notifications",
Bindable = config.GetBindable<bool>(OsuConfig.ChatMessageNotification)
},
new OsuCheckbox
{
LabelText = "Play a sound when someone says your name",
Bindable = config.GetBindable<bool>(OsuConfig.ChatAudibleHighlight)
},
new OsuCheckbox
{
LabelText = "Show notification popups instantly during gameplay",
Bindable = config.GetBindable<bool>(OsuConfig.PopupDuringGameplay)
},
new OsuCheckbox
{
LabelText = "Show notification popups when friends change status",
Bindable = config.GetBindable<bool>(OsuConfig.NotifyFriends)
},
};
}
}
}

View File

@ -1,33 +0,0 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Game.Configuration;
using osu.Game.Graphics.UserInterface;
namespace osu.Game.Overlays.Options.Sections.Online
{
public class PrivacyOptions : OptionsSubsection
{
protected override string Header => "Privacy";
[BackgroundDependencyLoader]
private void load(OsuConfigManager config)
{
Children = new Drawable[]
{
new OsuCheckbox
{
LabelText = "Share your city location with others",
Bindable = config.GetBindable<bool>(OsuConfig.DisplayCityLocation)
},
new OsuCheckbox
{
LabelText = "Allow multiplayer game invites from all users",
Bindable = config.GetBindable<bool>(OsuConfig.AllowPublicInvites)
},
};
}
}
}

View File

@ -3,7 +3,6 @@
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Overlays.Options.Sections.Online;
namespace osu.Game.Overlays.Options.Sections namespace osu.Game.Overlays.Options.Sections
{ {
@ -16,10 +15,6 @@ namespace osu.Game.Overlays.Options.Sections
{ {
Children = new Drawable[] Children = new Drawable[]
{ {
new InGameChatOptions(),
new PrivacyOptions(),
new NotificationsOptions(),
new IntegrationOptions(),
}; };
} }
} }

View File

@ -21,43 +21,6 @@ namespace osu.Game.Overlays.Options.Sections
FlowContent.Spacing = new Vector2(0, 5); FlowContent.Spacing = new Vector2(0, 5);
Children = new Drawable[] Children = new Drawable[]
{ {
new OptionLabel { Text = "TODO: Skin preview textures" },
new OptionLabel { Text = "Current skin: TODO dropdown" },
new OsuButton
{
RelativeSizeAxes = Axes.X,
Text = "Preview gameplay",
},
new OsuButton
{
RelativeSizeAxes = Axes.X,
Text = "Open skin folder",
},
new OsuButton
{
RelativeSizeAxes = Axes.X,
Text = "Export as .osk",
},
new OsuCheckbox
{
LabelText = "Ignore all beatmap skins",
Bindable = config.GetBindable<bool>(OsuConfig.IgnoreBeatmapSkins)
},
new OsuCheckbox
{
LabelText = "Use skin's sound samples",
Bindable = config.GetBindable<bool>(OsuConfig.SkinSamples)
},
new OsuCheckbox
{
LabelText = "Use Taiko skin for Taiko mode",
Bindable = config.GetBindable<bool>(OsuConfig.UseTaikoSkin)
},
new OsuCheckbox
{
LabelText = "Always use skin cursor",
Bindable = config.GetBindable<bool>(OsuConfig.UseSkinCursor)
},
new OptionSlider<double, SizeSlider> new OptionSlider<double, SizeSlider>
{ {
LabelText = "Menu cursor size", LabelText = "Menu cursor size",
@ -68,11 +31,6 @@ namespace osu.Game.Overlays.Options.Sections
LabelText = "Gameplay cursor size", LabelText = "Gameplay cursor size",
Bindable = config.GetBindable<double>(OsuConfig.GameplayCursorSize) Bindable = config.GetBindable<double>(OsuConfig.GameplayCursorSize)
}, },
new OsuCheckbox
{
LabelText = "Automatic cursor size",
Bindable = config.GetBindable<bool>(OsuConfig.AutomaticCursorSizing)
},
}; };
} }

View File

@ -51,7 +51,6 @@ namespace osu.Game.Overlays
new AudioSection(), new AudioSection(),
new SkinSection(), new SkinSection(),
new InputSection(), new InputSection(),
new EditorSection(),
new OnlineSection(), new OnlineSection(),
new MaintenanceSection(), new MaintenanceSection(),
new DebugSection(), new DebugSection(),

View File

@ -202,8 +202,6 @@ namespace osu.Game.Rulesets.UI
protected HitRenderer(WorkingBeatmap beatmap) protected HitRenderer(WorkingBeatmap beatmap)
: base(beatmap) : base(beatmap)
{ {
KeyConversionInputManager.Add(Playfield = CreatePlayfield());
InputManager.Add(content = new Container InputManager.Add(content = new Container
{ {
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
@ -216,6 +214,8 @@ namespace osu.Game.Rulesets.UI
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load() private void load()
{ {
KeyConversionInputManager.Add(Playfield = CreatePlayfield());
loadObjects(); loadObjects();
if (InputManager?.ReplayInputHandler != null) if (InputManager?.ReplayInputHandler != null)

View File

@ -69,6 +69,13 @@ namespace osu.Game.Screens.Select
base.OnResuming(last); base.OnResuming(last);
} }
protected override void OnSuspending(Screen next)
{
modSelect.Hide();
base.OnSuspending(next);
}
protected override bool OnExiting(Screen next) protected override bool OnExiting(Screen next)
{ {
if (modSelect.State == Visibility.Visible) if (modSelect.State == Visibility.Visible)

View File

@ -78,6 +78,7 @@
<Compile Include="Overlays\Music\FilterControl.cs" /> <Compile Include="Overlays\Music\FilterControl.cs" />
<Compile Include="Overlays\Music\PlaylistItem.cs" /> <Compile Include="Overlays\Music\PlaylistItem.cs" />
<Compile Include="Overlays\Music\PlaylistList.cs" /> <Compile Include="Overlays\Music\PlaylistList.cs" />
<Compile Include="Overlays\Options\Sections\Audio\MainMenuOptions.cs" />
<Compile Include="Overlays\Toolbar\ToolbarChatButton.cs" /> <Compile Include="Overlays\Toolbar\ToolbarChatButton.cs" />
<Compile Include="Rulesets\Beatmaps\BeatmapConverter.cs" /> <Compile Include="Rulesets\Beatmaps\BeatmapConverter.cs" />
<Compile Include="Rulesets\Beatmaps\BeatmapProcessor.cs" /> <Compile Include="Rulesets\Beatmaps\BeatmapProcessor.cs" />
@ -357,7 +358,6 @@
<Compile Include="Overlays\Options\Sections\Graphics\LayoutOptions.cs" /> <Compile Include="Overlays\Options\Sections\Graphics\LayoutOptions.cs" />
<Compile Include="Overlays\Options\Sections\Graphics\DetailOptions.cs" /> <Compile Include="Overlays\Options\Sections\Graphics\DetailOptions.cs" />
<Compile Include="Overlays\Options\Sections\Graphics\MainMenuOptions.cs" /> <Compile Include="Overlays\Options\Sections\Graphics\MainMenuOptions.cs" />
<Compile Include="Overlays\Options\Sections\Graphics\SongSelectGraphicsOptions.cs" />
<Compile Include="Overlays\Options\Sections\GameplaySection.cs" /> <Compile Include="Overlays\Options\Sections\GameplaySection.cs" />
<Compile Include="Overlays\Options\Sections\Gameplay\GeneralOptions.cs" /> <Compile Include="Overlays\Options\Sections\Gameplay\GeneralOptions.cs" />
<Compile Include="Overlays\Options\Sections\Gameplay\SongSelectOptions.cs" /> <Compile Include="Overlays\Options\Sections\Gameplay\SongSelectOptions.cs" />
@ -368,25 +368,17 @@
<Compile Include="Overlays\Options\Sections\InputSection.cs" /> <Compile Include="Overlays\Options\Sections\InputSection.cs" />
<Compile Include="Overlays\Options\Sections\Input\MouseOptions.cs" /> <Compile Include="Overlays\Options\Sections\Input\MouseOptions.cs" />
<Compile Include="Overlays\Options\Sections\Input\KeyboardOptions.cs" /> <Compile Include="Overlays\Options\Sections\Input\KeyboardOptions.cs" />
<Compile Include="Overlays\Options\Sections\Input\OtherInputOptions.cs" />
<Compile Include="Overlays\Options\Sections\OnlineSection.cs" /> <Compile Include="Overlays\Options\Sections\OnlineSection.cs" />
<Compile Include="Overlays\Options\Sections\Online\IntegrationOptions.cs" />
<Compile Include="Overlays\Options\Sections\Online\InGameChatOptions.cs" />
<Compile Include="Overlays\Options\Sections\EditorSection.cs" />
<Compile Include="Overlays\Options\Sections\SkinSection.cs" /> <Compile Include="Overlays\Options\Sections\SkinSection.cs" />
<Compile Include="Overlays\Options\Sections\Online\PrivacyOptions.cs" />
<Compile Include="Overlays\Options\Sections\Online\NotificationsOptions.cs" />
<Compile Include="Graphics\UserInterface\OsuCheckbox.cs" /> <Compile Include="Graphics\UserInterface\OsuCheckbox.cs" />
<Compile Include="Overlays\Options\SidebarButton.cs" /> <Compile Include="Overlays\Options\SidebarButton.cs" />
<Compile Include="Overlays\Options\OptionTextBox.cs" /> <Compile Include="Overlays\Options\OptionTextBox.cs" />
<Compile Include="Overlays\Options\OptionSlider.cs" /> <Compile Include="Overlays\Options\OptionSlider.cs" />
<Compile Include="Configuration\ProgressBarType.cs" />
<Compile Include="Overlays\Options\OptionEnumDropdown.cs" /> <Compile Include="Overlays\Options\OptionEnumDropdown.cs" />
<Compile Include="Configuration\RankingType.cs" /> <Compile Include="Configuration\RankingType.cs" />
<Compile Include="Configuration\ScoreMeterType.cs" /> <Compile Include="Configuration\ScoreMeterType.cs" />
<Compile Include="Configuration\ReleaseStream.cs" /> <Compile Include="Configuration\ReleaseStream.cs" />
<Compile Include="Configuration\ScreenshotFormat.cs" /> <Compile Include="Configuration\ScreenshotFormat.cs" />
<Compile Include="Configuration\ConfineMouseMode.cs" />
<Compile Include="Graphics\OsuColour.cs" /> <Compile Include="Graphics\OsuColour.cs" />
<Compile Include="Screens\Select\FilterControl.cs" /> <Compile Include="Screens\Select\FilterControl.cs" />
<Compile Include="Screens\Select\SearchTextBox.cs" /> <Compile Include="Screens\Select\SearchTextBox.cs" />