HumanoidControl_Free/Editor/Tools/Events/ControllerEvent_Editor.cs
Pascal Serrarens 17741d862a First commit
2022-01-12 10:50:57 +01:00

61 lines
2.9 KiB
C#

using UnityEditor;
using UnityEngine.Events;
namespace Passer {
public class ControllerEvent_Editor : FloatEvent_Editor {
public static void EventInspector(
SerializedProperty eventHandlerProp,
ref int selectedEventIx, ref int selectedEventHandlerIx, bool showOverrideMode = false) {
EventInspector(eventHandlerProp, ref selectedEventIx, ref selectedEventHandlerIx,
EventMethodCheck, InitControllerEvent, null, showOverrideMode) ;
SetParameterOnEvents(eventHandlerProp);
}
public static void SetParameterOnEvents(SerializedProperty eventHandlersProp) {
SerializedProperty defaultParameterPropertyProp = eventHandlersProp.FindPropertyRelative("defaultParameterProperty");
string defaultParameterProperty = defaultParameterPropertyProp.stringValue;
SerializedProperty eventsProp = eventHandlersProp.FindPropertyRelative("events");
int eventCount = eventsProp.arraySize;
for (int i = 0; i < eventCount; i++) {
SerializedProperty eventHandlerProp = eventsProp.GetArrayElementAtIndex(i);
SetParameterOnEvent(eventHandlerProp, defaultParameterProperty);
}
}
protected static void SetParameterOnEvent(SerializedProperty eventHandlerProp, string defaultParameterProperty) {
SerializedProperty parametersProp = eventHandlerProp.FindPropertyRelative("functionCall.parameters");
int parameterCount = parametersProp.arraySize;
if (parameterCount != 1)
return; // no support for more than 1 parameter yet, 0 parameters: nothing to do
SerializedProperty parameterProp = parametersProp.GetArrayElementAtIndex(0);
SerializedProperty parameterTypeProp = parameterProp.FindPropertyRelative("type");
SerializedProperty propertyNameProp = parameterProp.FindPropertyRelative("localProperty");
if (propertyNameProp.stringValue == "") {
switch ((FunctionCall.ParameterType)parameterTypeProp.intValue) {
case FunctionCall.ParameterType.Float:
propertyNameProp.stringValue = defaultParameterProperty;
break;
}
}
}
public static void InitControllerEvent(SerializedProperty eventProp) {
SerializedProperty functionParametersProp = eventProp.FindPropertyRelative("functionCall.parameters");
if (functionParametersProp.arraySize == 0)
functionParametersProp.InsertArrayElementAtIndex(0);
SerializedProperty parameter0Prop = functionParametersProp.GetArrayElementAtIndex(0);
parameter0Prop.FindPropertyRelative("fromEvent").boolValue = true;
parameter0Prop.FindPropertyRelative("localProperty").stringValue = "From Event";
InitFloatEvent(eventProp);
}
}
}