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); }
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); }
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"); }
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"); }
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); }