예제 #1
0
        /// <summary>
        /// Applied before Register runs.
        /// </summary>
        internal static bool Prefix(KAnimConverter.IAnimConverter controller,
                                    KAnimBatch __instance, ref bool __result)
        {
            var batch = controller.GetBatch();

            if (batch != __instance)
            {
                var dirtySet           = __instance.dirtySet;
                var controllers        = __instance.controllers;
                var controllersToIndex = __instance.controllersToIdx;
                // Create the texture if it is null
                var tex = __instance.dataTex;
                if (tex == null || tex.floats.Length < 1)
                {
                    __instance.Init();
                }
                // If already present [how is this possible?], just mark it dirty
                if (controllersToIndex.TryGetValue(controller, out int index))
                {
                    if (!dirtySet.Contains(index))
                    {
                        dirtySet.Add(index);
                    }
                }
                else
                {
                    int n = controllers.Count;
                    controllers.Add(controller);
                    dirtySet.Add(n);
                    controllersToIndex.Add(controller, n);
                    // Allocate additional spots in the texture
                    __instance.currentOffset += KBatchedAnimInstanceData.SIZE_IN_FLOATS;
                }
                __instance.batchset.SetDirty();
                __instance.needsWrite = true;
                if (batch != null)
                {
                    batch.Deregister(controller);
                }
                controller.SetBatch(__instance);
            }
            else
            {
#if DEBUG
                PUtil.LogDebug("Registered a controller to its existing batch!");
#endif
            }
            __result = true;
            return(false);
        }
예제 #2
0
 public bool Register(KAnimConverter.IAnimConverter controller)
 {
     if (dataTex == null || dataTex.floats.Length == 0)
     {
         Init();
     }
     if (!controllers.Contains(controller))
     {
         controllers.Add(controller);
         currentOffset += 28;
     }
     AddToDirty(controllers.IndexOf(controller));
     controller.GetBatch()?.Deregister(controller);
     controller.SetBatch(this);
     return(true);
 }
예제 #3
0
 public void SetBatch(KAnimConverter.IAnimConverter conv)
 {
     converter = conv;
     if (conv != null)
     {
         batch = conv.GetBatch();
     }
     else
     {
         batch = null;
         if ((Object)uiMat != (Object)null)
         {
             Object.Destroy(uiMat);
             uiMat = null;
         }
     }
     if (batch != null)
     {
         canvass = GetComponent <CanvasRenderer>();
         if ((Object)canvass == (Object)null)
         {
             canvass = base.gameObject.AddComponent <CanvasRenderer>();
         }
         rootRectTransform = GetComponent <RectTransform>();
         if ((Object)rootRectTransform == (Object)null)
         {
             rootRectTransform = base.gameObject.AddComponent <RectTransform>();
         }
         if (batch.group.InitOK)
         {
             if ((Object)uiMat != (Object)null)
             {
                 Object.Destroy(uiMat);
                 uiMat = null;
             }
             Material material = batch.group.GetMaterial(batch.materialType);
             uiMat = new Material(material);
             ((IMaskable)this).RecalculateMasking();
         }
     }
 }