/// <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); }
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); }
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(); } } }