public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context) { var valueEvaluateMethod = new CodeMemberMethod(); valueEvaluateMethod.Name = ValidName + "_InputEvaluate"; valueEvaluateMethod.Attributes = MemberAttributes.Public | MemberAttributes.Final; valueEvaluateMethod.ReturnType = new CodeTypeReference(typeof(EngineNS.Vector3)); var valueEvaluateMethodContex = new GenerateCodeContext_Method(context.ClassContext, valueEvaluateMethod); var tempInputName = "tempInput"; CodeVariableDeclarationStatement tempInput = new CodeVariableDeclarationStatement(new CodeTypeReference(typeof(EngineNS.Vector3)), tempInputName, new CodeObjectCreateExpression(typeof(EngineNS.Vector3), new CodeExpression[] { new CodePrimitiveExpression(0), new CodePrimitiveExpression(0), new CodePrimitiveExpression(0) })); valueEvaluateMethod.Statements.Add(tempInput); CodeExpression xValue = null; CodeExpression yValue = null; xValue = await Helper.GetEvaluateValueExpression(codeClass, valueEvaluateMethodContex, valueEvaluateMethod, mXLinkHandle, 0); if (!Is1D) { yValue = await Helper.GetEvaluateValueExpression(codeClass, valueEvaluateMethodContex, valueEvaluateMethod, mYLinkHandle, 0); } CodeAssignStatement xValueAssign = new CodeAssignStatement(); xValueAssign.Left = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(tempInputName), "X"); xValueAssign.Right = xValue; valueEvaluateMethod.Statements.Add(xValueAssign); if (!Is1D) { CodeAssignStatement yValueAssign = new CodeAssignStatement(); yValueAssign.Left = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(tempInputName), "Y"); yValueAssign.Right = yValue; valueEvaluateMethod.Statements.Add(yValueAssign); } valueEvaluateMethod.Statements.Add(new CodeMethodReturnStatement(new CodeVariableReferenceExpression(tempInputName))); codeClass.Members.Add(valueEvaluateMethod); Type bsType; if (Is1D) { bsType = typeof(EngineNS.Bricks.Animation.BlendTree.Node.BlendTree_BlendSpace1D); } else { bsType = typeof(EngineNS.Bricks.Animation.BlendTree.Node.BlendTree_BlendSpace2D); } var createLABSMethodInvoke = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeTypeReferenceExpression(bsType), "CreateSync"), new CodeExpression[] { new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeTypeReferenceExpression(typeof(EngineNS.RName)), "GetRName", new CodeExpression[] { new CodePrimitiveExpression(FileName.Name) }) }); CodeVariableDeclarationStatement stateVarDeclaration = new CodeVariableDeclarationStatement(bsType, ValidName, createLABSMethodInvoke); codeStatementCollection.Add(stateVarDeclaration); var syncPlayPercentGropAssign = new CodeAssignStatement(); syncPlayPercentGropAssign.Left = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "SyncPlayPercentGrop"); syncPlayPercentGropAssign.Right = new CodePrimitiveExpression(SyncPlayPercentGrop); codeStatementCollection.Add(syncPlayPercentGropAssign); CodeAssignStatement inputFuncAssign = new CodeAssignStatement(); inputFuncAssign.Left = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "EvaluateInput"); inputFuncAssign.Right = new CodeVariableReferenceExpression(valueEvaluateMethod.Name); codeStatementCollection.Add(inputFuncAssign); List <string> nofifies = new List <string>(); var info = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromFile(FileName.Address + ".rinfo", null); EngineNS.Bricks.Animation.AnimNode.BlendSpace bs = null; if (Is1D) { bs = EngineNS.Bricks.Animation.AnimNode.BlendSpace1D.CreateSync(FileName); } else { bs = EngineNS.Bricks.Animation.AnimNode.BlendSpace2D.CreateSync(FileName); } if (info != null) { for (int j = 0; j < bs.Samples.Count; ++j) { var clip = bs.GetAnimationSample(j); var refInfo = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromFile(clip.AnimationName.Address + ".rinfo", null); var animationInfo = refInfo as EditorCommon.ResourceInfos.AnimationClipResourceInfo; nofifies.Clear(); foreach (var pair in animationInfo.NotifyTrackMap) { nofifies.Add(pair.NotifyName); } for (int i = 0; i < nofifies.Count; ++i) { var notify = nofifies[i]; var validNotifyName = StringRegex.GetValidName(notify); validNotifyName = "Anim_Notify_" + validNotifyName; if (hasTheNotifyMethod(codeClass, validNotifyName)) { var attachNotifyEventExp = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "BlendSpace"), "AttachNotifyEvent"), new CodeExpression[] { new CodePrimitiveExpression(j), new CodePrimitiveExpression(i), new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), validNotifyName) }); //CodeArrayIndexerExpression arrayIndex = new CodeArrayIndexerExpression(new CodeFieldReferenceExpression(animRef, "Notifies"), new CodePrimitiveExpression(i)); //CodeAttachEventStatement attachEvent = new CodeAttachEventStatement(arrayIndex, "OnNotify", new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), validNotifyName)); codeStatementCollection.Add(attachNotifyEventExp); } } } } return; }
public LABlendSpaceControl(LABlendSpaceControlConstructionParams csParam) : base(csParam) { InitConstruction(); NodeName = csParam.NodeName; Is1D = csParam.Is1D; FileName = csParam.FileName; SyncPlayPercentGrop = csParam.SyncPlayPercentGrop; OnAdded = csParam.OnAdded; BindingTemplateClassInstanceProperties(); if (Is1D) { var bs1 = EditorCommon.Utility.EditableAnimationOperation.CreateBlendSpace1D(FileName); csParam.XName = bs1.BlendAxises[0].AxisName; bs1.BlendAxises[0].OnAxisNameChange += LABlendSpaceControl_OnXAxisNameChange; } else { var bs2 = EditorCommon.Utility.EditableAnimationOperation.CreateBlendSpace(FileName); csParam.XName = bs2.BlendAxises[0].AxisName; csParam.YName = bs2.BlendAxises[1].AxisName; bs2.BlendAxises[0].OnAxisNameChange += LABlendSpaceControl_OnXAxisNameChange; bs2.BlendAxises[1].OnAxisNameChange += LABlendSpaceControl_OnYAxisNameChange; } IsOnlyReturnValue = true; XValueHandle.NameStringVisible = Visibility.Visible; XValueHandle.NameString = csParam.XName; if (Is1D) { YValueHandle.Visibility = Visibility.Collapsed; } else { YValueHandle.Visibility = Visibility.Visible; YValueHandle.NameStringVisible = Visibility.Visible; YValueHandle.NameString = csParam.YName; } AddLinkPinInfo("XLinkHandle", mXLinkHandle, null); AddLinkPinInfo("YLinkHandle", YValueHandle, null); AddLinkPinInfo("OutLinkHandle", mOutLinkHandle, null); if (Is1D) { TitleImage = TryFindResource("AnimationNode_BlendSpace1D_64x") as ImageSource; } else { TitleImage = TryFindResource("AnimationNode_BlendSpace_64x") as ImageSource; } EngineNS.Bricks.Animation.AnimNode.BlendSpace bs = null; if (Is1D) { bs = EngineNS.Bricks.Animation.AnimNode.BlendSpace1D.CreateSync(FileName); } else { bs = EngineNS.Bricks.Animation.AnimNode.BlendSpace2D.CreateSync(FileName); } if (bs != null) { OnAdded?.Invoke(EngineNS.RName.GetRName(bs.GetElementProperty(EngineNS.Bricks.Animation.AnimNode.ElementPropertyType.EPT_Skeleton))); } }