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; }
//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; }