Example #1
0
        public override string GenerateCode(Object obj)
        {
            string result = null;

            uNode.VariableData[] variables = CodeGenerator.GetUserObject(this) as uNode.VariableData[];
            if (variables == null)
            {
                variables    = new uNode.VariableData[2];
                variables[0] = new uNode.VariableData("anim", typeof(Animator));
                variables[1] = new uNode.VariableData("stateInfo", typeof(AnimatorStateInfo));
                CodeGenerator.RegisterUserObject(variables, this);
            }
            string anim      = CodeGenerator.GetVariableName(variables[0]);
            string stateInfo = CodeGenerator.GetVariableName(variables[1]);

            result += CodeGenerator.GenerateVariableDeclaration(variables[0], animator);
            result += CodeGenerator.GenerateVariableDeclaration(variables[1],
                                                                CodeGenerator.GetInvokeCode(variables[0], "GetCurrentAnimatorStateInfo", layerIndex).RemoveSemicolon(), false).AddLineInFirst();
            result += CodeGenerator.GenerateInvokeCode(anim, "CrossFade", CodeGenerator.ParseValue(stateName),
                                                       stateInfo + ".length",
                                                       CodeGenerator.ParseValue(layerIndex)).AddLineInFirst();
            if (waitUntilFinish)
            {
                string contents = CodeGenerator.GenerateYieldReturn(CodeGenerator.GenerateArithmetiCode(stateInfo + ".length", anim + ".playbackTime", ArithmeticType.Divide));
                contents += CodeGenerator.GenerateBreak().AddLineInFirst();
                string code = CodeGenerator.GenerateIfStatement(CodeGenerator.GenerateInvokeCode(stateInfo, "IsName", CodeGenerator.ParseValue(stateName)).RemoveSemicolon(), contents);
                code   += CodeGenerator.GetYieldReturn(null).AddLineInFirst();
                result += CodeGenerator.GenerateCondition("while", "true", code).AddLineInFirst();
            }
            return(result);
        }
Example #2
0
        public override string GenerateCode(Object obj)
        {
            string result = null;

            uNode.VariableData[] variables = CodeGenerator.GetUserObject(this) as uNode.VariableData[];
            if (variables == null)
            {
                variables    = new uNode.VariableData[2];
                variables[0] = new uNode.VariableData("animClip", typeof(AnimationClip));
                variables[1] = new uNode.VariableData("anim", typeof(Animation));
                CodeGenerator.RegisterUserObject(variables, this);
            }
            string animClip = CodeGenerator.GetVariableName(variables[0]);
            string anim     = CodeGenerator.GetVariableName(variables[1]);

            result += CodeGenerator.GenerateVariableDeclaration(variables[0], clip);
            result += CodeGenerator.GenerateVariableDeclaration(variables[1], animation).AddLineInFirst();
            result += CodeGenerator.GenerateSetCode(anim + "[" + animClip + ".name].wrapMode",
                                                    CodeGenerator.ParseValue(wrapMode)).AddLineInFirst();
            result += CodeGenerator.GenerateInvokeCode(anim, "CrossFade", animClip + ".name",
                                                       CodeGenerator.ParseValue(crossFadeTime)).AddLineInFirst();
            if (waitUntilFinish)
            {
                result += CodeGenerator.GenerateYieldReturn(CodeGenerator.GenerateNewObjectCode(typeof(WaitForSeconds), animClip + ".length")).AddLineInFirst();
            }
            return(result);
        }
Example #3
0
 public override string GenerateCode(Object obj)
 {
     if (transform.isAssigned && destination.isAssigned)
     {
         uNode.VariableData variable = CodeGenerator.GetOrRegisterUserObject(new uNode.VariableData("tr", transform.type), this);
         string             left     = CodeGenerator.GetVariableName(variable) + ".position";
         string             right    = CodeGenerator.GenerateInvokeCode(typeof(Vector3), "Lerp", left, CodeGenerator.ParseValue(destination),
                                                                        CodeGenerator.ParseType(typeof(Time)) + ".deltaTime * " + CodeGenerator.ParseValue(speed)).RemoveSemicolon();
         return(CodeGenerator.GenerateVariableDeclaration(variable, transform).AddLineInEnd() + CodeGenerator.GenerateSetCode(left, right));
     }
     throw new System.Exception("transform or destination is unassigned");
 }
Example #4
0
 public override string GenerateCode(Object obj)
 {
     if (transform.isAssigned && target.isAssigned)
     {
         uNode.VariableData variable     = CodeGenerator.GetOrRegisterUserObject(new uNode.VariableData("tr", transform.type), this);
         string             lookRotation = CodeGenerator.GenerateInvokeCode(typeof(Quaternion), "LookRotation",
                                                                            CodeGenerator.ParseValue((object)target) + ".position - " +
                                                                            CodeGenerator.GetVariableName(variable) + ".position");
         string left  = CodeGenerator.GetVariableName(variable) + ".rotation";
         string right = CodeGenerator.GenerateInvokeCode(typeof(Quaternion), "Slerp", left, lookRotation,
                                                         CodeGenerator.ParseType(typeof(Time)) + ".deltaTime * " + CodeGenerator.ParseValue(damping)).RemoveSemicolon();
         return(CodeGenerator.GenerateVariableDeclaration(variable, transform).AddLineInEnd() + CodeGenerator.GenerateSetCode(left, right));
     }
     throw new System.Exception("transform or target is unassigned");
 }
Example #5
0
        public override string GenerateCode(Object obj)
        {
            string result = null;

            uNode.VariableData[] variables = CodeGenerator.GetUserObject(this) as uNode.VariableData[];
            if (variables == null)
            {
                variables    = new uNode.VariableData[1];
                variables[0] = new uNode.VariableData("patrolIndex", typeof(int), -1);
                variables[0].modifier.SetPrivate();
                CodeGenerator.RegisterUserObject(variables, this);
                CodeGenerator.AddVariable(variables[0]);
            }
            string patrolIndex   = CodeGenerator.GetVariableName(variables[0]);
            var    targetPatrols = "targetPatrols".ToVariableName(this);

            result += CodeGenerator.GenerateVariableDeclaration(targetPatrols, typeof(IList <GameObject>), targets).AddLineInFirst();
            bool flag = false;

            if (targets.targetType == MemberData.TargetType.Values)
            {
                var targetList = targets.GetValue <IList <GameObject> >();
                if (targetList.Count == 0)
                {
                    return(null);
                }
                else if (targetList.Count == 1)
                {
                    result += patrolIndex.Set(0.ToCode()).AddLineInFirst();
                    flag    = true;
                }
            }
            if (!flag)
            {
                if (randomPatrol)
                {
                    var oldIndex = "oldIndex".ToVariableName(this);
                    result += CodeGenerator.GenerateVariableDeclaration(oldIndex, typeof(int), patrolIndex, false).AddLineInFirst();
                    result += CodeGenerator.GenerateCondition("while", patrolIndex.Compare(oldIndex),
                                                              patrolIndex.Set(typeof(Random).InvokeCode("Range",
                                                                                                        0.ToCode(),
                                                                                                        targetPatrols.Access("Count")).
                                                                              RemoveSemicolon())).AddLineInFirst();
                }
                else
                {
                    result += patrolIndex.Set(typeof(Mathf).
                                              InvokeCode("Repeat",
                                                         patrolIndex.AddOperation(1.ToCode()),
                                                         targetPatrols.Access("Count")).
                                              RemoveSemicolon().ConvertCode(typeof(int))).AddLineInFirst();
                }
            }
            var navAgent = "navAgent".ToVariableName(this);
            var target   = "target".ToVariableName(this);

            result += CodeGenerator.GenerateVariableDeclaration(navAgent, typeof(NavMeshAgent), agent).AddLineInFirst();
            result += CodeGenerator.GenerateVariableDeclaration(target, typeof(GameObject), targetPatrols.AccessElement(patrolIndex), false).AddLineInFirst();
            string condition = typeof(Vector3).InvokeCode("Distance",
                                                          navAgent.Access("transform", "position"),
                                                          target.Access("transform", "position")).RemoveSemicolon().
                               Compare(navAgent.Access("stoppingDistance"), ComparisonType.GreaterThanOrEqual);
            string contents = navAgent.InvokeCode("SetDestination",
                                                  target.Access("transform", "position"));

            contents += CodeGenerator.GenerateIfStatement(
                navAgent.Access("pathPending").NotOperation().
                AndOperation(navAgent.Access("remainingDistance")).
                Compare(navAgent.Access("stoppingDistance"), ComparisonType.LessThanOrEqual),
                CodeGenerator.GenerateBreak()).AddLineInFirst();
            contents += CodeGenerator.GetYieldReturn(null).AddLineInFirst();
            result   += CodeGenerator.GenerateCondition("while", condition, contents).AddLineInFirst();
            return(result);
        }