Exemplo n.º 1
0
 /// <summary>
 /// Get invoke node code.
 /// </summary>
 /// <param name="target"></param>
 /// <returns></returns>
 public static string GetInvokeNodeCode(StateEventNode target)
 {
     if (target == null)
     {
         throw new System.ArgumentNullException(nameof(target));
     }
     if (!generatorData.ungroupedNode.Contains(target))
     {
         throw new uNodeException($"Forbidden to generate state code because the node: {target.GetNodeName()} is not registered as State Node.\nEnsure to register it using {nameof(CodeGenerator)}.{nameof(CodeGenerator.RegisterAsStateNode)}", target);
     }
     return(RunEvent(target));
 }
Exemplo n.º 2
0
        public override void OnInspectorGUI()
        {
            StateEventNode comp = target as StateEventNode;

            EditorGUI.BeginChangeCheck();
            DrawDefaultInspector();
            switch (comp.eventType)
            {
            case StateEventNode.EventType.OnAnimatorIK:
                uNodeGUIUtility.ShowField(
                    new GUIContent("Store Parameter"),
                    "storeParameter",
                    comp,
                    new object[] { new FilterAttribute(typeof(int))
                                   {
                                       SetMember = true
                                   } },
                    comp);
                break;

            case StateEventNode.EventType.OnApplicationFocus:
            case StateEventNode.EventType.OnApplicationPause:
                uNodeGUIUtility.ShowField(
                    new GUIContent("Store Parameter"),
                    "storeParameter",
                    comp,
                    new object[] { new FilterAttribute(typeof(bool))
                                   {
                                       SetMember = true
                                   } },
                    comp);
                break;

            case StateEventNode.EventType.OnCollisionEnter:
            case StateEventNode.EventType.OnCollisionExit:
            case StateEventNode.EventType.OnCollisionStay:
                uNodeGUIUtility.ShowField(
                    new GUIContent("Store Collision"),
                    "storeParameter",
                    comp,
                    new object[] { new FilterAttribute(typeof(Collision))
                                   {
                                       SetMember = true
                                   } },
                    comp);
                break;

            case StateEventNode.EventType.OnCollisionEnter2D:
            case StateEventNode.EventType.OnCollisionExit2D:
            case StateEventNode.EventType.OnCollisionStay2D:
                uNodeGUIUtility.ShowField(
                    new GUIContent("Store Collision2D"),
                    "storeParameter",
                    comp,
                    new object[] { new FilterAttribute(typeof(Collision2D))
                                   {
                                       SetMember = true
                                   } },
                    comp);
                break;

            case StateEventNode.EventType.OnTriggerEnter:
            case StateEventNode.EventType.OnTriggerExit:
            case StateEventNode.EventType.OnTriggerStay:
                uNodeGUIUtility.ShowField(
                    new GUIContent("Store Collider"),
                    "storeParameter",
                    comp,
                    new object[] { new FilterAttribute(typeof(Collider))
                                   {
                                       SetMember = true
                                   } },
                    comp);
                break;

            case StateEventNode.EventType.OnTriggerEnter2D:
            case StateEventNode.EventType.OnTriggerExit2D:
            case StateEventNode.EventType.OnTriggerStay2D:
                uNodeGUIUtility.ShowField(
                    new GUIContent("Store Collider2D"),
                    "storeParameter",
                    comp,
                    new object[] { new FilterAttribute(typeof(Collider2D))
                                   {
                                       SetMember = true
                                   } },
                    comp);
                break;

            default:
                if (comp.storeParameter.isAssigned)
                {
                    comp.storeParameter = MemberData.none;
                }
                break;
            }
            if (EditorGUI.EndChangeCheck())
            {
                uNodeGUIUtility.GUIChanged(comp);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Generate code for target node
        /// </summary>
        /// <param name="target"></param>
        /// <returns></returns>
        public static string GenerateNode(StateEventNode target)
        {
            if (target)
            {
                if (generatorData.generatedData.ContainsKey(target))
                {
                    return(generatorData.generatedData[target]);
                }
                string data = null;
                try {
                    string        fName         = target.eventType.ToString();
                    List <string> parameterType = new List <string>();
                    switch (target.eventType)
                    {
                    case StateEventNode.EventType.OnAnimatorIK:
                        parameterType.Add(ParseType(typeof(int)));
                        break;

                    case StateEventNode.EventType.OnApplicationFocus:
                    case StateEventNode.EventType.OnApplicationPause:
                        parameterType.Add(ParseType(typeof(bool)));
                        break;

                    case StateEventNode.EventType.OnCollisionEnter:
                    case StateEventNode.EventType.OnCollisionExit:
                    case StateEventNode.EventType.OnCollisionStay:
                        parameterType.Add(ParseType(typeof(Collision)));
                        break;

                    case StateEventNode.EventType.OnCollisionEnter2D:
                    case StateEventNode.EventType.OnCollisionExit2D:
                    case StateEventNode.EventType.OnCollisionStay2D:
                        parameterType.Add(ParseType(typeof(Collision2D)));
                        break;

                    case StateEventNode.EventType.OnTriggerEnter:
                    case StateEventNode.EventType.OnTriggerExit:
                    case StateEventNode.EventType.OnTriggerStay:
                        parameterType.Add(ParseType(typeof(Collider)));
                        break;

                    case StateEventNode.EventType.OnTriggerEnter2D:
                    case StateEventNode.EventType.OnTriggerExit2D:
                    case StateEventNode.EventType.OnTriggerStay2D:
                        parameterType.Add(ParseType(typeof(Collider2D)));
                        break;
                    }
                    MData mData = generatorData.GetMethodData(fName, parameterType);
                    if (mData == null && target.eventType != StateEventNode.EventType.OnEnter && target.eventType != StateEventNode.EventType.OnExit)
                    {
                        var  func     = graph.GetFunction(fName);
                        Type funcType = typeof(void);
                        if (func != null)
                        {
                            funcType = func.ReturnType();
                        }
                        mData = generatorData.AddMethod(fName, ParseType(funcType), parameterType);
                    }
                    string initStatement = null;
                    switch (target.eventType)
                    {
                    case StateEventNode.EventType.OnAnimatorIK:
                    case StateEventNode.EventType.OnApplicationFocus:
                    case StateEventNode.EventType.OnApplicationPause:
                    case StateEventNode.EventType.OnCollisionEnter:
                    case StateEventNode.EventType.OnCollisionExit:
                    case StateEventNode.EventType.OnCollisionStay:
                    case StateEventNode.EventType.OnCollisionEnter2D:
                    case StateEventNode.EventType.OnCollisionExit2D:
                    case StateEventNode.EventType.OnCollisionStay2D:
                    case StateEventNode.EventType.OnTriggerEnter:
                    case StateEventNode.EventType.OnTriggerExit:
                    case StateEventNode.EventType.OnTriggerStay:
                    case StateEventNode.EventType.OnTriggerEnter2D:
                    case StateEventNode.EventType.OnTriggerExit2D:
                    case StateEventNode.EventType.OnTriggerStay2D:
                        if (target.storeParameter.isAssigned)
                        {
                            initStatement = GenerateSetCode(ParseValue((object)target.storeParameter), mData.parameters[0].name);
                        }
                        break;
                    }
                    var flows = target.GetFlows();
                    if (flows != null && flows.Count > 0)
                    {
                        string contents = GenerateFlowCode(flows, target);
                        if (debugScript)
                        {
                            contents += GenerateDebugCode(target, StateType.Success);
                        }
                        data = contents;
                        if (!string.IsNullOrEmpty(data) && mData != null)
                        {
                            mData.AddCode(initStatement + GetInvokeNodeCode(target).AddLineInFirst(), -100);
                        }
                    }
                    if (setting.fullComment && !string.IsNullOrEmpty(data))
                    {
                        data = data.Insert(0, "//" + target.gameObject.name + " | Type:" + ParseType(target.GetType()).AddLineInEnd());
                    }
                    data = data.AddLineInFirst();
                }
                catch (Exception ex) {
                    if (!generatorData.hasError)
                    {
                        if (setting != null && setting.isAsync)
                        {
                            generatorData.errors.Add(ex);
                            //In case async return error commentaries.
                            return("/*Error from node: " + target.gameObject.name + " */");
                        }
                        Debug.LogError("Error from node:" + target.gameObject.name + " |Type:" + target.GetType() + "\nError:" + ex.ToString(), target);
                    }
                    generatorData.hasError = true;
                    throw;
                }
                if (string.IsNullOrEmpty(data))
                {
                    Debug.Log("Node not generated data", target);
                }
                if (includeGraphInformation)
                {
                    data = WrapWithInformation(data, target);
                }
                generatorData.generatedData.Add(target, data);
                return(data);
            }
            throw new System.Exception("Target node is null");
        }