1
0
mirror of https://github.com/ppy/osu.git synced 2024-09-29 17:47:26 +08:00
osu-lazer/osu.Game/Modes/RulesetCollection.cs

40 lines
1.3 KiB
C#
Raw Normal View History

// 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;
using System.Collections.Concurrent;
using System.Collections.Generic;
2017-04-15 04:52:46 +08:00
using System.Linq;
namespace osu.Game.Modes
{
public static class RulesetCollection
{
private static readonly ConcurrentDictionary<int, Ruleset> available_rulesets = new ConcurrentDictionary<int, Ruleset>();
public static void Register(Type type)
{
Ruleset ruleset = Activator.CreateInstance(type) as Ruleset;
if (ruleset == null)
return;
available_rulesets.TryAdd(available_rulesets.Count, ruleset);
}
public static Ruleset GetRuleset(int rulesetId)
{
Ruleset ruleset;
if (!available_rulesets.TryGetValue(rulesetId, out ruleset))
throw new InvalidOperationException($"Ruleset id {rulesetId} doesn't exist. How did you trigger this?");
return ruleset;
}
2017-04-15 04:52:46 +08:00
public static int GetId(Ruleset ruleset) => available_rulesets.First(kvp => kvp.Value == ruleset).Key;
public static IEnumerable<Ruleset> AllRulesets => available_rulesets.Values;
}
}