RiftMayhem/Assets/Scripts/Game/complete-input-config.cs

375 lines
12 KiB
C#

using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
#if UNITY_EDITOR
public class GameInputSetup
{
[MenuItem("Tools/Setup Complete Game Input")]
public static void SetupGameInput()
{
var inputManagerPath = "ProjectSettings/InputManager.asset";
var serializedObject = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath(inputManagerPath)[0]);
var axesProperty = serializedObject.FindProperty("m_Axes");
// First clear any existing duplicates
ClearExistingAxes(axesProperty);
var axes = new List<InputAxis>()
{
// Movement - Left Stick
new InputAxis()
{
name = "Horizontal",
descriptiveName = "Left Stick Horizontal",
deadZone = 0.2f,
sensitivity = 1f,
type = 2,
axis = 0,
joyNum = 0
},
new InputAxis()
{
name = "Vertical",
descriptiveName = "Left Stick Vertical",
deadZone = 0.2f,
sensitivity = 1f,
type = 2,
axis = 1,
invert = true,
joyNum = 0
},
// Keyboard Movement
new InputAxis()
{
name = "Horizontal",
negativeButton = "a",
positiveButton = "d",
gravity = 3f,
sensitivity = 3f,
type = 0,
},
new InputAxis()
{
name = "Vertical",
negativeButton = "s",
positiveButton = "w",
gravity = 3f,
sensitivity = 3f,
type = 0,
},
// Aiming - Right Stick
new InputAxis()
{
name = "RightStickHorizontal",
descriptiveName = "Right Stick Horizontal",
deadZone = 0.2f,
sensitivity = 1f,
type = 2,
axis = 3,
joyNum = 0
},
// Alternative mapping for different controllers
new InputAxis()
{
name = "RightStickHorizontal",
descriptiveName = "Right Stick Horizontal Alt",
deadZone = 0.2f,
sensitivity = 1f,
type = 2,
axis = 5,
joyNum = 0
},
new InputAxis()
{
name = "RightStickVertical",
descriptiveName = "Right Stick Vertical",
deadZone = 0.2f,
sensitivity = 1f,
type = 2,
axis = 4,
invert = true,
joyNum = 0
},
// Alternative mapping for different controllers
new InputAxis()
{
name = "RightStickVertical",
descriptiveName = "Right Stick Vertical Alt",
deadZone = 0.2f,
sensitivity = 1f,
type = 2,
axis = 6,
invert = true,
joyNum = 0
},
// Primary Abilities (Face Buttons)
new InputAxis()
{
name = "Ability1",
descriptiveName = "Primary Ability (A/X)",
positiveButton = "joystick button 0",
gravity = 1000,
sensitivity = 1000,
type = 0
},
new InputAxis()
{
name = "Ability1",
positiveButton = "1",
gravity = 1000,
sensitivity = 1000,
type = 0
},
new InputAxis()
{
name = "Ability2",
descriptiveName = "Secondary Ability (B/Circle)",
positiveButton = "joystick button 1",
gravity = 1000,
sensitivity = 1000,
type = 0
},
new InputAxis()
{
name = "Ability2",
positiveButton = "2",
gravity = 1000,
sensitivity = 1000,
type = 0
},
new InputAxis()
{
name = "Ability3",
descriptiveName = "Third Ability (X/Square)",
positiveButton = "joystick button 2",
gravity = 1000,
sensitivity = 1000,
type = 0
},
new InputAxis()
{
name = "Ability3",
positiveButton = "3",
gravity = 1000,
sensitivity = 1000,
type = 0
},
new InputAxis()
{
name = "Ability4",
descriptiveName = "Fourth Ability (Y/Triangle)",
positiveButton = "joystick button 3",
gravity = 1000,
sensitivity = 1000,
type = 0
},
new InputAxis()
{
name = "Ability4",
positiveButton = "4",
gravity = 1000,
sensitivity = 1000,
type = 0
},
// UI and Special Actions
new InputAxis()
{
name = "Interact",
descriptiveName = "Interact/Confirm",
positiveButton = "joystick button 0",
gravity = 1000,
sensitivity = 1000,
type = 0
},
new InputAxis()
{
name = "Interact",
positiveButton = "e",
gravity = 1000,
sensitivity = 1000,
type = 0
},
new InputAxis()
{
name = "Menu",
descriptiveName = "Menu/Pause",
positiveButton = "joystick button 7",
gravity = 1000,
sensitivity = 1000,
type = 0
},
new InputAxis()
{
name = "Menu",
positiveButton = "escape",
gravity = 1000,
sensitivity = 1000,
type = 0
},
new InputAxis()
{
name = "Inventory",
descriptiveName = "Inventory Toggle",
positiveButton = "joystick button 6",
gravity = 1000,
sensitivity = 1000,
type = 0
},
new InputAxis()
{
name = "Inventory",
positiveButton = "i",
gravity = 1000,
sensitivity = 1000,
type = 0
},
// Shoulder Buttons and Triggers
new InputAxis()
{
name = "LeftTrigger",
descriptiveName = "Left Trigger",
deadZone = 0.2f,
sensitivity = 1f,
type = 2,
axis = 8,
joyNum = 0
},
new InputAxis()
{
name = "RightTrigger",
descriptiveName = "Right Trigger",
deadZone = 0.2f,
sensitivity = 1f,
type = 2,
axis = 9,
joyNum = 0
},
new InputAxis()
{
name = "LeftBumper",
descriptiveName = "Left Bumper",
positiveButton = "joystick button 4",
gravity = 1000,
sensitivity = 1000,
type = 0
},
new InputAxis()
{
name = "RightBumper",
descriptiveName = "Right Bumper",
positiveButton = "joystick button 5",
gravity = 1000,
sensitivity = 1000,
type = 0
},
// D-Pad
new InputAxis()
{
name = "DPadHorizontal",
descriptiveName = "D-Pad Horizontal",
deadZone = 0.2f,
sensitivity = 1f,
type = 2,
axis = 5,
joyNum = 0
},
new InputAxis()
{
name = "DPadVertical",
descriptiveName = "D-Pad Vertical",
deadZone = 0.2f,
sensitivity = 1f,
type = 2,
axis = 6,
invert = true,
joyNum = 0
}
};
foreach (var axis in axes)
{
AddAxis(axesProperty, axis);
}
serializedObject.ApplyModifiedProperties();
Debug.Log("Input Manager setup complete! All game controls have been configured.");
}
private static void ClearExistingAxes(SerializedProperty axesProperty)
{
var axesToClear = new HashSet<string>
{
"RightStickHorizontal", "RightStickVertical",
"Ability1", "Ability2", "Ability3", "Ability4",
"LeftTrigger", "RightTrigger",
"LeftBumper", "RightBumper",
"DPadHorizontal", "DPadVertical"
};
var axesToRemove = new List<int>();
for (int i = 0; i < axesProperty.arraySize; ++i)
{
var axisProp = axesProperty.GetArrayElementAtIndex(i);
var name = axisProp.FindPropertyRelative("m_Name").stringValue;
if (axesToClear.Contains(name))
{
axesToRemove.Add(i);
}
}
for (int i = axesToRemove.Count - 1; i >= 0; --i)
{
axesProperty.DeleteArrayElementAtIndex(axesToRemove[i]);
}
}
private static void AddAxis(SerializedProperty axesProperty, InputAxis axis)
{
axesProperty.arraySize++;
var axisProperty = axesProperty.GetArrayElementAtIndex(axesProperty.arraySize - 1);
axisProperty.FindPropertyRelative("m_Name").stringValue = axis.name;
axisProperty.FindPropertyRelative("descriptiveName").stringValue = axis.descriptiveName;
axisProperty.FindPropertyRelative("descriptiveNegativeName").stringValue = axis.descriptiveNegativeName;
axisProperty.FindPropertyRelative("negativeButton").stringValue = axis.negativeButton;
axisProperty.FindPropertyRelative("positiveButton").stringValue = axis.positiveButton;
axisProperty.FindPropertyRelative("altNegativeButton").stringValue = axis.altNegativeButton;
axisProperty.FindPropertyRelative("altPositiveButton").stringValue = axis.altPositiveButton;
axisProperty.FindPropertyRelative("gravity").floatValue = axis.gravity;
axisProperty.FindPropertyRelative("dead").floatValue = axis.deadZone;
axisProperty.FindPropertyRelative("sensitivity").floatValue = axis.sensitivity;
axisProperty.FindPropertyRelative("snap").boolValue = axis.snap;
axisProperty.FindPropertyRelative("invert").boolValue = axis.invert;
axisProperty.FindPropertyRelative("type").intValue = axis.type;
axisProperty.FindPropertyRelative("axis").intValue = axis.axis;
axisProperty.FindPropertyRelative("joyNum").intValue = axis.joyNum;
}
}
#endif
[System.Serializable]
public class InputAxis
{
public string name = "";
public string descriptiveName = "";
public string descriptiveNegativeName = "";
public string negativeButton = "";
public string positiveButton = "";
public string altNegativeButton = "";
public string altPositiveButton = "";
public float gravity = 0f;
public float deadZone = 0f;
public float sensitivity = 0f;
public bool snap = false;
public bool invert = false;
public int type = 0;
public int axis = 0;
public int joyNum = 0;
}