コード例 #1
0
            public SymbolFrameInstance GetFrame(int frame)
            {
                int             frameIdx       = GetFrameIdx(frame);
                KBatchGroupData batchGroupData = KAnimBatchManager.Instance().GetBatchGroupData(build.batchTag);

                return(batchGroupData.GetSymbolFrameInstance(frameIdx));
            }
コード例 #2
0
 /// <summary>
 /// Applied after RemoveBatch runs.
 /// </summary>
 internal static void Postfix(BatchSet __instance)
 {
     if (__instance.batches.Count < 1)
     {
         var key  = __instance.key;
         var inst = KAnimBatchManager.Instance();
         if (inst != null && inst.batchSets.Remove(key))
         {
             // Destroy from the batch manager
             IList <KAnimBatchManager.BatchSetInfo> toPurge;
             int n;
             if (key.materialType == MaterialType.UI)
             {
                 toPurge = inst.uiBatchSets;
             }
             else
             {
                 toPurge = inst.culledBatchSetInfos;
             }
             n = toPurge.Count;
             for (int i = 0; i < n; i++)
             {
                 if (toPurge[i].batchSet == __instance)
                 {
                     toPurge.RemoveAt(i);
                     break;
                 }
             }
         }
     }
 }
コード例 #3
0
        /// <summary>
        /// Indexes a particular anim file to see if it makes any progress.
        /// </summary>
        /// <param name="manager">The current batched animation manager.</param>
        /// <param name="data">The file data to check.</param>
        private void IndexAnim(KAnimBatchManager manager, KAnimFileData data)
        {
            int n     = data.animCount;
            var build = data.build;
            var bgd   = manager.GetBatchGroupData(build.batchTag);

            for (int i = 0; i < n; i++)
            {
                // Anim specifies a number of frames from the batch group's frames
                var  anim = data.GetAnim(i);
                int  start = anim.firstFrameIdx, nf = anim.numFrames, end = start + nf;
                bool trivial = nf < LONG_THRESHOLD;
                var  id      = anim.id;
                if (nf > 1 && trivial)
                {
                    var firstFrame = bgd.GetFrame(start++);
                    trivial = firstFrame.idx >= 0;
                    for (int j = start; j < end && trivial; j++)
                    {
                        // Frames of the animation are available from the batch group
                        var nextFrame = bgd.GetFrame(j);
                        trivial = nextFrame.idx >= 0 && CompareFrames(bgd, ref firstFrame,
                                                                      ref nextFrame);
                    }
                }
                if (trivial && !idleAnims.ContainsKey(id))
                {
                    // There are a couple of collisions in ONI, but they are properly handled
                    idleAnims.Add(id, new AnimWrapper(anim, nf));
                }
            }
        }
コード例 #4
0
 public void LoadAnims()
 {
     if (!KAnimBatchManager.Instance().isReady)
     {
         Debug.LogError("KAnimBatchManager is not ready when loading anim:" + base.name);
     }
     if (animFiles.Length <= 0)
     {
         DebugUtil.Assert(false, "KBatchedAnimController has no anim files:" + base.name);
     }
     if (animFiles[0].buildBytes == null)
     {
         DebugUtil.LogErrorArgs(base.gameObject, $"First anim file needs to be the build file but {animFiles[0].GetData().name} doesn't have an associated build");
     }
     overrideAnims.Clear();
     anims.Clear();
     SetBatchGroup(animFiles[0].GetData());
     for (int i = 0; i < animFiles.Length; i++)
     {
         AddAnims(animFiles[i]);
     }
     forceRebuild = true;
     if (layering != null)
     {
         layering.HideSymbols();
     }
     if (usingNewSymbolOverrideSystem)
     {
         DebugUtil.Assert((UnityEngine.Object)GetComponent <SymbolOverrideController>() != (UnityEngine.Object)null);
     }
 }
コード例 #5
0
        private static KBatchGroupData GetAnimBatchGroupData(KAnimFileData animFile)
        {
            if (!animFile.batchTag.IsValid)
            {
                Debug.LogErrorFormat("Invalid batchTag for anim [{0}]", animFile.name);
            }
            Debug.Assert(animFile.batchTag.IsValid, "Invalid batch tag");
            KAnimGroupFile.Group group = KAnimGroupFile.GetGroup(animFile.batchTag);
            if (group == null)
            {
                Debug.LogErrorFormat("Null group for tag [{0}]", animFile.batchTag);
            }
            HashedString    hashedString    = animFile.batchTag;
            KBatchGroupData kBatchGroupData = null;

            if (group.renderType == KAnimBatchGroup.RendererType.DontRender || group.renderType == KAnimBatchGroup.RendererType.AnimOnly)
            {
                if (!group.swapTarget.IsValid)
                {
                    Debug.LogErrorFormat("Invalid swap target for group [{0}]", group.id);
                }
                hashedString = group.swapTarget;
            }
            kBatchGroupData = KAnimBatchManager.Instance().GetBatchGroupData(hashedString);
            if (kBatchGroupData == null)
            {
                Debug.LogErrorFormat("Null batch group for tag [{0}]", hashedString);
            }
            return(kBatchGroupData);
        }
コード例 #6
0
    private bool ShouldUseSidewaysSymbol(KBatchedAnimController controller)
    {
        KAnim.Anim currentAnim = controller.GetCurrentAnim();
        if (currentAnim == null)
        {
            return(false);
        }
        int currentFrameIndex = controller.GetCurrentFrameIndex();

        if (currentFrameIndex <= 0)
        {
            return(false);
        }
        KBatchGroupData batchGroupData = KAnimBatchManager.Instance().GetBatchGroupData(currentAnim.animFile.animBatchTag);

        KAnim.Anim.Frame frame = batchGroupData.GetFrame(currentFrameIndex);
        for (int i = 0; i < frame.numElements; i++)
        {
            KAnim.Anim.FrameElement frameElement = batchGroupData.GetFrameElement(frame.firstElementIdx + i);
            if (frameElement.symbol == HASH_SNAPTO_EYES && frameElement.frame >= FIRST_SIDEWAYS_FRAME)
            {
                return(true);
            }
        }
        return(false);
    }
コード例 #7
0
 /// <summary>
 /// Applied before Render runs.
 /// </summary>
 internal static bool Prefix(KAnimBatchManager __instance)
 {
     if (__instance.ready)
     {
         Render(__instance.activeBatchSets);
     }
     return(false);
 }
コード例 #8
0
 private BatchKey(KAnimConverter.IAnimConverter controller)
 {
     _layer        = controller.GetLayer();
     _groupID      = controller.GetBatchGroupID(false);
     _materialType = controller.GetMaterialType();
     _z            = controller.GetZ();
     _idx          = KAnimBatchManager.ControllerToChunkXY(controller);
     _hash         = 0;
 }
コード例 #9
0
 private void LateUpdate()
 {
     if (Debug.developerConsoleVisible)
     {
         Debug.developerConsoleVisible = false;
     }
     KAnimBatchManager.Instance().UpdateActiveArea(new Vector2I(0, 0), new Vector2I(9999, 9999));
     KAnimBatchManager.Instance().UpdateDirty(Time.frameCount);
     KAnimBatchManager.Instance().Render();
 }
コード例 #10
0
        public Texture2D GetTexture(int index)
        {
            if (index < 0 || index >= textureCount)
            {
                Debug.LogError("Invalid texture index:" + index);
            }
            KBatchGroupData batchGroupData = KAnimBatchManager.Instance().GetBatchGroupData(batchTag);

            return(batchGroupData.GetTexure(textureStartIdx + index));
        }
コード例 #11
0
 protected override void Register()
 {
     if (IsActive() && batch == null && batchGroupID.IsValid && batchGroupID != KAnimBatchManager.NO_BATCH)
     {
         lastChunkXY = KAnimBatchManager.ControllerToChunkXY(this);
         KAnimBatchManager.Instance().Register(this);
         forceRebuild = true;
         SetDirty();
     }
 }
コード例 #12
0
 public void SetSymbolTint(KAnimHashedString symbol_name, Color color)
 {
     KAnim.Build.Symbol symbol = KAnimBatchManager.Instance().GetBatchGroupData(GetBatchGroupID(false)).GetSymbol(symbol_name);
     if (symbol != null)
     {
         base.symbolInstanceGpuData.SetSymbolTint(symbol.symbolIndexInSourceBuild, color);
         SuspendUpdates(false);
         SetDirty();
     }
 }
コード例 #13
0
    private void ApplyShape(KAnim.Build.Symbol variation_symbol, KBatchedAnimController controller, KAnimFile shapes_file, HashedString symbol_name_in_shape_file, bool should_use_sideways_symbol)
    {
        HashedString hashedString = HASH_NEUTRAL;

        if (currentExpression != null)
        {
            hashedString = currentExpression.face.hash;
        }
        KAnim.Anim anim = null;
        KAnim.Anim.FrameElement frameElement = default(KAnim.Anim.FrameElement);
        bool flag  = false;
        bool flag2 = false;

        for (int i = 0; i < shapes_file.GetData().animCount; i++)
        {
            if (flag)
            {
                break;
            }
            KAnim.Anim anim2 = shapes_file.GetData().GetAnim(i);
            if (anim2.hash == hashedString)
            {
                anim = anim2;
                KAnim.Anim.Frame frame = anim.GetFrame(shapes_file.GetData().build.batchTag, 0);
                for (int j = 0; j < frame.numElements; j++)
                {
                    KBatchGroupData batchGroupData = KAnimBatchManager.Instance().GetBatchGroupData(shapes_file.GetData().animBatchTag);
                    frameElement = batchGroupData.GetFrameElement(frame.firstElementIdx + j);
                    if (!(frameElement.symbol != symbol_name_in_shape_file))
                    {
                        if (flag2 || !should_use_sideways_symbol)
                        {
                            flag = true;
                        }
                        flag2 = true;
                        break;
                    }
                }
            }
        }
        if (anim == null)
        {
            DebugUtil.Assert(false, "Could not find shape for expression: " + HashCache.Get().Get(hashedString));
        }
        if (!flag2)
        {
            DebugUtil.Assert(false, "Could not find shape element for shape:" + HashCache.Get().Get(variation_symbol.hash));
        }
        KAnim.Build.Symbol symbol          = KAnimBatchManager.Instance().GetBatchGroupData(controller.batchGroupID).GetSymbol(symbol_name_in_shape_file);
        KBatchGroupData    batchGroupData2 = KAnimBatchManager.Instance().GetBatchGroupData(variation_symbol.build.batchTag);

        KAnim.Build.SymbolFrameInstance symbol_frame_instance = batchGroupData2.symbolFrameInstances[variation_symbol.firstFrameIdx + frameElement.frame];
        symbol_frame_instance.buildImageIdx = GetComponent <SymbolOverrideController>().GetAtlasIdx(variation_symbol.build.GetTexture(0));
        controller.SetSymbolOverride(symbol.firstFrameIdx, symbol_frame_instance);
    }
コード例 #14
0
    public KAnim.Anim.FrameElement GetAnimFrameElement(int index)
    {
        Debug.Assert(index >= 0 && index < elementCount);
        KBatchGroupData batchGroupData = KAnimBatchManager.Instance().GetBatchGroupData(animBatchTag);

        if (batchGroupData == null)
        {
            Debug.LogErrorFormat("[{0}] No such batch group [{1}]", name, animBatchTag.ToString());
        }
        return(batchGroupData.GetFrameElement(firstElementIndex + index));
    }
コード例 #15
0
    public override KAnim.Anim GetAnim(int index)
    {
        if (!batchGroupID.IsValid || !(batchGroupID != KAnimBatchManager.NO_BATCH))
        {
            Debug.LogError(base.name + " batch not ready");
        }
        KBatchGroupData batchGroupData = KAnimBatchManager.Instance().GetBatchGroupData(batchGroupID);

        Debug.Assert(batchGroupData != null);
        return(batchGroupData.GetAnim(index));
    }
 private void Awake()
 {
     KAnimBatchManager.DestroyInstance();
     KAnimGroupFile.DestroyInstance();
     KGlobalAnimParser.DestroyInstance();
     KAnimBatchManager.CreateInstance();
     KGlobalAnimParser.CreateInstance();
     Global.Instance.modManager.Load(Content.Animation);
     KAnimGroupFile.GetGroupFile().LoadAll();
     KAnimBatchManager.Instance().CompleteInit();
 }
コード例 #17
0
    public KAnim.Anim GetAnim(int index)
    {
        Debug.Assert(index >= 0 && index < animCount);
        KBatchGroupData batchGroupData = KAnimBatchManager.Instance().GetBatchGroupData(animBatchTag);

        if (batchGroupData == null)
        {
            Debug.LogError($"[{name}] No such batch group [{animBatchTag.ToString()}]");
        }
        return(batchGroupData.GetAnim(index + firstAnimIndex));
    }
コード例 #18
0
        /// <summary>
        /// Indexes all kanims and finds those that do not actually make any progress.
        /// </summary>
        private void IndexAnims()
        {
            var manager = KAnimBatchManager.Instance();

            idleAnims.Clear();
            foreach (var file in Assets.Anims)
            {
                var data = file?.GetData();
                if (data != null && data.build != null)
                {
                    IndexAnim(manager, data);
                }
            }
        }
コード例 #19
0
        /// <summary>
        /// Loads the anims on a background thread.
        /// </summary>
        private static void AsyncLoadAnims()
        {
#if DEBUG
            PUtil.LogDebug("Loading anims on thread " + Thread.CurrentThread.ManagedThreadId);
#endif
            try {
                KAnimGroupFile.LoadAll();
                KAnimBatchManager.Instance().CompleteInit();
            } catch (Exception e) {
                DebugUtil.LogException(Assets.instance, e.Message, e);
            }
            animsDone.Set();
            LoadGameHashes();
        }
 private void LateUpdate()
 {
     if (!destroySelf)
     {
         if (performUpdate)
         {
             KAnimBatchManager.Instance().UpdateActiveArea(new Vector2I(0, 0), new Vector2I(9999, 9999));
             KAnimBatchManager.Instance().UpdateDirty(Time.frameCount);
         }
         if (performRender)
         {
             KAnimBatchManager.Instance().Render();
         }
     }
 }
コード例 #21
0
 public KAnimBatchGroup(HashedString id)
 {
     data      = KAnimBatchManager.Instance().GetBatchGroupData(id);
     materials = new Material[5];
     batchID   = id;
     KAnimGroupFile.Group group = KAnimGroupFile.GetGroup(id);
     if (group != null)
     {
         maxGroupSize = group.maxGroupSize;
         if (maxGroupSize <= 0)
         {
             maxGroupSize = 30;
         }
         SetupMeshData();
         InitBuildAndAnimTex();
     }
 }
コード例 #22
0
ファイル: KAnimPatches.cs プロジェクト: peterhaneve/ONIMods
        /// <summary>
        /// Applied before SetBatchGroup runs.
        /// </summary>
        internal static bool Prefix(KBatchedAnimController __instance, KAnimFileData kafd)
        {
            var id = __instance.batchGroupID;

            if (id.IsValid)
            {
                PUtil.LogWarning("Batch group should only be set once!");
            }
            else if (kafd == null)
            {
                PUtil.LogWarning("No anim data for {0}!".F(__instance.name));
            }
            else if (id != kafd.batchTag)
            {
                var bild = kafd.build;
                var inst = KAnimBatchManager.Instance();
                if (bild == null)
                {
                    PUtil.LogWarning("No build for anim {0} on {1}!".F(kafd.name, __instance.
                                                                       name));
                }
                else if (!(id = bild.batchTag).IsValid || id == KAnimBatchManager.NO_BATCH)
                {
                    PUtil.LogWarning("Batch is not ready: " + __instance.name);
                }
                else if (inst != null)
                {
                    var bgd = KAnimBatchManager.instance.GetBatchGroupData(id);
                    id = bild.batchTag;
                    __instance.curBuild              = bild;
                    __instance.batchGroupID          = id;
                    __instance.symbolInstanceGpuData = new SymbolInstanceGpuData(bgd.
                                                                                 maxSymbolsPerBuild);
                    __instance.symbolOverrideInfoGpuData = new SymbolOverrideInfoGpuData(bgd.
                                                                                         symbolFrameInstances.Count);
                }
            }
            return(false);
        }
コード例 #23
0
 public void UpdateAnim(float dt)
 {
     if (batch != null && base.transform.hasChanged)
     {
         base.transform.hasChanged = false;
         if (batch != null && batch.group.maxGroupSize == 1)
         {
             float   z        = lastPos.z;
             Vector3 position = base.transform.GetPosition();
             if (z != position.z)
             {
                 KAnimBatch kAnimBatch = batch;
                 Vector3    position2  = base.transform.GetPosition();
                 kAnimBatch.OverrideZ(position2.z);
             }
         }
         Vector3 vector = lastPos = base.PositionIncludingOffset;
         if (visibilityType != VisibilityType.Always)
         {
             Vector2I u = KAnimBatchManager.ControllerToChunkXY(this);
             if (u != lastChunkXY && lastChunkXY != KBatchedAnimUpdater.INVALID_CHUNK_ID)
             {
                 DeRegister();
                 Register();
             }
         }
         SetDirty();
     }
     if (!(batchGroupID == KAnimBatchManager.NO_BATCH) && IsActive())
     {
         if (!forceRebuild && (mode == KAnim.PlayMode.Paused || stopped || curAnim == null || (mode == KAnim.PlayMode.Once && curAnim != null && (base.elapsedTime > curAnim.totalTime || curAnim.totalTime <= 0f) && animQueue.Count == 0)))
         {
             SuspendUpdates(true);
         }
         if (!isVisible && !forceRebuild)
         {
             if (visibilityType == VisibilityType.OffscreenUpdate && !stopped && mode != KAnim.PlayMode.Paused)
             {
                 SetElapsedTime(base.elapsedTime + dt * playSpeed);
             }
         }
         else
         {
             curAnimFrameIdx = GetFrameIdx(base.elapsedTime, true);
             if (eventManagerHandle.IsValid() && aem != null)
             {
                 float elapsedTime = aem.GetElapsedTime(eventManagerHandle);
                 if ((int)((base.elapsedTime - elapsedTime) * 100f) != 0)
                 {
                     UpdateAnimEventSequenceTime();
                 }
             }
             UpdateFrame(base.elapsedTime);
             if (!stopped && mode != KAnim.PlayMode.Paused)
             {
                 SetElapsedTime(base.elapsedTime + dt * playSpeed);
             }
             forceRebuild = false;
         }
     }
 }
コード例 #24
0
    public KAnim.Anim.FrameElement FindAnimFrameElement(KAnimHashedString symbolName)
    {
        KBatchGroupData batchGroupData = KAnimBatchManager.Instance().GetBatchGroupData(animBatchTag);

        return(batchGroupData.frameElements.Find((KAnim.Anim.FrameElement match) => match.symbol == symbolName));
    }
コード例 #25
0
ファイル: KAnimPatches.cs プロジェクト: peterhaneve/ONIMods
        /// <summary>
        /// Updates an active batched anim controller.
        /// </summary>
        /// <param name="instance">The controller to update.</param>
        /// <param name="dt">The time since the last update.</param>
        private static void UpdateActive(KBatchedAnimController instance, float dt)
        {
            Transform transform;
            var       batch   = instance.batch;
            var       visType = instance.visibilityType;
            bool      visible = instance.IsVisible();

            // Check if moved, do this even if offscreen as it may move the anim on screen
            if (batch != null && (transform = instance.transform).hasChanged)
            {
                var      lastChunk = instance.lastChunkXY;
                Vector3  pos = transform.position, posWithOffset = pos + instance.Offset;
                float    z = pos.z;
                Vector2I cellXY;
                bool     always = visType == KAnimControllerBase.VisibilityType.Always;
                transform.hasChanged = false;
                // If this is the only anim in the batch, and the Z coordinate changed,
                // override the Z in the batch
                if (batch.group.maxGroupSize == 1 && instance.lastPos.z != z)
                {
                    batch.OverrideZ(z);
                }
                instance.lastPos = posWithOffset;
                // This is basically GetCellXY() with less accesses to __instance.transform
                if (Grid.CellSizeInMeters == 0.0f)
                {
                    // Handle out-of-game
                    cellXY = new Vector2I((int)posWithOffset.x, (int)posWithOffset.y);
                }
                else
                {
                    cellXY = Grid.PosToXY(posWithOffset);
                }
                if (!always && lastChunk != KBatchedAnimUpdater.INVALID_CHUNK_ID &&
                    KAnimBatchManager.CellXYToChunkXY(cellXY) != lastChunk)
                {
                    // Re-register in a different batch
                    instance.DeRegister();
                    instance.Register();
                }
                else if (visible || always)
                {
                    // Only set dirty if it is on-screen now - changing visible sets dirty
                    // If it moved into a different chunk, Register sets dirty
                    instance.SetDirty();
                }
            }
            // If it has a batch, and is active
            if (instance.batchGroupID != KAnimBatchManager.NO_BATCH)
            {
                var   anim = instance.curAnim;
                var   mode = instance.mode;
                bool  force = instance.forceRebuild, stopped = instance.stopped;
                float t = instance.elapsedTime, increment = dt * instance.playSpeed;
                // Suspend updates if: not currently suspended, not force update, and one
                // of (paused, stopped, no anim, one time and finished with no more to play)
                if (!instance.suspendUpdates && !force && (mode == KAnim.PlayMode.Paused ||
                                                           stopped || anim == null || (mode == KAnim.PlayMode.Once && (t > anim.
                                                                                                                       totalTime || anim.totalTime <= 0f) && instance.animQueue.Count == 0)))
                {
                    instance.SuspendUpdates(true);
                }
                if (visible || force)
                {
                    var aem    = instance.aem;
                    var handle = instance.eventManagerHandle;
                    instance.curAnimFrameIdx = instance.GetFrameIdx(t, true);
                    // Trigger anim event manager if time advanced more than 0.01s
                    if (handle.IsValid() && aem != null)
                    {
                        float elapsedTime = aem.GetElapsedTime(handle);
                        if (Math.Abs(t - elapsedTime) > 0.01f)
                        {
                            aem.SetElapsedTime(handle, t);
                        }
                    }
                    instance.UpdateFrame(t);
                    // Time can be mutated by UpdateFrame
                    if (!stopped && mode != KAnim.PlayMode.Paused)
                    {
                        instance.SetElapsedTime(instance.elapsedTime + increment);
                    }
                    instance.forceRebuild = false;
                }
                else if (visType == KAnimControllerBase.VisibilityType.OffscreenUpdate &&
                         !stopped && mode != KAnim.PlayMode.Paused)
                {
                    // If invisible, only advance if offscreen update is enabled
                    instance.SetElapsedTime(t + increment);
                }
            }
        }
コード例 #26
0
    public static Vector2I PosToChunkXY(Vector3 pos)
    {
        Vector2I cell_xy = Grid.PosToXY(pos);

        return(KAnimBatchManager.CellXYToChunkXY(cell_xy));
    }
コード例 #27
0
 public void LoadAll()
 {
     Debug.Assert(!hasCompletedLoadAll, "You cannot load all the anim data twice!");
     fileData.Clear();
     for (int i = 0; i < groups.Count; i++)
     {
         if (!groups[i].id.IsValid)
         {
             Debug.LogErrorFormat("Group invalid groupIndex [{0}]", i);
         }
         KBatchGroupData kBatchGroupData = null;
         kBatchGroupData = ((!groups[i].target.IsValid) ? KAnimBatchManager.Instance().GetBatchGroupData(groups[i].id) : KAnimBatchManager.Instance().GetBatchGroupData(groups[i].target));
         HashedString batchTag = groups[i].id;
         if (groups[i].renderType == KAnimBatchGroup.RendererType.AnimOnly)
         {
             if (!groups[i].swapTarget.IsValid)
             {
                 continue;
             }
             kBatchGroupData = KAnimBatchManager.Instance().GetBatchGroupData(groups[i].swapTarget);
             batchTag        = groups[i].swapTarget;
         }
         for (int j = 0; j < groups[i].files.Count; j++)
         {
             KAnimFile kAnimFile = groups[i].files[j];
             if ((UnityEngine.Object)kAnimFile != (UnityEngine.Object)null && kAnimFile.buildBytes != null && !fileData.ContainsKey(kAnimFile.GetInstanceID()))
             {
                 if (kAnimFile.buildBytes.Length == 0)
                 {
                     Debug.LogWarning("Build File [" + kAnimFile.GetData().name + "] has 0 bytes");
                 }
                 else
                 {
                     HashedString hash = new HashedString(kAnimFile.name);
                     HashCache.Get().Add(hash.HashValue, kAnimFile.name);
                     KAnimFileData file = KGlobalAnimParser.Get().GetFile(kAnimFile);
                     file.maxVisSymbolFrames = 0;
                     file.batchTag           = batchTag;
                     file.buildIndex         = KGlobalAnimParser.ParseBuildData(kBatchGroupData, hash, new FastReader(kAnimFile.buildBytes), kAnimFile.textureList);
                     fileData.Add(kAnimFile.GetInstanceID(), file);
                 }
             }
         }
     }
     for (int k = 0; k < groups.Count; k++)
     {
         if (groups[k].renderType == KAnimBatchGroup.RendererType.AnimOnly)
         {
             KBatchGroupData batchGroupData  = KAnimBatchManager.Instance().GetBatchGroupData(groups[k].swapTarget);
             KBatchGroupData batchGroupData2 = KAnimBatchManager.Instance().GetBatchGroupData(groups[k].animTarget);
             for (int l = 0; l < batchGroupData.builds.Count; l++)
             {
                 KAnim.Build build = batchGroupData.builds[l];
                 if (build != null && build.symbols != null)
                 {
                     for (int m = 0; m < build.symbols.Length; m++)
                     {
                         KAnim.Build.Symbol symbol = build.symbols[m];
                         if (symbol != null && symbol.hash.IsValid() && batchGroupData2.GetFirstIndex(symbol.hash) == -1)
                         {
                             KAnim.Build.Symbol symbol2 = new KAnim.Build.Symbol();
                             symbol2.build                    = build;
                             symbol2.hash                     = symbol.hash;
                             symbol2.path                     = symbol.path;
                             symbol2.colourChannel            = symbol.colourChannel;
                             symbol2.flags                    = symbol.flags;
                             symbol2.firstFrameIdx            = batchGroupData2.symbolFrameInstances.Count;
                             symbol2.numFrames                = symbol.numFrames;
                             symbol2.symbolIndexInSourceBuild = batchGroupData2.frameElementSymbols.Count;
                             for (int n = 0; n < symbol2.numFrames; n++)
                             {
                                 KAnim.Build.SymbolFrameInstance symbolFrameInstance = batchGroupData.GetSymbolFrameInstance(n + symbol.firstFrameIdx);
                                 KAnim.Build.SymbolFrameInstance item = default(KAnim.Build.SymbolFrameInstance);
                                 item.symbolFrame   = symbolFrameInstance.symbolFrame;
                                 item.buildImageIdx = -1;
                                 item.symbolIdx     = batchGroupData2.GetSymbolCount();
                                 batchGroupData2.symbolFrameInstances.Add(item);
                             }
                             batchGroupData2.AddBuildSymbol(symbol2);
                         }
                     }
                 }
             }
         }
     }
     for (int num = 0; num < groups.Count; num++)
     {
         if (!groups[num].id.IsValid)
         {
             Debug.LogErrorFormat("Group invalid groupIndex [{0}]", num);
         }
         if (groups[num].renderType != KAnimBatchGroup.RendererType.DontRender)
         {
             KBatchGroupData kBatchGroupData2 = null;
             if (groups[num].animTarget.IsValid)
             {
                 kBatchGroupData2 = KAnimBatchManager.Instance().GetBatchGroupData(groups[num].animTarget);
                 if (kBatchGroupData2 == null)
                 {
                     Debug.LogErrorFormat("Anim group is null for [{0}] -> [{1}]", groups[num].id, groups[num].animTarget);
                 }
             }
             else
             {
                 kBatchGroupData2 = KAnimBatchManager.Instance().GetBatchGroupData(groups[num].id);
                 if (kBatchGroupData2 == null)
                 {
                     Debug.LogErrorFormat("Anim group is null for [{0}]", groups[num].id);
                 }
             }
             for (int num2 = 0; num2 < groups[num].files.Count; num2++)
             {
                 KAnimFile kAnimFile2 = groups[num].files[num2];
                 if ((UnityEngine.Object)kAnimFile2 != (UnityEngine.Object)null && kAnimFile2.animBytes != null)
                 {
                     if (kAnimFile2.animBytes.Length == 0)
                     {
                         Debug.LogWarning("Anim File [" + kAnimFile2.GetData().name + "] has 0 bytes");
                     }
                     else
                     {
                         if (!fileData.ContainsKey(kAnimFile2.GetInstanceID()))
                         {
                             KAnimFileData file2 = KGlobalAnimParser.Get().GetFile(kAnimFile2);
                             file2.maxVisSymbolFrames = 0;
                             file2.batchTag           = groups[num].id;
                             fileData.Add(kAnimFile2.GetInstanceID(), file2);
                         }
                         HashedString  fileNameHash = new HashedString(kAnimFile2.name);
                         FastReader    reader       = new FastReader(kAnimFile2.animBytes);
                         KAnimFileData animFile     = fileData[kAnimFile2.GetInstanceID()];
                         KGlobalAnimParser.ParseAnimData(kBatchGroupData2, fileNameHash, reader, animFile);
                     }
                 }
             }
         }
     }
     for (int num3 = 0; num3 < groups.Count; num3++)
     {
         if (!groups[num3].id.IsValid)
         {
             Debug.LogErrorFormat("Group invalid groupIndex [{0}]", num3);
         }
         KBatchGroupData kBatchGroupData3 = null;
         if (groups[num3].target.IsValid)
         {
             kBatchGroupData3 = KAnimBatchManager.Instance().GetBatchGroupData(groups[num3].target);
             if (kBatchGroupData3 == null)
             {
                 Debug.LogErrorFormat("Group is null for  [{0}] target [{1}]", groups[num3].id, groups[num3].target);
             }
         }
         else
         {
             kBatchGroupData3 = KAnimBatchManager.Instance().GetBatchGroupData(groups[num3].id);
             if (kBatchGroupData3 == null)
             {
                 Debug.LogErrorFormat("Group is null for [{0}]", groups[num3].id);
             }
         }
         KGlobalAnimParser.PostParse(kBatchGroupData3);
     }
     hasCompletedLoadAll = true;
 }
コード例 #28
0
    private void Awake()
    {
        KCrashReporter crash_reporter = GetComponent <KCrashReporter>();

        if (((UnityEngine.Object)crash_reporter != (UnityEngine.Object)null) & (SceneInitializerLoader.ReportDeferredError == null))
        {
            SceneInitializerLoader.ReportDeferredError = delegate(SceneInitializerLoader.DeferredError deferred_error)
            {
                crash_reporter.ShowDialog(deferred_error.msg, deferred_error.stack_trace);
            };
        }
        globalCanvas = GameObject.Find("Canvas");
        UnityEngine.Object.DontDestroyOnLoad(globalCanvas.gameObject);
        OutputSystemInfo();
        Debug.Assert((UnityEngine.Object)Instance == (UnityEngine.Object)null);
        Instance = this;
        Debug.Log("Initializing at " + System.DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff"));
        Debug.Log("Save path: " + Util.RootFolder());
        if (forcedAtlasInitializationList != null)
        {
            SpriteAtlas[] array = forcedAtlasInitializationList;
            foreach (SpriteAtlas spriteAtlas in array)
            {
                int      spriteCount = spriteAtlas.spriteCount;
                Sprite[] array2      = new Sprite[spriteCount];
                spriteAtlas.GetSprites(array2);
                Sprite[] array3 = array2;
                foreach (Sprite sprite in array3)
                {
                    Texture2D texture = sprite.texture;
                    if ((UnityEngine.Object)texture != (UnityEngine.Object)null)
                    {
                        texture.filterMode = FilterMode.Bilinear;
                        texture.anisoLevel = 4;
                        texture.mipMapBias = 0f;
                    }
                }
            }
        }
        FileSystem.Initialize();
        Singleton <StateMachineUpdater> .CreateInstance();

        Singleton <StateMachineManager> .CreateInstance();

        Localization.RegisterForTranslation(typeof(UI));
        modManager = new KMod.Manager();
        modManager.Load(Content.DLL);
        modManager.Load(Content.Strings);
        KSerialization.Manager.Initialize();
        mInputManager = new GameInputManager(GenerateDefaultBindings());
        Audio.Get();
        KAnimBatchManager.CreateInstance();
        Singleton <SoundEventVolumeCache> .CreateInstance();

        mAnimEventManager = new AnimEventManager();
        Singleton <KBatchedAnimUpdater> .CreateInstance();

        DistributionPlatform.Initialize();
        Localization.Initialize(false);
        modManager.Load(Content.Translation);
        modManager.distribution_platforms.Add(new Local("Local", Label.DistributionPlatform.Local));
        modManager.distribution_platforms.Add(new Local("Dev", Label.DistributionPlatform.Dev));
        mainThread            = Thread.CurrentThread;
        KProfiler.main_thread = Thread.CurrentThread;
        RestoreLegacyMetricsSetting();
        if (DistributionPlatform.Initialized)
        {
            if (!KPrivacyPrefs.instance.disableDataCollection)
            {
                Debug.Log("Logged into " + DistributionPlatform.Inst.Name + " with ID:" + DistributionPlatform.Inst.LocalUser.Id + ", NAME:" + DistributionPlatform.Inst.LocalUser.Name);
                ThreadedHttps <KleiAccount> .Instance.AuthenticateUser(OnGetUserIdKey);
            }
        }
        else
        {
            Debug.LogWarning("Can't init " + DistributionPlatform.Inst.Name + " distribution platform...");
            OnGetUserIdKey();
        }
        modManager.Load(Content.LayerableFiles);
        GlobalResources.Instance();
    }
コード例 #29
0
        public Frame GetFrame(HashedString batchTag, int idx)
        {
            KBatchGroupData batchGroupData = KAnimBatchManager.Instance().GetBatchGroupData(batchTag);

            return(batchGroupData.GetFrame(idx + firstFrameIdx));
        }