1 using System
.Collections
.Generic
;
3 namespace UnityEngine
.Experimental
.Rendering
5 public enum DebugAction
18 enum DebugActionRepeatMode
24 public sealed partial class DebugManager
26 const string kEnableDebugBtn1
= "Enable Debug Button 1";
27 const string kEnableDebugBtn2
= "Enable Debug Button 2";
28 const string kDebugPreviousBtn
= "Debug Previous";
29 const string kDebugNextBtn
= "Debug Next";
30 const string kValidateBtn
= "Debug Validate";
31 const string kPersistentBtn
= "Debug Persistent";
32 const string kDPadVertical
= "Debug Vertical";
33 const string kDPadHorizontal
= "Debug Horizontal";
34 const string kMultiplierBtn
= "Debug Multiplier";
36 DebugActionDesc
[] m_DebugActions
;
37 DebugActionState
[] m_DebugActionStates
;
39 void RegisterActions()
41 m_DebugActions
= new DebugActionDesc
[(int)DebugAction
.DebugActionCount
];
42 m_DebugActionStates
= new DebugActionState
[(int)DebugAction
.DebugActionCount
];
44 var enableDebugMenu
= new DebugActionDesc();
45 enableDebugMenu
.buttonTriggerList
.Add(new[] { kEnableDebugBtn1, kEnableDebugBtn2 }
);
46 enableDebugMenu
.keyTriggerList
.Add(new[] { KeyCode.LeftControl, KeyCode.Backspace }
);
47 enableDebugMenu
.repeatMode
= DebugActionRepeatMode
.Never
;
48 AddAction(DebugAction
.EnableDebugMenu
, enableDebugMenu
);
50 var nextDebugPanel
= new DebugActionDesc();
51 nextDebugPanel
.buttonTriggerList
.Add(new[] { kDebugNextBtn }
);
52 nextDebugPanel
.repeatMode
= DebugActionRepeatMode
.Never
;
53 AddAction(DebugAction
.NextDebugPanel
, nextDebugPanel
);
55 var previousDebugPanel
= new DebugActionDesc();
56 previousDebugPanel
.buttonTriggerList
.Add(new[] { kDebugPreviousBtn }
);
57 previousDebugPanel
.repeatMode
= DebugActionRepeatMode
.Never
;
58 AddAction(DebugAction
.PreviousDebugPanel
, previousDebugPanel
);
60 var validate
= new DebugActionDesc();
61 validate
.buttonTriggerList
.Add(new[] { kValidateBtn }
);
62 validate
.repeatMode
= DebugActionRepeatMode
.Never
;
63 AddAction(DebugAction
.Action
, validate
);
65 var persistent
= new DebugActionDesc();
66 persistent
.buttonTriggerList
.Add(new[] { kPersistentBtn }
);
67 persistent
.repeatMode
= DebugActionRepeatMode
.Never
;
68 AddAction(DebugAction
.MakePersistent
, persistent
);
70 var multiplier
= new DebugActionDesc();
71 multiplier
.buttonTriggerList
.Add(new[] { kMultiplierBtn }
);
72 multiplier
.repeatMode
= DebugActionRepeatMode
.Delay
;
73 validate
.repeatDelay
= 0f
;
74 AddAction(DebugAction
.Multiplier
, multiplier
);
76 AddAction(DebugAction
.MoveVertical
, new DebugActionDesc { axisTrigger = kDPadVertical, repeatMode = DebugActionRepeatMode.Delay, repeatDelay = 0.16f }
);
77 AddAction(DebugAction
.MoveHorizontal
, new DebugActionDesc { axisTrigger = kDPadHorizontal, repeatMode = DebugActionRepeatMode.Delay, repeatDelay = 0.16f }
);
80 void AddAction(DebugAction action
, DebugActionDesc desc
)
82 int index
= (int)action
;
83 m_DebugActions
[index
] = desc
;
84 m_DebugActionStates
[index
] = new DebugActionState();
87 void SampleAction(int actionIndex
)
89 var desc
= m_DebugActions
[actionIndex
];
90 var state
= m_DebugActionStates
[actionIndex
];
92 //bool canSampleAction = (state.actionTriggered == false) || (desc.repeatMode == DebugActionRepeatMode.Delay && state.timer > desc.repeatDelay);
93 if (state
.runningAction
== false)
95 // Check button triggers
96 for (int buttonListIndex
= 0; buttonListIndex
< desc
.buttonTriggerList
.Count
; ++buttonListIndex
)
98 var buttons
= desc
.buttonTriggerList
[buttonListIndex
];
99 bool allButtonPressed
= true;
101 foreach (var button
in buttons
)
103 allButtonPressed
= Input
.GetButton(button
);
104 if (!allButtonPressed
)
108 if (allButtonPressed
)
110 state
.TriggerWithButton(buttons
, 1f
);
115 // Check axis triggers
116 if (desc
.axisTrigger
!= "")
118 float axisValue
= Input
.GetAxis(desc
.axisTrigger
);
121 state
.TriggerWithAxis(desc
.axisTrigger
, axisValue
);
124 // Check key triggers
125 for (int keyListIndex
= 0; keyListIndex
< desc
.keyTriggerList
.Count
; ++keyListIndex
)
127 var keys
= desc
.keyTriggerList
[keyListIndex
];
128 bool allKeyPressed
= true;
130 foreach (var key
in keys
)
132 allKeyPressed
= Input
.GetKey(key
);
139 state
.TriggerWithKey(keys
, 1f
);
146 void UpdateAction(int actionIndex
)
148 var desc
= m_DebugActions
[actionIndex
];
149 var state
= m_DebugActionStates
[actionIndex
];
151 if (state
.runningAction
)
155 public void UpdateActions()
157 for (int actionIndex
= 0; actionIndex
< m_DebugActions
.Length
; ++actionIndex
)
159 UpdateAction(actionIndex
);
160 SampleAction(actionIndex
);
164 public float GetAction(DebugAction action
)
166 return m_DebugActionStates
[(int)action
].actionState
;
169 void RegisterInputs()
172 var inputEntries
= new List
<InputManagerEntry
>
174 new InputManagerEntry { name = kEnableDebugBtn1, kind = InputManagerEntry.Kind.KeyOrButton, btnPositive = "left ctrl", altBtnPositive = "joystick button 8" }
,
175 new InputManagerEntry { name = kEnableDebugBtn2, kind = InputManagerEntry.Kind.KeyOrButton, btnPositive = "backspace", altBtnPositive = "joystick button 9" }
,
176 new InputManagerEntry { name = kDebugNextBtn, kind = InputManagerEntry.Kind.KeyOrButton, btnPositive = "page down", altBtnPositive = "joystick button 5" }
,
177 new InputManagerEntry { name = kDebugPreviousBtn, kind = InputManagerEntry.Kind.KeyOrButton, btnPositive = "page up", altBtnPositive = "joystick button 4" }
,
178 new InputManagerEntry { name = kValidateBtn, kind = InputManagerEntry.Kind.KeyOrButton, btnPositive = "return", altBtnPositive = "joystick button 0" }
,
179 new InputManagerEntry { name = kPersistentBtn, kind = InputManagerEntry.Kind.KeyOrButton, btnPositive = "right shift", altBtnPositive = "joystick button 2" }
,
180 new InputManagerEntry { name = kMultiplierBtn, kind = InputManagerEntry.Kind.KeyOrButton, btnPositive = "left shift", altBtnPositive = "joystick button 3" }
,
181 new InputManagerEntry { name = kDPadHorizontal, kind = InputManagerEntry.Kind.KeyOrButton, btnPositive = "right", btnNegative = "left", gravity = 1000f, deadZone = 0.001f, sensitivity = 1000f }
,
182 new InputManagerEntry { name = kDPadVertical, kind = InputManagerEntry.Kind.KeyOrButton, btnPositive = "up", btnNegative = "down", gravity = 1000f, deadZone = 0.001f, sensitivity = 1000f }
,
183 new InputManagerEntry { name = kDPadVertical, kind = InputManagerEntry.Kind.Axis, axis = InputManagerEntry.Axis.Seventh, btnPositive = "up", btnNegative = "down", gravity = 1000f, deadZone = 0.001f, sensitivity = 1000f }
,
184 new InputManagerEntry { name = kDPadHorizontal, kind = InputManagerEntry.Kind.Axis, axis = InputManagerEntry.Axis.Sixth, btnPositive = "right", btnNegative = "left", gravity = 1000f, deadZone = 0.001f, sensitivity = 1000f }
,
187 InputRegistering
.RegisterInputs(inputEntries
);
192 class DebugActionDesc
194 public List
<string[]> buttonTriggerList
= new List
<string[]>();
195 public string axisTrigger
= "";
196 public List
<KeyCode
[]> keyTriggerList
= new List
<KeyCode
[]>();
197 public DebugActionRepeatMode repeatMode
= DebugActionRepeatMode
.Never
;
198 public float repeatDelay
;
201 class DebugActionState
203 enum DebugActionKeyType
210 DebugActionKeyType m_Type
;
211 string[] m_PressedButtons
;
212 string m_PressedAxis
= "";
213 KeyCode
[] m_PressedKeys
;
214 bool[] m_TriggerPressedUp
;
217 internal bool runningAction { get; private set; }
218 internal float actionState { get; private set; }
220 void Trigger(int triggerCount
, float state
)
223 runningAction
= true;
226 m_TriggerPressedUp
= new bool[triggerCount
];
227 for (int i
= 0; i
< m_TriggerPressedUp
.Length
; ++i
)
228 m_TriggerPressedUp
[i
] = false;
231 public void TriggerWithButton(string[] buttons
, float state
)
233 m_Type
= DebugActionKeyType
.Button
;
234 m_PressedButtons
= buttons
;
236 Trigger(buttons
.Length
, state
);
239 public void TriggerWithAxis(string axis
, float state
)
241 m_Type
= DebugActionKeyType
.Axis
;
242 m_PressedAxis
= axis
;
246 public void TriggerWithKey(KeyCode
[] keys
, float state
)
248 m_Type
= DebugActionKeyType
.Key
;
249 m_PressedKeys
= keys
;
251 Trigger(keys
.Length
, state
);
256 runningAction
= false;
258 m_TriggerPressedUp
= null;
261 public void Update(DebugActionDesc desc
)
263 // Always reset this so that the action can only be caught once until repeat/reset
266 if (m_TriggerPressedUp
!= null)
268 m_Timer
+= Time
.deltaTime
;
270 for (int i
= 0; i
< m_TriggerPressedUp
.Length
; ++i
)
272 if (m_Type
== DebugActionKeyType
.Button
)
273 m_TriggerPressedUp
[i
] |= Input
.GetButtonUp(m_PressedButtons
[i
]);
274 else if (m_Type
== DebugActionKeyType
.Axis
)
275 m_TriggerPressedUp
[i
] |= Mathf
.Approximately(Input
.GetAxis(m_PressedAxis
), 0f
);
277 m_TriggerPressedUp
[i
] |= Input
.GetKeyUp(m_PressedKeys
[i
]);
280 bool allTriggerUp
= true;
281 foreach (bool value in m_TriggerPressedUp
)
282 allTriggerUp
&= value;
284 if (allTriggerUp
|| (m_Timer
> desc
.repeatDelay
&& desc
.repeatMode
== DebugActionRepeatMode
.Delay
))