public override void SaveAsset(AnimatorData mb, AMTake take) { base.SaveAsset(mb, take); if (parameters != null) { for (var ie = parameters.GetEnumerator(); ie.MoveNext();) { AMEventParameter p = ie.Current; AMTakeSav.AddObjectToAsset(p, take); } } }
public AMEventParameter CreateClone() { AMEventParameter a = ScriptableObject.CreateInstance <AMEventParameter>(); a.val_bool = val_bool; a.valueType = valueType; a.val_int = val_int; a.val_float = val_float; a.val_vect2 = val_vect2; a.val_vect3 = val_vect3; a.val_vect4 = val_vect4; a.val_color = val_color; a.val_rect = val_rect; a.val_string = val_string; a.val_obj = val_obj; foreach (AMEventParameter e in lsArray) { a.lsArray.Add(e.CreateClone()); } return(a); }
public bool setMethodInfo(Component component, MethodInfo methodInfo, ParameterInfo[] cachedParameterInfos) { // if different component or methodinfo if ((this.methodInfo != methodInfo) || (this.component != component)) { this.component = component; this.methodInfo = methodInfo; //this.parameters = new object[numParameters]; destroyParameters(); this.parameters = new List <AMEventParameter>(); // add parameters for (int i = 0; i < cachedParameterInfos.Length; i++) { AMEventParameter a = CreateInstance <AMEventParameter>(); a.setValueType(cachedParameterInfos[i].ParameterType); this.parameters.Add(a); } return(true); } return(false); }
void ConvertEventParameter(AMEventParameter oldParam, EventParameter newParam) { ConvertEventData(oldParam, newParam); newParam.lsArray = new List <EventData>(oldParam.lsArray.Count); for (int i = 0; i < oldParam.lsArray.Count; i++) { EventData newParamItem; var oldParamItem = oldParam.lsArray[i]; if (oldParamItem is AMEventParameter) { newParamItem = new EventParameter(); ConvertEventParameter((AMEventParameter)oldParamItem, (EventParameter)newParamItem); } else { newParamItem = new EventData(); ConvertEventData(oldParamItem, newParamItem); } newParam.lsArray.Add(newParamItem); } }
bool showFieldFor(Rect rect, string id, string name, AMEventParameter parameter, Type t, int level, ref float height_field) { rect.x = 5f * level; name = typeStringBrief(t) + " " + name; bool saveChanges = false; if(t.IsArray) { if(t.GetElementType().IsArray) { GUI.skin.label.wordWrap = true; rect.height = 40f; height_field += rect.height; GUI.Label(rect, "Multi-dimensional arrays are currently unsupported."); return false; } if(!arrayFieldFoldout.ContainsKey(id)) arrayFieldFoldout.Add(id, true); Rect rectArrayFoldout = new Rect(rect.x, rect.y + 3f, 15f, 15f); if(GUI.Button(rectArrayFoldout, "", "label")) arrayFieldFoldout[id] = !arrayFieldFoldout[id]; GUI.DrawTexture(rectArrayFoldout, (arrayFieldFoldout[id] ? GUI.skin.GetStyle("GroupElementFoldout").normal.background : GUI.skin.GetStyle("GroupElementFoldout").active.background)); Rect rectLabelArrayName = new Rect(rectArrayFoldout.x + rectArrayFoldout.width + margin, rect.y, rect.width - rectArrayFoldout.width - margin, rect.height); GUI.Label(rectLabelArrayName, name); height_field += rectLabelArrayName.height; if(arrayFieldFoldout[id]) { // show elements if folded out if(parameter.lsArray.Count <= 0) { AMEventParameter a = new AMEventParameter(); a.setValueType(t.GetElementType()); parameter.lsArray.Add(a); saveChanges = true; } Rect rectElement = new Rect(rect); rectElement.y += rect.height + margin; for(int i = 0; i < parameter.lsArray.Count; i++) { float prev_height = height_field; if((showFieldFor(rectElement, id + "_" + i, "(" + i.ToString() + ")", parameter.lsArray[i], t.GetElementType(), (level + 1), ref height_field)) && !saveChanges) saveChanges = true; rectElement.y += height_field - prev_height; } // add to array button Rect rectLabelElement = new Rect(rect.x, rectElement.y, rect.width - 40f - margin * 2f, 25f); height_field += rectLabelElement.height; GUIStyle styleLabelRight = new GUIStyle(GUI.skin.label); styleLabelRight.alignment = TextAnchor.MiddleRight; GUI.Label(rectLabelElement, typeStringBrief(t.GetElementType()), styleLabelRight); if(parameter.lsArray.Count <= 1) GUI.enabled = false; Rect rectButtonRemoveElement = new Rect(rect.x + rect.width - 40f, rectLabelElement.y, 20f, 20f); if(GUI.Button(rectButtonRemoveElement, "-")) { parameter.lsArray[parameter.lsArray.Count - 1].destroy(); parameter.lsArray.RemoveAt(parameter.lsArray.Count - 1); saveChanges = true; } Rect rectButtonAddElement = new Rect(rectButtonRemoveElement); rectButtonAddElement.x += rectButtonRemoveElement.width + margin; GUI.enabled = !isPlaying; if(GUI.Button(rectButtonAddElement, "+")) { AMEventParameter a = new AMEventParameter(); a.setValueType(t.GetElementType()); parameter.lsArray.Add(a); saveChanges = true; } } } else if(t == typeof(bool)) { // int field height_field += 20f; if(parameter.setBool(EditorGUI.Toggle(rect, name, parameter.val_bool))) saveChanges = true; } else if((t == typeof(int)) || (t == typeof(long))) { // int field height_field += 20f; if(parameter.setInt(EditorGUI.IntField(rect, name, (int)parameter.val_int))) saveChanges = true; } else if((t == typeof(float)) || (t == typeof(double))) { // float field height_field += 20f; if(parameter.setFloat(EditorGUI.FloatField(rect, name, (float)parameter.val_float))) saveChanges = true; } else if(t == typeof(Vector2)) { // vector2 field height_field += 40f; if(parameter.setVector2(EditorGUI.Vector2Field(rect, name, (Vector2)parameter.val_vect2))) saveChanges = true; } else if(t == typeof(Vector3)) { // vector3 field height_field += 40f; if(parameter.setVector3(EditorGUI.Vector3Field(rect, name, (Vector3)parameter.val_vect3))) saveChanges = true; } else if(t == typeof(Vector4)) { // vector4 field height_field += 40f; if(parameter.setVector4(EditorGUI.Vector4Field(rect, name, (Vector4)parameter.val_vect4))) saveChanges = true; } else if(t == typeof(Color)) { // color field height_field += 40f; if(parameter.setColor(EditorGUI.ColorField(rect, name, (Color)parameter.val_color))) saveChanges = true; } else if(t == typeof(Rect)) { // rect field height_field += 60f; if(parameter.setRect(EditorGUI.RectField(rect, name, (Rect)parameter.val_rect))) saveChanges = true; } else if(t == typeof(string)) { height_field += 20f; // set default if(parameter.val_string == null) parameter.val_string = ""; // string field if(parameter.setString(EditorGUI.TextField(rect, name, (string)parameter.val_string))) saveChanges = true; } else if(t == typeof(char)) { height_field += 20f; // set default if(parameter.val_string == null) parameter.val_string = ""; // char (string) field Rect rectLabelCharField = new Rect(rect.x, rect.y, 146f, rect.height); GUI.Label(rectLabelCharField, name); Rect rectTextFieldChar = new Rect(rectLabelCharField.x + rectLabelCharField.width + margin, rectLabelCharField.y, rect.width - rectLabelCharField.width - margin, rect.height); if(parameter.setString(GUI.TextField(rectTextFieldChar, parameter.val_string, 1))) saveChanges = true; } else if(t == typeof(GameObject)) { height_field += 40f + margin; // label Rect rectLabelField = new Rect(rect); GUI.Label(rectLabelField, name); // GameObject field GUI.skin = null; EditorGUIUtility.LookLikeControls(); Rect rectObjectField = new Rect(rect.x, rectLabelField.y + rectLabelField.height + margin, rect.width, 16f); if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(GameObject), true))) saveChanges = true; GUI.skin = skin; EditorGUIUtility.LookLikeControls(); } else if(t.BaseType == typeof(Behaviour) || t.BaseType == typeof(Component)) { height_field += 40f + margin; // label Rect rectLabelField = new Rect(rect); GUI.Label(rectLabelField, name); GUI.skin = null; Rect rectObjectField = new Rect(rect.x, rectLabelField.y + rectLabelField.height + margin, rect.width, 16f); EditorGUIUtility.LookLikeControls(); // field if(t == typeof(Transform)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(Transform), true))) saveChanges = true; } else if(t == typeof(MeshFilter)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(MeshFilter), true))) saveChanges = true; } else if(t == typeof(TextMesh)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(TextMesh), true))) saveChanges = true; } else if(t == typeof(MeshRenderer)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(MeshRenderer), true))) saveChanges = true; } //else if(t == typeof(ParticleSystem)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField,parameter.val_obj,typeof(ParticleSystem),true))) saveChanges = true; } else if(t == typeof(TrailRenderer)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(TrailRenderer), true))) saveChanges = true; } else if(t == typeof(LineRenderer)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(LineRenderer), true))) saveChanges = true; } else if(t == typeof(LensFlare)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(LensFlare), true))) saveChanges = true; } // halo else if(t == typeof(Projector)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(Projector), true))) saveChanges = true; } else if(t == typeof(Rigidbody)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(Rigidbody), true))) saveChanges = true; } else if(t == typeof(CharacterController)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(CharacterController), true))) saveChanges = true; } else if(t == typeof(BoxCollider)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(BoxCollider), true))) saveChanges = true; } else if(t == typeof(SphereCollider)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(SphereCollider), true))) saveChanges = true; } else if(t == typeof(CapsuleCollider)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(CapsuleCollider), true))) saveChanges = true; } else if(t == typeof(MeshCollider)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(MeshCollider), true))) saveChanges = true; } else if(t == typeof(WheelCollider)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(WheelCollider), true))) saveChanges = true; } else if(t == typeof(TerrainCollider)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(TerrainCollider), true))) saveChanges = true; } else if(t == typeof(InteractiveCloth)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(InteractiveCloth), true))) saveChanges = true; } else if(t == typeof(SkinnedCloth)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(SkinnedCloth), true))) saveChanges = true; } else if(t == typeof(ClothRenderer)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(ClothRenderer), true))) saveChanges = true; } else if(t == typeof(HingeJoint)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(HingeJoint), true))) saveChanges = true; } else if(t == typeof(FixedJoint)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(FixedJoint), true))) saveChanges = true; } else if(t == typeof(SpringJoint)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(SpringJoint), true))) saveChanges = true; } else if(t == typeof(CharacterJoint)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(CharacterJoint), true))) saveChanges = true; } else if(t == typeof(ConfigurableJoint)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(ConfigurableJoint), true))) saveChanges = true; } else if(t == typeof(ConstantForce)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(ConstantForce), true))) saveChanges = true; } //else if(t == typeof(NavMeshAgent)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField,parameter.val_obj,typeof(NavMeshAgent),true))) saveChanges = true; } //else if(t == typeof(OffMeshLink)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField,parameter.val_obj,typeof(OffMeshLink),true))) saveChanges = true; } else if(t == typeof(AudioListener)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(AudioListener), true))) saveChanges = true; } else if(t == typeof(AudioSource)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(AudioSource), true))) saveChanges = true; } else if(t == typeof(AudioReverbZone)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(AudioReverbZone), true))) saveChanges = true; } else if(t == typeof(AudioLowPassFilter)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(AudioLowPassFilter), true))) saveChanges = true; } else if(t == typeof(AudioHighPassFilter)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(AudioHighPassFilter), true))) saveChanges = true; } else if(t == typeof(AudioEchoFilter)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(AudioEchoFilter), true))) saveChanges = true; } else if(t == typeof(AudioDistortionFilter)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(AudioDistortionFilter), true))) saveChanges = true; } else if(t == typeof(AudioReverbFilter)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(AudioReverbFilter), true))) saveChanges = true; } else if(t == typeof(AudioChorusFilter)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(AudioChorusFilter), true))) saveChanges = true; } else if(t == typeof(Camera)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(Camera), true))) saveChanges = true; } else if(t == typeof(Skybox)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(Skybox), true))) saveChanges = true; } // flare layer else if(t == typeof(GUILayer)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(GUILayer), true))) saveChanges = true; } else if(t == typeof(Light)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(Light), true))) saveChanges = true; } //else if(t == typeof(LightProbeGroup)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField,parameter.val_obj,typeof(LightProbeGroup),true))) saveChanges = true; } else if(t == typeof(OcclusionArea)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(OcclusionArea), true))) saveChanges = true; } //else if(t == typeof(OcclusionPortal)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField,parameter.val_obj,typeof(OcclusionPortal),true))) saveChanges = true; } //else if(t == typeof(LODGroup)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField,parameter.val_obj,typeof(LODGroup),true))) saveChanges = true; } else if(t == typeof(GUITexture)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(GUITexture), true))) saveChanges = true; } else if(t == typeof(GUIText)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(GUIText), true))) saveChanges = true; } else if(t == typeof(Animation)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(Animation), true))) saveChanges = true; } else if(t == typeof(NetworkView)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(NetworkView), true))) saveChanges = true; } // wind zone else { if(t.BaseType == typeof(Behaviour)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(Behaviour), true))) saveChanges = true; } else { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(Component), true))) saveChanges = true; } } GUI.skin = skin; EditorGUIUtility.LookLikeControls(); //return; } else if(t == typeof(UnityEngine.Object)) { height_field += 40f + margin; Rect rectLabelField = new Rect(rect); GUI.Label(rectLabelField, name); Rect rectObjectField = new Rect(rect.x, rectLabelField.y + rectLabelField.height + margin, rect.width, 16f); GUI.skin = null; EditorGUIUtility.LookLikeControls(); if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(UnityEngine.Object), true))) saveChanges = true; GUI.skin = skin; EditorGUIUtility.LookLikeControls(); } else if(t == typeof(Component)) { Rect rectLabelField = new Rect(rect); GUI.Label(rectLabelField, name); Rect rectObjectField = new Rect(rect.x, rectLabelField.y + rectLabelField.height + margin, rect.width, 16f); GUI.skin = null; GUI.skin = null; EditorGUIUtility.LookLikeControls(); if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(Component), true))) saveChanges = true; GUI.skin = skin; EditorGUIUtility.LookLikeControls(); } else { height_field += 20f; GUI.skin.label.wordWrap = true; GUI.Label(rect, "Unsupported parameter type " + t.ToString() + "."); } return saveChanges; }
//set target to a valid ref. for meta public bool setMethodInfo(GameObject target, Component component, bool setComponent, MethodInfo methodInfo, ParameterInfo[] cachedParameterInfos, bool restoreValues) { MethodInfo _methodInfo = getMethodInfo(target); // if different component or methodinfo string _componentName = component.GetType().Name; if((_methodInfo != methodInfo) || (this.componentName != _componentName) || !isMatch(cachedParameterInfos)) { this.component = setComponent ? component : null; this.componentName = _componentName; methodName = methodInfo.Name; cachedMethodInfo = methodInfo; //this.parameters = new object[numParameters]; Dictionary<string, ParamKeep> oldParams = null; if(restoreValues && parameters != null && parameters.Count > 0) { Debug.Log("Parameters have been changed, from code? Attempting to restore data."); oldParams = new Dictionary<string, ParamKeep>(parameters.Count); for(int i = 0; i < parameters.Count; i++) { if(!string.IsNullOrEmpty(parameters[i].paramName) && (parameters[i].valueType != (int)AMEventParameter.ValueType.Array || parameters[i].checkArrayIntegrity())) { try { object valObj = parameters[i].toObject(); oldParams.Add(parameters[i].paramName, new ParamKeep() { type = parameters[i].getParamType(), val = valObj }); } catch { continue; } } } } this.parameters = new List<AMEventParameter>(); // add parameters for(int i = 0; i < cachedParameterInfos.Length; i++) { AMEventParameter a = new AMEventParameter(); a.paramName = cachedParameterInfos[i].Name; a.setValueType(cachedParameterInfos[i].ParameterType); //see if we can restore value from previous if(oldParams != null && oldParams.ContainsKey(a.paramName)) { ParamKeep keep = oldParams[a.paramName]; if(keep.type == cachedParameterInfos[i].ParameterType) a.fromObject(keep.val); } this.parameters.Add(a); } return true; } return false; }
public AMEventParameter CreateClone() { AMEventParameter a = new AMEventParameter(); a.valueType = valueType; a.val_int = val_int; a.val_vect4 = val_vect4; a.val_string = val_string; a.val_obj = val_obj; foreach(AMEventParameter e in lsArray) { a.lsArray.Add(e.CreateClone()); } return a; }
public void fromObject(object dat) { switch((ValueType)valueType) { case ValueType.Integer: val_int = Convert.ToInt32(dat); break; case ValueType.Long: val_long = Convert.ToInt64(dat); break; case ValueType.Float: val_float = Convert.ToSingle(dat); break; case ValueType.Double: val_double = Convert.ToDouble(dat); break; case ValueType.Vector2: val_vect2 = (Vector2)dat; break; case ValueType.Vector3: val_vect3 = (Vector3)dat; break; case ValueType.Vector4: val_vect4 = (Vector4)dat; break; case ValueType.Color: val_color = (Color)dat; break; case ValueType.Rect: val_rect = (Rect)dat; break; case ValueType.String: val_string = Convert.ToString(dat); break; case ValueType.Char: val_string = new string(Convert.ToChar(dat), 1); break; case ValueType.Object: val_obj = (UnityEngine.Object)dat; break; case ValueType.Array: if(lsArray != null) { foreach(AMEventParameter param in lsArray) param.destroy(); } System.Array arr = (System.Array)dat; lsArray = new List<AMEventParameter>(arr.Length); for(int i = 0; i < arr.Length; i++) { object arrElem = arr.GetValue(i); if(arrElem != null) { AMEventParameter a = new AMEventParameter(); a.setValueType(arrElem.GetType()); a.fromObject(arrElem); lsArray.Add(a); } } break; case ValueType.Boolean: val_bool = Convert.ToBoolean(dat); break; } }