-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathS_InputManager.cs
More file actions
152 lines (125 loc) · 3.39 KB
/
Copy pathS_InputManager.cs
File metadata and controls
152 lines (125 loc) · 3.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class EA_PlayerAddedArgs : EventArgs
{
public int PlayerID { get; set; }
}
public class S_InputManager : MonoBehaviour
{
[SerializeField]
private int maxPlayerCount = 4;
private int currentPlayerCount = 0;
[SerializeField]
private SO_InputActions defaultInputActions;
public static S_InputManager Instance { get; private set; }
private S_PlayerInputs[] _playerInputs = new S_PlayerInputs[1];
public delegate void OnPlayerAdded(object sender, EA_PlayerAddedArgs args);
public event OnPlayerAdded OnPlayerAddedEvent;
private void Awake()
{
// If there is an instance, and it's not me, delete myself.
if (Instance != null && Instance != this)
{
Destroy(this);
}
else
{
Instance = this;
}
if (_playerInputs == null)
{
_playerInputs = new S_PlayerInputs[maxPlayerCount];
}
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
public EA_PlayerAddedArgs AddPlayer()
{
EA_PlayerAddedArgs args = new EA_PlayerAddedArgs();
if(currentPlayerCount >= maxPlayerCount)
{
args.PlayerID = -1;
return args;
}
if (defaultInputActions == null)
{
defaultInputActions = ScriptableObject.CreateInstance<SO_InputActions>();
}
_playerInputs[currentPlayerCount] = new S_PlayerInputs(defaultInputActions.getInputActionDatas());
args.PlayerID = currentPlayerCount;
currentPlayerCount++;
if (OnPlayerAddedEvent != null) {
OnPlayerAddedEvent(this, args);
}
return args;
}
public S_PlayerInputs GetPlayerInput()
{
return GetPlayerInput(0);
}
public S_PlayerInputs GetPlayerInput(int playerIndex)
{
if(playerIndex >= currentPlayerCount)
{
return null;
}
return _playerInputs[playerIndex];
}
public List<string> GetDevices()
{
List<string> devices = new List<string>();
var allGamepads = InputSystem.devices;
foreach (var gamepad in allGamepads)
{
devices.Add(gamepad.name);
}
return devices;
}
public void DisableInputs()
{
for (int i = 0; i < currentPlayerCount; i++)
{
_playerInputs[i].Disable();
}
}
public void EnableInputs()
{
for (int i = 0; i < currentPlayerCount; i++)
{
_playerInputs[i].Enable();
}
}
public void DisablePlayerInputs(int playerIndex)
{
if(playerIndex >= currentPlayerCount)
{
return;
}
_playerInputs[playerIndex].Disable();
}
public void EnablePlayerInputs(int playerIndex)
{
if(playerIndex >= currentPlayerCount)
{
return;
}
_playerInputs[playerIndex].Enable();
}
public void LoadData(ControlSaveFile save)
{
_playerInputs[0].LoadData(save);
}
public void SaveData(ref ControlSaveFile save)
{
_playerInputs[0].SaveData(ref save);
}
}