public void TestShaderDynamicExpression2() { var testInput = ParseString( "1A 13 04 0F 00 07 00 07 00 00 00 00 02 14 00 1F 28 A6 90 70 04 19 00 21 00 19 A1 D0 52 1E 02 26 00 1D 6F 89 29 B8 00"); var expectedResult = "(COND[19] && exists(UNKNOWN[7090a628])) ? UNKNOWN[1e52d0a1] : EVAL[b829896f]"; VfxEval vfxEval = new VfxEval(testInput, omitReturnStatement: true); Assert.AreEqual(expectedResult, vfxEval.DynamicExpressionResult); }
public override void Read(BinaryReader reader, Resource resource) { base.Read(reader, resource); Name = Data.GetProperty <string>("m_materialName"); ShaderName = Data.GetProperty <string>("m_shaderName"); foreach (var kvp in Data.GetArray("m_intParams")) { IntParams[kvp.GetProperty <string>("m_name")] = kvp.GetIntegerProperty("m_nValue"); } foreach (var kvp in Data.GetArray("m_floatParams")) { FloatParams[kvp.GetProperty <string>("m_name")] = kvp.GetFloatProperty("m_flValue"); } foreach (var kvp in Data.GetArray("m_vectorParams")) { VectorParams[kvp.GetProperty <string>("m_name")] = kvp.GetSubCollection("m_value").ToVector4(); } foreach (var kvp in Data.GetArray("m_textureParams")) { TextureParams[kvp.GetProperty <string>("m_name")] = kvp.GetProperty <string>("m_pValue"); } foreach (var kvp in Data.GetArray("m_intAttributes")) { IntAttributes[kvp.GetProperty <string>("m_name")] = kvp.GetIntegerProperty("m_nValue"); } foreach (var kvp in Data.GetArray("m_floatAttributes")) { FloatAttributes[kvp.GetProperty <string>("m_name")] = kvp.GetFloatProperty("m_flValue"); } foreach (var kvp in Data.GetArray("m_vectorAttributes")) { VectorAttributes[kvp.GetProperty <string>("m_name")] = kvp.GetSubCollection("m_value").ToVector4(); } foreach (var kvp in Data.GetArray("m_stringAttributes")) { StringAttributes[kvp.GetProperty <string>("m_name")] = kvp.GetProperty <string>("m_value"); } // This is zero-length for all vmat files in Dota2 and HL archives var textureAttributes = Data.GetArray <string>("m_textureAttributes"); if (textureAttributes.Length > 0) { Console.WriteLine("unexpected textureAttributes length"); } var renderAttributesUsed = Data.GetArray <string>("m_renderAttributesUsed"); foreach (var kvp in Data.GetArray("m_dynamicParams")) { var dynamicParamName = kvp.GetProperty <string>("m_name"); var dynamicParamBytes = kvp.GetProperty <byte[]>("m_value"); var vfxEval = new VfxEval(dynamicParamBytes, renderAttributesUsed); DynamicExpressions.Add(dynamicParamName, vfxEval.DynamicExpressionResult.Replace("\n", "\\n", StringComparison.Ordinal)); } foreach (var kvp in Data.GetArray("m_dynamicTextureParams")) { var dynamicTextureParamName = kvp.GetProperty <string>("m_name"); var dynamicTextureParamBytes = kvp.GetProperty <byte[]>("m_value"); var vfxEval = new VfxEval(dynamicTextureParamBytes, renderAttributesUsed); DynamicExpressions.Add(dynamicTextureParamName, vfxEval.DynamicExpressionResult.Replace("\n", "\\n", StringComparison.Ordinal)); } }