mirror of
https://github.com/ppy/osu.git
synced 2024-12-13 08:32:57 +08:00
Add basic skin database model layout and importing
This commit is contained in:
parent
2910fc53dc
commit
4c14b32783
@ -13,6 +13,7 @@ using osu.Game.IO;
|
|||||||
using osu.Game.Rulesets;
|
using osu.Game.Rulesets;
|
||||||
using DatabasedKeyBinding = osu.Game.Input.Bindings.DatabasedKeyBinding;
|
using DatabasedKeyBinding = osu.Game.Input.Bindings.DatabasedKeyBinding;
|
||||||
using LogLevel = Microsoft.Extensions.Logging.LogLevel;
|
using LogLevel = Microsoft.Extensions.Logging.LogLevel;
|
||||||
|
using osu.Game.Skinning;
|
||||||
|
|
||||||
namespace osu.Game.Database
|
namespace osu.Game.Database
|
||||||
{
|
{
|
||||||
@ -26,6 +27,7 @@ namespace osu.Game.Database
|
|||||||
public DbSet<DatabasedSetting> DatabasedSetting { get; set; }
|
public DbSet<DatabasedSetting> DatabasedSetting { get; set; }
|
||||||
public DbSet<FileInfo> FileInfo { get; set; }
|
public DbSet<FileInfo> FileInfo { get; set; }
|
||||||
public DbSet<RulesetInfo> RulesetInfo { get; set; }
|
public DbSet<RulesetInfo> RulesetInfo { get; set; }
|
||||||
|
public DbSet<SkinInfo> SkinInfo { get; set; }
|
||||||
|
|
||||||
private readonly string connectionString;
|
private readonly string connectionString;
|
||||||
|
|
||||||
|
@ -187,7 +187,9 @@ namespace osu.Game
|
|||||||
CursorOverrideContainer.CanShowCursor = currentScreen?.CursorVisible ?? false;
|
CursorOverrideContainer.CanShowCursor = currentScreen?.CursorVisible ?? false;
|
||||||
|
|
||||||
// hook up notifications to components.
|
// hook up notifications to components.
|
||||||
|
SkinManager.PostNotification = n => notifications?.Post(n);
|
||||||
BeatmapManager.PostNotification = n => notifications?.Post(n);
|
BeatmapManager.PostNotification = n => notifications?.Post(n);
|
||||||
|
|
||||||
BeatmapManager.GetStableStorage = GetStorageForStableInstall;
|
BeatmapManager.GetStableStorage = GetStorageForStableInstall;
|
||||||
|
|
||||||
AddRange(new Drawable[]
|
AddRange(new Drawable[]
|
||||||
|
@ -30,6 +30,7 @@ using osu.Game.Input.Bindings;
|
|||||||
using osu.Game.IO;
|
using osu.Game.IO;
|
||||||
using osu.Game.Rulesets;
|
using osu.Game.Rulesets;
|
||||||
using osu.Game.Rulesets.Scoring;
|
using osu.Game.Rulesets.Scoring;
|
||||||
|
using osu.Game.Skinning;
|
||||||
|
|
||||||
namespace osu.Game
|
namespace osu.Game
|
||||||
{
|
{
|
||||||
@ -39,6 +40,8 @@ namespace osu.Game
|
|||||||
|
|
||||||
protected BeatmapManager BeatmapManager;
|
protected BeatmapManager BeatmapManager;
|
||||||
|
|
||||||
|
protected SkinManager SkinManager;
|
||||||
|
|
||||||
protected RulesetStore RulesetStore;
|
protected RulesetStore RulesetStore;
|
||||||
|
|
||||||
protected FileStore FileStore;
|
protected FileStore FileStore;
|
||||||
@ -103,6 +106,8 @@ namespace osu.Game
|
|||||||
|
|
||||||
runMigrations();
|
runMigrations();
|
||||||
|
|
||||||
|
dependencies.Cache(SkinManager = new SkinManager(Host.Storage, contextFactory, Host));
|
||||||
|
|
||||||
dependencies.Cache(API = new APIAccess
|
dependencies.Cache(API = new APIAccess
|
||||||
{
|
{
|
||||||
Username = LocalConfig.Get<string>(OsuSetting.Username),
|
Username = LocalConfig.Get<string>(OsuSetting.Username),
|
||||||
@ -120,6 +125,7 @@ namespace osu.Game
|
|||||||
|
|
||||||
fileImporters.Add(BeatmapManager);
|
fileImporters.Add(BeatmapManager);
|
||||||
fileImporters.Add(ScoreStore);
|
fileImporters.Add(ScoreStore);
|
||||||
|
fileImporters.Add(SkinManager);
|
||||||
|
|
||||||
//this completely overrides the framework default. will need to change once we make a proper FontStore.
|
//this completely overrides the framework default. will need to change once we make a proper FontStore.
|
||||||
dependencies.Cache(Fonts = new FontStore { ScaleAdjust = 100 });
|
dependencies.Cache(Fonts = new FontStore { ScaleAdjust = 100 });
|
||||||
|
25
osu.Game/Skinning/SkinFileInfo.cs
Normal file
25
osu.Game/Skinning/SkinFileInfo.cs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
using osu.Game.Database;
|
||||||
|
using osu.Game.IO;
|
||||||
|
|
||||||
|
namespace osu.Game.Skinning
|
||||||
|
{
|
||||||
|
public class SkinFileInfo : INamedFileInfo
|
||||||
|
{
|
||||||
|
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||||
|
public int ID { get; set; }
|
||||||
|
|
||||||
|
public int SkinInfoID { get; set; }
|
||||||
|
|
||||||
|
public int FileInfoID { get; set; }
|
||||||
|
|
||||||
|
public FileInfo FileInfo { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public string Filename { get; set; }
|
||||||
|
}
|
||||||
|
}
|
25
osu.Game/Skinning/SkinInfo.cs
Normal file
25
osu.Game/Skinning/SkinInfo.cs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
using osu.Game.Database;
|
||||||
|
|
||||||
|
namespace osu.Game.Skinning
|
||||||
|
{
|
||||||
|
public class SkinInfo : IHasFiles<SkinFileInfo>, IHasPrimaryKey, ISoftDelete
|
||||||
|
{
|
||||||
|
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||||
|
public int ID { get; set; }
|
||||||
|
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
public string Creator { get; set; }
|
||||||
|
|
||||||
|
public List<SkinFileInfo> Files { get; set; }
|
||||||
|
|
||||||
|
public bool DeletePending { get; set; }
|
||||||
|
|
||||||
|
public static SkinInfo Default { get; } = new SkinInfo { Name = "osu!lazer", Creator = "team osu!" };
|
||||||
|
}
|
||||||
|
}
|
39
osu.Game/Skinning/SkinManager.cs
Normal file
39
osu.Game/Skinning/SkinManager.cs
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using osu.Framework.Configuration;
|
||||||
|
using osu.Framework.Platform;
|
||||||
|
using osu.Game.Database;
|
||||||
|
using osu.Game.IO.Archives;
|
||||||
|
|
||||||
|
namespace osu.Game.Skinning
|
||||||
|
{
|
||||||
|
public class SkinManager : ArchiveModelManager<SkinInfo, SkinFileInfo>
|
||||||
|
{
|
||||||
|
public readonly Bindable<SkinInfo> CurrentSkinInfo = new Bindable<SkinInfo>(SkinInfo.Default) { Default = SkinInfo.Default };
|
||||||
|
|
||||||
|
public override string[] HandledExtensions => new[] { ".osk" };
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns a list of all usable <see cref="SkinInfo"/>s.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A list of available <see cref="SkinInfo"/>.</returns>
|
||||||
|
public List<SkinInfo> GetAllUsableSkins()
|
||||||
|
{
|
||||||
|
var userSkins = ModelStore.ConsumableItems.Where(s => !s.DeletePending).ToList();
|
||||||
|
userSkins.Insert(0, SkinInfo.Default);
|
||||||
|
return userSkins;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override SkinInfo CreateModel(ArchiveReader archive) => new SkinInfo { Name = archive.Name };
|
||||||
|
|
||||||
|
private SkinStore store;
|
||||||
|
|
||||||
|
public SkinManager(Storage storage, DatabaseContextFactory contextFactory, IIpcHost importHost)
|
||||||
|
: base(storage, contextFactory, new SkinStore(contextFactory, storage), importHost)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
22
osu.Game/Skinning/SkinStore.cs
Normal file
22
osu.Game/Skinning/SkinStore.cs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using System.Linq;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using osu.Framework.Platform;
|
||||||
|
using osu.Game.Database;
|
||||||
|
|
||||||
|
namespace osu.Game.Skinning
|
||||||
|
{
|
||||||
|
public class SkinStore : MutableDatabaseBackedStore<SkinInfo>
|
||||||
|
{
|
||||||
|
public SkinStore(DatabaseContextFactory contextFactory, Storage storage = null)
|
||||||
|
: base(contextFactory, storage)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override IQueryable<SkinInfo> AddIncludesForConsumption(IQueryable<SkinInfo> query) =>
|
||||||
|
base.AddIncludesForConsumption(query)
|
||||||
|
.Include(s => s.Files).ThenInclude(f => f.FileInfo);
|
||||||
|
}
|
||||||
|
}
|
@ -850,6 +850,10 @@
|
|||||||
<Compile Include="Screens\Tournament\Teams\DrawingsTeam.cs" />
|
<Compile Include="Screens\Tournament\Teams\DrawingsTeam.cs" />
|
||||||
<Compile Include="Screens\Tournament\Teams\ITeamList.cs" />
|
<Compile Include="Screens\Tournament\Teams\ITeamList.cs" />
|
||||||
<Compile Include="Screens\Tournament\Teams\StorageBackedTeamList.cs" />
|
<Compile Include="Screens\Tournament\Teams\StorageBackedTeamList.cs" />
|
||||||
|
<Compile Include="Skinning\SkinFileInfo.cs" />
|
||||||
|
<Compile Include="Skinning\SkinInfo.cs" />
|
||||||
|
<Compile Include="Skinning\SkinManager.cs" />
|
||||||
|
<Compile Include="Skinning\SkinStore.cs" />
|
||||||
<Compile Include="Storyboards\CommandLoop.cs" />
|
<Compile Include="Storyboards\CommandLoop.cs" />
|
||||||
<Compile Include="Storyboards\CommandTimeline.cs" />
|
<Compile Include="Storyboards\CommandTimeline.cs" />
|
||||||
<Compile Include="Storyboards\CommandTimelineGroup.cs" />
|
<Compile Include="Storyboards\CommandTimelineGroup.cs" />
|
||||||
|
Loading…
Reference in New Issue
Block a user