public void SetVariable(string name, SharedVariable sharedVariable) { this.CheckForSerialization(false); if (this.mVariables == null) { this.mVariables = new List <SharedVariable>(); } else { if (this.mSharedVariableIndex == null) { this.UpdateVariablesIndex(); } } sharedVariable.Name = name; int index; if (this.mSharedVariableIndex != null && this.mSharedVariableIndex.TryGetValue(name, out index)) { SharedVariable sharedVariable2 = this.mVariables[index]; if (!sharedVariable2.GetType().Equals(typeof(SharedVariable)) && !sharedVariable2.GetType().Equals(sharedVariable.GetType())) { Debug.LogError(string.Format("Error: Unable to set SharedVariable {0} - the variable type {1} does not match the existing type {2}", name, sharedVariable2.GetType(), sharedVariable.GetType())); } else { sharedVariable2.SetValue(sharedVariable.GetValue()); } } else { this.mVariables.Add(sharedVariable); this.UpdateVariablesIndex(); } }
public void SetVariableValue(string name, object value) { SharedVariable variable = this.GetVariable(name); if (variable != null) { if (value is SharedVariable) { SharedVariable sharedVariable = value as SharedVariable; if (!string.IsNullOrEmpty(sharedVariable.PropertyMapping)) { variable.PropertyMapping = sharedVariable.PropertyMapping; variable.PropertyMappingOwner = sharedVariable.PropertyMappingOwner; variable.InitializePropertyMapping(this.mBehaviorSource); } else { variable.SetValue(sharedVariable.GetValue()); } } else { variable.SetValue(value); } variable.ValueChanged(); } else if (value is SharedVariable) { SharedVariable sharedVariable = value as SharedVariable; SharedVariable instance = TaskUtility.CreateInstance(sharedVariable.GetType()) as SharedVariable; instance.Name = sharedVariable.Name; instance.IsShared = sharedVariable.IsShared; instance.IsGlobal = sharedVariable.IsGlobal; if (!string.IsNullOrEmpty(sharedVariable.PropertyMapping)) { instance.PropertyMapping = sharedVariable.PropertyMapping; instance.PropertyMappingOwner = sharedVariable.PropertyMappingOwner; instance.InitializePropertyMapping(this.mBehaviorSource); } else { instance.SetValue(sharedVariable.GetValue()); } this.mBehaviorSource.SetVariable(name, instance); } else { Debug.LogError((object)("Error: No variable exists with name " + name)); } }
static int GetValue(IntPtr L) { try { ToLua.CheckArgsCount(L, 1); BehaviorDesigner.Runtime.SharedVariable obj = (BehaviorDesigner.Runtime.SharedVariable)ToLua.CheckObject <BehaviorDesigner.Runtime.SharedVariable>(L, 1); object o = obj.GetValue(); ToLua.Push(L, o); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
/// <summary> /// 设置指定名字的共享变量 /// </summary> /// <param name="name"></param> /// <param name="sharedVariable"></param> public void SetVariable(string name, SharedVariable sharedVariable) { if (this.mVariables == null) { this.mVariables = new List <SharedVariable>(); } else if (this.mSharedVariableIndex == null) { this.UpdateVariablesIndex(); } sharedVariable.Name = name; int index; if (this.mSharedVariableIndex != null && this.mSharedVariableIndex.TryGetValue(name, out index)) { SharedVariable sharedVariable2 = this.mVariables[index]; if (!sharedVariable2.GetType().Equals(typeof(SharedVariable)) && !sharedVariable2.GetType().Equals(sharedVariable.GetType())) { Debug.LogError(string.Format("Error: Unable to set SharedVariable {0} - the variable type {1} does not match the existing type {2}", name, sharedVariable2.GetType(), sharedVariable.GetType())); } else if (!string.IsNullOrEmpty(sharedVariable.PropertyMapping)) { sharedVariable2.PropertyMappingOwner = sharedVariable.PropertyMappingOwner; sharedVariable2.PropertyMapping = sharedVariable.PropertyMapping; sharedVariable2.InitializePropertyMapping(this); } else { sharedVariable2.SetValue(sharedVariable.GetValue()); } } else { this.mVariables.Add(sharedVariable); this.UpdateVariablesIndex(); } }
// Token: 0x0600015C RID: 348 RVA: 0x0000C670 File Offset: 0x0000A870 private static void DeserializeObject(Task task, object obj, Dictionary <string, object> dict, IVariableSource variableSource, List <UnityEngine.Object> unityObjects) { if (dict == null) { return; } FieldInfo[] allFields = TaskUtility.GetAllFields(obj.GetType()); for (int i = 0; i < allFields.Length; i++) { string key = (!JSONDeserialization.updatedSerialization) ? (allFields[i].FieldType.Name.GetHashCode() + allFields[i].Name.GetHashCode()).ToString() : (allFields[i].FieldType.Name + allFields[i].Name); object obj2; if (dict.TryGetValue(key, out obj2)) { if (typeof(IList).IsAssignableFrom(allFields[i].FieldType)) { IList list = obj2 as IList; if (list != null) { Type type; if (allFields[i].FieldType.IsArray) { type = allFields[i].FieldType.GetElementType(); } else { Type type2 = allFields[i].FieldType; while (!type2.IsGenericType) { type2 = type2.BaseType; } type = type2.GetGenericArguments()[0]; } bool flag = type.Equals(typeof(Task)) || type.IsSubclassOf(typeof(Task)); if (flag) { if (JSONDeserialization.taskIDs != null) { List <int> list2 = new List <int>(); for (int j = 0; j < list.Count; j++) { list2.Add(Convert.ToInt32(list[j])); } JSONDeserialization.taskIDs.Add(new JSONDeserialization.TaskField(task, allFields[i]), list2); } } else if (allFields[i].FieldType.IsArray) { Array array = Array.CreateInstance(type, list.Count); for (int k = 0; k < list.Count; k++) { if (list[k] == null) { array.SetValue(null, k); } else { array.SetValue(JSONDeserialization.ValueToObject(task, type, list[k], variableSource, unityObjects), k); } } allFields[i].SetValue(obj, array); } else { IList list3; if (allFields[i].FieldType.IsGenericType) { list3 = (TaskUtility.CreateInstance(typeof(List <>).MakeGenericType(new Type[] { type })) as IList); } else { list3 = (TaskUtility.CreateInstance(allFields[i].FieldType) as IList); } for (int l = 0; l < list.Count; l++) { if (list[l] == null) { list3.Add(null); } else { list3.Add(JSONDeserialization.ValueToObject(task, type, list[l], variableSource, unityObjects)); } } allFields[i].SetValue(obj, list3); } } } else { Type fieldType = allFields[i].FieldType; if (fieldType.Equals(typeof(Task)) || fieldType.IsSubclassOf(typeof(Task))) { if (TaskUtility.HasAttribute(allFields[i], typeof(InspectTaskAttribute))) { Dictionary <string, object> dictionary = obj2 as Dictionary <string, object>; Type typeWithinAssembly = TaskUtility.GetTypeWithinAssembly(dictionary["Type"] as string); if (typeWithinAssembly != null) { Task task2 = TaskUtility.CreateInstance(typeWithinAssembly) as Task; JSONDeserialization.DeserializeObject(task2, task2, dictionary, variableSource, unityObjects); allFields[i].SetValue(task, task2); } } else if (JSONDeserialization.taskIDs != null) { List <int> list4 = new List <int>(); list4.Add(Convert.ToInt32(obj2)); JSONDeserialization.taskIDs.Add(new JSONDeserialization.TaskField(task, allFields[i]), list4); } } else { allFields[i].SetValue(obj, JSONDeserialization.ValueToObject(task, fieldType, obj2, variableSource, unityObjects)); } } } else if (typeof(SharedVariable).IsAssignableFrom(allFields[i].FieldType) && !allFields[i].FieldType.IsAbstract) { if (dict.TryGetValue((allFields[i].FieldType.Name.GetHashCode() + allFields[i].Name.GetHashCode()).ToString(), out obj2)) { SharedVariable sharedVariable = TaskUtility.CreateInstance(allFields[i].FieldType) as SharedVariable; sharedVariable.SetValue(JSONDeserialization.ValueToObject(task, allFields[i].FieldType, obj2, variableSource, unityObjects)); allFields[i].SetValue(obj, sharedVariable); } else { SharedVariable sharedVariable2 = TaskUtility.CreateInstance(allFields[i].FieldType) as SharedVariable; SharedVariable sharedVariable3 = allFields[i].GetValue(obj) as SharedVariable; if (sharedVariable3 != null) { sharedVariable2.SetValue(sharedVariable3.GetValue()); } allFields[i].SetValue(obj, sharedVariable2); } } } }
private static void DoVariablesToICodeSync(IVariableSource variableSource, FsmVariable[] iCodeVariables) { if (variableSource == null) { return; } SharedVariable behaviorDesignerVariable = null; FsmVariable iCodeVariable = null; for (int i = 0; i < iCodeVariables.Length; ++i) { iCodeVariable = iCodeVariables[i]; if ((behaviorDesignerVariable = variableSource.GetVariable(iCodeVariable.Name)) != null) { // FsmInt if (iCodeVariable is FsmInt) { if (behaviorDesignerVariable is SharedInt) { (iCodeVariable as FsmInt).Value = (int)behaviorDesignerVariable.GetValue(); } continue; } // FsmFloat if (iCodeVariable is FsmFloat) { if (behaviorDesignerVariable is SharedFloat) { (iCodeVariable as FsmFloat).Value = (float)behaviorDesignerVariable.GetValue(); } continue; } // FsmBool if (iCodeVariable is FsmBool) { if (behaviorDesignerVariable is SharedBool) { (iCodeVariable as FsmBool).Value = (bool)behaviorDesignerVariable.GetValue(); } continue; } // FsmString if (iCodeVariable is FsmString) { if (behaviorDesignerVariable is SharedString) { (iCodeVariable as FsmString).Value = (string)behaviorDesignerVariable.GetValue(); } continue; } // FsmColor if (iCodeVariable is FsmColor) { if (behaviorDesignerVariable is SharedColor) { (iCodeVariable as FsmColor).Value = (Color)behaviorDesignerVariable.GetValue(); } continue; } // FsmVector2 if (iCodeVariable is FsmVector2) { if (behaviorDesignerVariable is SharedVector2) { (iCodeVariable as FsmVector2).Value = (Vector2)behaviorDesignerVariable.GetValue(); } continue; } // FsmVector3 if (iCodeVariable is FsmVector3) { if (behaviorDesignerVariable is SharedVector3) { (iCodeVariable as FsmVector3).Value = (Vector3)behaviorDesignerVariable.GetValue(); } continue; } // FsmObject if (iCodeVariable is FsmObject) { if (behaviorDesignerVariable is SharedGameObject) { (iCodeVariable as FsmObject).Value = (GameObject)behaviorDesignerVariable.GetValue(); } else if (behaviorDesignerVariable is SharedObject) { (iCodeVariable as FsmObject).Value = (Object)behaviorDesignerVariable.GetValue(); } continue; } } } }