forked from sin365/AxibugEmuOnline
40 lines
1.4 KiB
C#
40 lines
1.4 KiB
C#
using AxibugProtobuf;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace AxibugEmuOnline.Client.Settings
|
|
{
|
|
/// <summary>
|
|
/// 管理键位映射设置
|
|
/// </summary>
|
|
public class KeyMapperSetting
|
|
{
|
|
Dictionary<RomPlatformType, InternalEmuCoreBinder> m_binders = new Dictionary<RomPlatformType, InternalEmuCoreBinder>();
|
|
Dictionary<Type, InternalEmuCoreBinder> m_bindersByType = new Dictionary<Type, InternalEmuCoreBinder>();
|
|
public KeyMapperSetting()
|
|
{
|
|
var baseType = typeof(InternalEmuCoreBinder);
|
|
foreach (var t in baseType.Assembly.ExportedTypes)
|
|
{
|
|
if (t.IsAbstract) continue;
|
|
if (!baseType.IsAssignableFrom(t)) continue;
|
|
|
|
var binderIns = Activator.CreateInstance(t) as InternalEmuCoreBinder;
|
|
m_binders.Add(binderIns.Platform, binderIns);
|
|
m_bindersByType.Add(binderIns.GetType(), binderIns);
|
|
}
|
|
}
|
|
|
|
public T GetBinder<T>() where T : InternalEmuCoreBinder
|
|
{
|
|
m_bindersByType.TryGetValue(typeof(T), out var binder);
|
|
return binder as T;
|
|
}
|
|
|
|
public T GetBinder<T>(RomPlatformType romType) where T : InternalEmuCoreBinder
|
|
{
|
|
m_binders.TryGetValue(romType, out var binder);
|
|
return binder as T;
|
|
}
|
|
}
|
|
} |