127 lines
5.1 KiB
C#
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;
|
|
}
|
|
}
|