public override object GetValue(object arg) { var elem = arg as Element; var mtlins = elem.VarObject.SceneMesh.MtlMeshArray[elem.VarObject.MtlIndex].MtlInst; object obj; if (elem.VarObject.Host.VarRNameValues.TryGetValue(elem.VarObject.Index, out obj)) { return(obj); } if (elem.Type == typeof(float)) { float value = 0.0f; mtlins.GetVarValue((uint)elem.VarObject.Index, 0, ref value); return(value); } else if (elem.Type == typeof(Vector2)) { var value = new Vector2(); mtlins.GetVarValue((uint)elem.VarObject.Index, 0, ref value); return(value); } else if (elem.Type == typeof(Vector3)) { var value = new Vector3(); mtlins.GetVarValue((uint)elem.VarObject.Index, 0, ref value); return(value); } else if (elem.Type == typeof(Vector4)) { var value = new Vector4(); mtlins.GetVarValue((uint)elem.VarObject.Index, 0, ref value); return(value); } else if (elem.Type == typeof(EngineNS.Color)) { var value = new Vector4(); mtlins.GetVarValue((uint)elem.VarObject.Index, 0, ref value); var retVal = new EngineNS.Color(); retVal.R = (byte)(value.X * 255); retVal.G = (byte)(value.Y * 255); retVal.B = (byte)(value.Z * 255); retVal.A = (byte)(value.W * 255); return(retVal); } return(null); }
public override object GetValue(object arg) { var elem = arg as Element; if (elem.Type == typeof(float)) { float value = 0.0f; elem.VarObject.mMaterialInstance.GetVarValue(elem.VarObject.Index, 0, ref value); return(value); } else if (elem.Type == typeof(Vector2)) { var value = new Vector2(); elem.VarObject.mMaterialInstance.GetVarValue(elem.VarObject.Index, 0, ref value); return(value); } else if (elem.Type == typeof(Vector3)) { var value = new Vector3(); elem.VarObject.mMaterialInstance.GetVarValue(elem.VarObject.Index, 0, ref value); return(value); } else if (elem.Type == typeof(Vector4)) { var value = new Vector4(); elem.VarObject.mMaterialInstance.GetVarValue(elem.VarObject.Index, 0, ref value); return(value); } else if (elem.Type == typeof(EngineNS.Color)) { var value = new Vector4(); elem.VarObject.mMaterialInstance.GetVarValue(elem.VarObject.Index, 0, ref value); var retVal = new EngineNS.Color(); retVal.R = (byte)(value.X * 255); retVal.G = (byte)(value.Y * 255); retVal.B = (byte)(value.Z * 255); retVal.A = (byte)(value.W * 255); return(retVal); } return(null); }
public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context) { var SetMaterialInstanceValue = new CodeGenerateSystem.CodeDom.CodeMemberMethod(); SetMaterialInstanceValue.Name = "SetMaterialInstanceValue"; SetMaterialInstanceValue.ReturnType = new CodeTypeReference(typeof(void)); SetMaterialInstanceValue.Attributes = MemberAttributes.Public | MemberAttributes.Override; codeClass.Members.Add(SetMaterialInstanceValue); var param = new CodeParameterDeclarationExpression(typeof(EngineNS.Graphics.Mesh.CGfxMesh), "mesh"); SetMaterialInstanceValue.Parameters.Add(param); SetMaterialInstanceValue.Statements.Add(new CodeVariableDeclarationStatement(typeof(int), "keyindex")); SetMaterialInstanceValue.Statements.Add(new CodeVariableDeclarationStatement(typeof(string), "varname")); var varmesh = new CodeVariableReferenceExpression("mesh"); for (int i = 0; i < ShowValues.Count; i++) { var showvalue = ShowValues[i]; foreach (var varvalue in showvalue.VarRNameValues) { var varmeshMtlInst = new CodeVariableReferenceExpression("mesh.MtlMeshArray[" + i + "].MtlInst"); SetMaterialInstanceValue.Statements.Add(new CodeAssignStatement(new CodeVariableReferenceExpression("varname"), new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(varmeshMtlInst, "GetVarName", new CodeExpression[] { new CodePrimitiveExpression(varvalue.Key), new CodePrimitiveExpression(true) }))); SetMaterialInstanceValue.Statements.Add(new CodeAssignStatement(new CodeVariableReferenceExpression("keyindex"), new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(varmesh, "McFindVar", new CodeExpression[] { new CodePrimitiveExpression(i), new CodeVariableReferenceExpression("varname") }))); if (varvalue.Value.GetType().Equals(typeof(float))) { SetMaterialInstanceValue.Statements.Add(new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(varmesh, "McSetVarFloat", new CodeExpression[] { new CodePrimitiveExpression(i), new CodeVariableReferenceExpression("keyindex"), new CodePrimitiveExpression((float)varvalue.Value), new CodePrimitiveExpression(0) })); } else if (varvalue.Value.GetType().Equals(typeof(Vector2))) { Vector2 value = (Vector2)varvalue.Value; SetMaterialInstanceValue.Statements.Add(new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(varmesh, "McSetVarVector2", new CodeExpression[] { new CodePrimitiveExpression(i), new CodeVariableReferenceExpression("keyindex"), new CodeObjectCreateExpression(typeof(Vector2), new CodeExpression[] { new CodePrimitiveExpression(value.X), new CodePrimitiveExpression(value.Y) }), new CodePrimitiveExpression(0) })); } else if (varvalue.Value.GetType().Equals(typeof(Vector3))) { Vector3 value = (Vector3)varvalue.Value; SetMaterialInstanceValue.Statements.Add(new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(varmesh, "McSetVarVector3", new CodeExpression[] { new CodePrimitiveExpression(i), new CodeVariableReferenceExpression("keyindex"), new CodeObjectCreateExpression(typeof(Vector3), new CodeExpression[] { new CodePrimitiveExpression(value.X), new CodePrimitiveExpression(value.Y), new CodePrimitiveExpression(value.Z) }), new CodePrimitiveExpression(0) })); } else if (varvalue.Value.GetType().Equals(typeof(Vector4))) { Vector4 value = (Vector4)varvalue.Value; SetMaterialInstanceValue.Statements.Add(new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(varmesh, "McSetVarColor4", new CodeExpression[] { new CodePrimitiveExpression(i), new CodeVariableReferenceExpression("keyindex"), new CodeObjectCreateExpression(typeof(Vector4), new CodeExpression[] { new CodePrimitiveExpression(value.X), new CodePrimitiveExpression(value.Y), new CodePrimitiveExpression(value.Z), new CodePrimitiveExpression(value.W) }), new CodePrimitiveExpression(0) })); } else if (varvalue.Value.GetType().Equals(typeof(EngineNS.Color))) { EngineNS.Color value = (EngineNS.Color)varvalue.Value; SetMaterialInstanceValue.Statements.Add(new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(varmesh, "McSetVarColor4", new CodeExpression[] { new CodePrimitiveExpression(i), new CodeVariableReferenceExpression("keyindex"), new CodeObjectCreateExpression(typeof(Vector4), new CodeExpression[] { new CodePrimitiveExpression(value.R), new CodePrimitiveExpression(value.G), new CodePrimitiveExpression(value.B), new CodePrimitiveExpression(value.A) }), new CodePrimitiveExpression(0) })); } } foreach (var srvvalue in showvalue.SRVRNameValues) { //var texture = CEngine.Instance.TextureManager.GetShaderRView(CEngine.Instance.RenderContext, value); ////elem.VarObject.SceneMesh.MtlMeshArray[elem.VarObject.MtlIndex].MtlInst.GetSRVName((uint)elem.VarObject.Index, true); //elem.VarObject.SceneMesh.McSetTexture(elem.VarObject.MtlIndex, key, value); //elem.VarObject.Host.AddSRVValue(elem.VarObject.Index, value); SetMaterialInstanceValue.Statements.Add(new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(varmesh, "McSetTexture", new CodeExpression[] { new CodePrimitiveExpression(i), new CodePrimitiveExpression(srvvalue.Key), new CodeSnippetExpression("EngineNS.CEngine.Instance.FileManager.GetRName(\"" + srvvalue.Value + "\")") })); } } }