public void UnregisterDirectInput(int id, string name) { name = name == null ? workBundleName : name; CubeBundle bundle = this.bundles.Single(x => x.Name == name); var directInput = bundle.DirectInputs.SingleOrDefault(x => x.ID == id); // removing from persistance bundle.DirectInputs.Remove(directInput); // removing from existing connections bundle.ParaDirectInputConnections = bundle.ParaDirectInputConnections .Where(x => x.DirectInput.ID != id) .ToList(); }
public object RunCube(string bundleName, Variable[] variables = null) { bundleName = bundleName == null ? workBundleName : bundleName; // looking for existing bundle with the given name CubeBundle bundle = this.bundles.SingleOrDefault(x => x.Name == bundleName); // if not found try load persisted bundle with given name if (bundle == null) { this.AddBundle(bundleName); this.LoadPersistedData(bundleName, false); Debug.Log($"Bundle not Found, Loading Bundle: {bundleName}"); } // if the bundle is still null, well nothing we can do, abort! bundle = this.bundles.SingleOrDefault(x => x.Name == bundleName); if (bundle == null) { Debug.LogError($"Bundle not Found After Loading it, ABORT"); return(null); } if (variables == null) { variables = new Variable[0]; } if (bundle.ResultMethodCall == null) { Debug.Log("Result Not Connected!"); return(null); } // run the recursion object result = this.RunCubeRecursion(bundle.ResultMethodCall, bundle, variables); // most times the result is null so we have nothing to display if (result != null) { Debug.Log("SUCCESS " + result.ToString()); } return(result); }
public Node UnregisterClassName(string className, string name) { name = name == null ? workBundleName : name; CubeBundle bundle = this.bundles.Single(x => x.Name == name); ClassTracking ct = bundle.ClassTypeNamesForPersistance.SingleOrDefault(x => x.Name == className); if (ct != null) { bundle.ClassTypeNamesForPersistance.Remove(ct); } // removing the connections itself, not the visualisation or anything else bundle.ParaMethConnections = bundle.ParaMethConnections .Where(x => x.Method.ClassNode != ct.node || x.Parameter.ClassNode != ct.node) .ToList(); bundle.ParaDirectInputConnections = bundle.ParaDirectInputConnections .Where(x => x.Parameter.ClassNode != ct.node) .ToList(); return(ct.node); }
private object RunCubeRecursion(MethodNode node, CubeBundle bundle, Variable[] variables) { List <object> values = new List <object>(); foreach (var paramater in node.MyParamaters) { var constant = bundle.ParaDirectInputConnections.Where(x => x.Parameter.ParameterInfo.ID == paramater.ID) .ToArray(); if (constant.Length > 1) { Debug.Log("MORE THANT ONE CONSTANT!!!!"); Debug.Break(); } if (constant.Length == 1) { if (constant[0].DirectInput.IsVariable()) { // Finding the variable with the right name and getting it's value. The values are passed by the resultUI. values.Add(variables.SingleOrDefault(x => x.Name == constant[0].DirectInput.VariableName)?.Value); } else { values.Add(constant[0].DirectInput.GetVal()); } try { values[values.Count - 1] = Convert.ChangeType(values[values.Count - 1], paramater.Info.ParameterType); } catch (Exception e) { // Debug.Log("Error converting"); } continue; } var method = bundle.ParaMethConnections.Where(x => x.Parameter.ParameterInfo.ID == paramater.ID).ToArray(); if (method.Length > 1) { Debug.Log("MORE THANT ONE CONSTANT!!!!"); Debug.Break(); } if (method.Length == 0) { /// Hack to let me only pass one float of many and the rest to be 0 values.Add(paramater.Info.DefaultValue); Debug.Log("Property not assigned to - Giving it the default!"); } else { values.Add(RunCubeRecursion(method[0].Method, bundle, variables)); } values[values.Count - 1] = Convert.ChangeType(values[values.Count - 1], paramater.Info.ParameterType); } object obj = node.Object; object[] par = values.ToArray(); //DEBUGGING // Debug.Log("###########################################################################################"); // Debug.Log($"<<<<{node.Object.GetType().Name}>>>"); // Debug.Log($">>>{node.MyMethodInfo.Info.Name}<<<"); for (int i = 0; i < node.MyParamaters.Length; i++) { var param = node.MyParamaters[i]; // Debug.Log($"{param.Info.ParameterType.Name} {par[i]?.ToString()}"); } //... object result = node.MyMethodInfo.Info.Invoke(obj, par); //Debug.Log("PASSED"); return(result); }