Net.Like.Xue.Tokyo/Packages-Local/Com.Project.B.Unity/PlayerSettings/ScriptablePlayerKeyMap.cs

127 lines
5.1 KiB
C#

using System.Collections;
using System.Collections.Generic;
using BITKit;
using UnityEngine;
using UnityEngine.InputSystem;
namespace Project.B.Player
{
public class ScriptablePlayerKeyMap : ScriptableObject, IPlayerKeyMap<InputAction>, IUXKeyMap<InputAction>,ICarKeyMap<InputAction>
{
[RuntimeInitializeOnLoadMethod]
private static void Reload()
{
CachedKeyDictionary.Clear();
}
private static readonly Dictionary<string, object> CachedKeyDictionary = new();
[Header(nameof(IPlayerKeyMap<InputAction>))]
[SerializeField] private InputActionReference movementAction;
[SerializeField] private InputActionReference viewAction;
[SerializeField] private InputActionReference jumpAction;
[SerializeField] private InputActionReference runAction;
[SerializeField] private InputActionReference crouchAction;
[SerializeField] private InputActionReference toggleCameraAction;
[SerializeField] private InputActionReference interactAction;
[SerializeField] private InputActionReference holsterAction;
[SerializeField] private InputActionReference primaryAction;
[SerializeField] private InputActionReference secondaryAction;
[SerializeField] private InputActionReference sidearmAction;
[SerializeField] private InputActionReference suppliesAction;
[SerializeField] private InputActionReference tacticAction;
[SerializeField] private InputActionReference lethalAction;
[SerializeField] private InputActionReference killStreakAction;
[SerializeField] private InputActionReference scrollAction;
[SerializeField] private InputActionReference meleeAction;
[SerializeField] private InputActionReference reloadAction;
[SerializeField] private InputActionReference aimAction;
[SerializeField] private InputActionReference fireAction;
[SerializeField] private InputActionReference inspectAction;
[SerializeField] private InputActionReference markAction;
[Header(nameof(IUXKeyMap<InputAction>))]
[SerializeField] private InputActionReference cancelAction;
[SerializeField] private InputActionReference inventoryAction;
[SerializeField] private InputActionReference confirmAction;
[SerializeField] private InputActionReference chatAction;
[Header(nameof(ICarKeyMap<InputAction>))]
[SerializeField] private InputActionReference verticalAction;
[SerializeField] private InputActionReference horizontalAction;
[SerializeField] private InputActionReference handBrakeAction;
public IReadOnlyDictionary<string, object> KeyDictionary
{
get
{
if (CachedKeyDictionary.Count is not 0) return CachedKeyDictionary;
foreach (var fieldInfo in GetType().GetFields(ReflectionHelper.Flags))
{
if (fieldInfo.FieldType != typeof(InputActionReference)) continue;
if (fieldInfo.GetValue(this) is null) continue;
var inputActionReference = (InputActionReference)fieldInfo.GetValue(this);
if (CachedKeyDictionary.TryAdd(inputActionReference.GetKeyMap(), inputActionReference) is false)
{
Debug.LogWarning("重复的Key:" + inputActionReference.GetKeyMap());
}
}
return CachedKeyDictionary;
}
}
public InputAction MovementKey =>movementAction;
public InputAction ViewKey =>viewAction;
public InputAction JumpKey =>jumpAction;
public InputAction RunKey =>runAction;
public InputAction CrouchKey =>crouchAction;
public InputAction ToggleCameraKey =>toggleCameraAction;
public InputAction InteractiveKey =>interactAction;
public InputAction HolsterKey =>holsterAction;
public InputAction PrimaryWeaponKey =>primaryAction;
public InputAction SecondaryWeaponKey =>secondaryAction;
public InputAction SidearmKey =>sidearmAction;
public InputAction SuppliesKey =>suppliesAction;
public InputAction TacticalKey =>tacticAction;
public InputAction LethalKey =>lethalAction;
public InputAction KillStreakKey =>killStreakAction;
public InputAction ScrollKey =>scrollAction;
public InputAction MeleeKey =>meleeAction;
public InputAction ReloadKey =>reloadAction;
public InputAction AimKey =>aimAction;
public InputAction FireKey =>fireAction;
public InputAction InspectKey => inspectAction;
public InputAction MarkKey => markAction;
public InputAction CancelKey =>cancelAction;
public InputAction InventoryKey =>inventoryAction;
public InputAction ConfirmKey =>confirmAction;
public InputAction ChatKey => chatAction;
public InputAction VerticalKey => verticalAction;
public InputAction HorizontalKey => horizontalAction;
public InputAction HandBrakeKey => handBrakeAction;
}
}