1
0
mirror of https://github.com/ppy/osu.git synced 2024-09-30 00:07:25 +08:00
osu-lazer/osu.Game/Overlays/Mods/ModPanel.cs

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

109 lines
3.0 KiB
C#
Raw Normal View History

// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
2023-05-02 19:15:33 +08:00
using System.Collections.Generic;
using osu.Framework.Allocation;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
2023-05-02 19:15:33 +08:00
using osu.Framework.Graphics.Containers;
using osu.Framework.Localisation;
using osu.Game.Graphics;
using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.UI;
using osuTK;
namespace osu.Game.Overlays.Mods
{
public partial class ModPanel : ModSelectPanel, IFilterable
{
2022-05-12 00:29:14 +08:00
public Mod Mod => modState.Mod;
public override BindableBool Active => modState.Active;
2022-05-12 00:29:14 +08:00
protected override float IdleSwitchWidth => 54;
protected override float ExpandedSwitchWidth => 70;
private readonly ModState modState;
2022-05-12 00:37:31 +08:00
public ModPanel(ModState modState)
{
2022-05-12 00:37:31 +08:00
this.modState = modState;
Title = Mod.Name;
Description = Mod.Description;
SwitchContainer.Child = new ModSwitchSmall(Mod)
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Active = { BindTarget = Active },
Shear = new Vector2(-ShearedOverlayContainer.SHEAR, 0),
Scale = new Vector2(HEIGHT / ModSwitchSmall.DEFAULT_SIZE)
};
}
2022-05-12 00:37:31 +08:00
public ModPanel(Mod mod)
: this(new ModState(mod))
{
}
[BackgroundDependencyLoader]
private void load(OsuColour colours)
{
AccentColour = colours.ForModType(Mod.Type);
}
protected override void LoadComplete()
{
base.LoadComplete();
2023-05-06 03:41:30 +08:00
modState.ValidForSelection.BindValueChanged(_ => updateFilterState());
modState.MatchingTextFilter.BindValueChanged(_ => updateFilterState(), true);
}
2022-02-20 20:40:52 +08:00
protected override void Select()
{
modState.PendingConfiguration = Mod.RequiresConfiguration;
Active.Value = true;
}
protected override void Deselect()
{
modState.PendingConfiguration = false;
Active.Value = false;
}
2023-05-06 03:41:30 +08:00
/// <summary>
2023-06-02 16:33:38 +08:00
/// Whether the <see cref="ModPanel"/> is passing all filters and visible for user
2023-05-06 03:41:30 +08:00
/// </summary>
2023-06-02 16:33:38 +08:00
public bool Visible => modState.Visible;
2023-05-06 03:41:30 +08:00
2022-02-20 20:40:52 +08:00
#region Filtering support
2023-05-02 19:15:33 +08:00
public override IEnumerable<LocalisableString> FilterTerms => new[]
2022-02-20 20:40:52 +08:00
{
2023-05-02 19:15:33 +08:00
Mod.Name,
Mod.Acronym,
Mod.Description
};
public override bool MatchingFilter
{
get => modState.MatchingTextFilter.Value;
2023-05-02 19:15:33 +08:00
set
{
if (modState.MatchingTextFilter.Value == value)
2023-05-02 19:15:33 +08:00
return;
modState.MatchingTextFilter.Value = value;
2023-05-02 19:15:33 +08:00
}
2022-02-20 20:40:52 +08:00
}
2023-05-06 03:41:30 +08:00
private void updateFilterState()
{
2023-06-02 16:33:38 +08:00
this.FadeTo(Visible ? 1 : 0);
2023-05-06 03:41:30 +08:00
}
2022-02-20 20:40:52 +08:00
#endregion
}
}