コード例 #1
0
 /// <summary>
 /// Applied after UpdateDirty runs.
 /// </summary>
 internal static void Postfix(int __result, KAnimBatch __instance)
 {
     if (__result > 0)
     {
         KAnimMeshRendererPatches.UpdateMaterialProperties(__instance);
     }
 }
コード例 #2
0
        /// <summary>
        /// Applied before UpdateDirty runs.
        /// </summary>
        internal static bool Prefix(ref int __result, KAnimBatch __instance)
        {
            int updated = 0;

            //Metrics.DebugMetrics.LogCondition("batchDirty", __instance.needsWrite);
            if (__instance.needsWrite)
            {
                bool symbolDirty = false, overrideDirty = false;
                var  controllers = __instance.controllers;
                var  dirtySet    = __instance.dirtySet;
                // Create the texture if it is null
                var tex = __instance.dataTex;
                if (tex == null || tex.floats.Length == 0)
                {
                    __instance.Init();
                    tex = __instance.dataTex;
                }
                var overrideTex = __instance.symbolOverrideInfoTex;
                foreach (int index in dirtySet)
                {
                    var converter = controllers[index];
                    if (converter is UnityEngine.Object obj && obj != null)
                    {
                        // Update the textures; they are different over 90% of the time, so
                        // almost no gain from checking if actually dirty
                        __instance.WriteBatchedAnimInstanceData(index, converter);
                        symbolDirty |= __instance.WriteSymbolInstanceData(index, converter);
                        if (converter.ApplySymbolOverrides())
                        {
                            overrideTex    = SetupOverride(__instance, overrideTex);
                            overrideDirty |= __instance.WriteSymbolOverrideInfoTex(index,
                                                                                   converter);
                        }
                        updated++;
                    }
                }
                dirtySet.Clear();
                __instance.needsWrite = false;
                // Write any dirty textures
                tex.LoadRawTextureData();
                tex.Apply();
                if (symbolDirty)
                {
                    var symbolTex = __instance.symbolInstanceTex;
                    symbolTex.LoadRawTextureData();
                    symbolTex.Apply();
                }
                if (overrideDirty)
                {
                    overrideTex.LoadRawTextureData();
                    overrideTex.Apply();
                }
                // Update those mesh renderers too
                if (updated > 0 && FastTrackOptions.Instance.MeshRendererOptions !=
                    FastTrackOptions.MeshRendererSettings.None)
                {
                    KAnimMeshRendererPatches.UpdateMaterialProperties(__instance);
                }
            }
            __result = updated;
            return(false);
        }