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);
        }
Пример #2
0
 public static KAnimGroupFile GetGroupFile()
 {
     if ((UnityEngine.Object)groupfile == (UnityEngine.Object)null)
     {
         groupfile = (KAnimGroupFile)Resources.Load("animgrouptags", typeof(KAnimGroupFile));
     }
     return(groupfile);
 }
 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();
 }
Пример #4
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();
        }
Пример #5
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();
     }
 }
    public static KAnimFile AddKAnim(string name, TextAsset anim_file, TextAsset build_file, IList <Texture2D> textures)
    {
        KAnimFile kAnimFile = ScriptableObject.CreateInstance <KAnimFile>();

        kAnimFile.Initialize(anim_file, build_file, textures);
        kAnimFile.name = name;
        AnimCommandFile animCommandFile = new AnimCommandFile();

        KAnimGroupFile.GroupFile groupFile = new KAnimGroupFile.GroupFile();
        groupFile.groupID          = animCommandFile.GetGroupName(kAnimFile);
        groupFile.commandDirectory = "assets/" + name;
        animCommandFile.AddGroupFile(groupFile);
        KAnimGroupFile groupFile2 = KAnimGroupFile.GetGroupFile();

        groupFile2.AddAnimFile(groupFile, animCommandFile, kAnimFile);
        Assets.ModLoadedKAnims.Add(kAnimFile);
        return(kAnimFile);
    }
    public static KAnimFile AddKAnimMod(string name, KAnimFile.Mod anim_mod)
    {
        KAnimFile kAnimFile = ScriptableObject.CreateInstance <KAnimFile>();

        kAnimFile.mod  = anim_mod;
        kAnimFile.name = name;
        AnimCommandFile animCommandFile = new AnimCommandFile();

        KAnimGroupFile.GroupFile groupFile = new KAnimGroupFile.GroupFile();
        groupFile.groupID          = animCommandFile.GetGroupName(kAnimFile);
        groupFile.commandDirectory = "assets/" + name;
        animCommandFile.AddGroupFile(groupFile);
        KAnimGroupFile groupFile2 = KAnimGroupFile.GetGroupFile();

        if (groupFile2.AddAnimMod(groupFile, animCommandFile, kAnimFile) == KAnimGroupFile.AddModResult.Added)
        {
            Assets.ModLoadedKAnims.Add(kAnimFile);
        }
        return(kAnimFile);
    }
Пример #8
0
    private void SetBatchGroup(KAnimFileData kafd)
    {
        DebugUtil.Assert(!this.batchGroupID.IsValid, "Should only be setting the batch group once.");
        DebugUtil.Assert(kafd != null, "Null anim data!! For", base.name);
        base.curBuild = kafd.build;
        DebugUtil.Assert(base.curBuild != null, "Null build for anim!! ", base.name, kafd.name);
        KAnimGroupFile.Group group        = KAnimGroupFile.GetGroup(base.curBuild.batchTag);
        HashedString         batchGroupID = kafd.build.batchTag;

        if (group.renderType == KAnimBatchGroup.RendererType.DontRender || group.renderType == KAnimBatchGroup.RendererType.AnimOnly)
        {
            Debug.Assert(group.swapTarget.IsValid, "Invalid swap target fro group [" + group.id + "]");
            batchGroupID = group.swapTarget;
        }
        this.batchGroupID              = batchGroupID;
        base.symbolInstanceGpuData     = new SymbolInstanceGpuData(KAnimBatchManager.instance.GetBatchGroupData(this.batchGroupID).maxSymbolsPerBuild);
        base.symbolOverrideInfoGpuData = new SymbolOverrideInfoGpuData(KAnimBatchManager.instance.GetBatchGroupData(this.batchGroupID).symbolFrameInstances.Count);
        if (!this.batchGroupID.IsValid || this.batchGroupID == KAnimBatchManager.NO_BATCH)
        {
            Debug.LogError("Batch is not ready: " + base.name);
        }
    }
Пример #9
0
            public static bool Prefix(string name, KAnimFile.Mod anim_mod)
            {
                if (!name.StartsWith(INTERACTION_ANIM_PREFIX))
                {
                    return(true);
                }
                KAnimFile instance = ScriptableObject.CreateInstance <KAnimFile>();

                instance.mod  = anim_mod;
                instance.name = name;
                KAnimGroupFile groupFile           = KAnimGroupFile.GetGroupFile();
                HashedString   groupId             = INTERACTION_ANIM_GROUP;
                List <KAnimGroupFile.Group> groups = Traverse.Create(groupFile).Field("groups").GetValue <List <KAnimGroupFile.Group> >();
                var group = groups.Find(t => t.id == groupId);

                if (group == null)
                {
                    Debug.LogError($"Could not find animation group {INTERACTION_ANIM_GROUP.HashValue} when adding animation {name}. Loading animation as normal and not as interaction. Perhaps Klei changed the name of the interaction group?");
                    return(true);
                }
                group.files.Add(instance);
                Assets.ModLoadedKAnims.Add(instance);
                return(false);
            }
Пример #10
0
 public static void SetGroupFile(KAnimGroupFile file)
 {
     groupfile = file;
     groupfile.Sort();
 }
Пример #11
0
 public static void DestroyInstance()
 {
     groupfile = null;
 }
    public static int ParseBuildData(KBatchGroupData data, KAnimHashedString fileNameHash, FastReader reader, List <Texture2D> textures)
    {
        CheckHeader("BILD", reader);
        int num = reader.ReadInt32();

        if (num != 10 && num != 9)
        {
            Debug.LogError(fileNameHash + " has invalid build.bytes version [" + num + "]");
            return(-1);
        }
        KAnimGroupFile.Group group = KAnimGroupFile.GetGroup(data.groupID);
        if (group == null)
        {
            Debug.LogErrorFormat("[{1}] Failed to get group [{0}]", data.groupID, fileNameHash.DebuggerDisplay);
        }
        KAnim.Build build = null;
        int         num2  = reader.ReadInt32();
        int         num3  = reader.ReadInt32();

        build = data.AddNewBuildFile(fileNameHash);
        build.textureCount = textures.Count;
        if (textures.Count > 0)
        {
            data.AddTextures(textures);
        }
        build.symbols  = new KAnim.Build.Symbol[num2];
        build.frames   = new KAnim.Build.SymbolFrame[num3];
        build.name     = reader.ReadKleiString();
        build.batchTag = ((!group.swapTarget.IsValid) ? data.groupID : group.target);
        build.fileHash = fileNameHash;
        int num4 = 0;

        for (int i = 0; i < build.symbols.Length; i++)
        {
            KAnimHashedString  hash   = new KAnimHashedString(reader.ReadInt32());
            KAnim.Build.Symbol symbol = new KAnim.Build.Symbol();
            symbol.build = build;
            symbol.hash  = hash;
            if (num > 9)
            {
                symbol.path = new KAnimHashedString(reader.ReadInt32());
            }
            symbol.colourChannel            = new KAnimHashedString(reader.ReadInt32());
            symbol.flags                    = reader.ReadInt32();
            symbol.firstFrameIdx            = data.symbolFrameInstances.Count;
            symbol.numFrames                = reader.ReadInt32();
            symbol.symbolIndexInSourceBuild = i;
            int num5 = 0;
            for (int j = 0; j < symbol.numFrames; j++)
            {
                KAnim.Build.SymbolFrame         symbolFrame = new KAnim.Build.SymbolFrame();
                KAnim.Build.SymbolFrameInstance item        = default(KAnim.Build.SymbolFrameInstance);
                item.symbolFrame           = symbolFrame;
                symbolFrame.fileNameHash   = fileNameHash;
                symbolFrame.sourceFrameNum = reader.ReadInt32();
                symbolFrame.duration       = reader.ReadInt32();
                item.buildImageIdx         = data.textureStartIndex[fileNameHash] + reader.ReadInt32();
                if (item.buildImageIdx >= textures.Count + data.textureStartIndex[fileNameHash])
                {
                    Debug.LogErrorFormat("{0} Symbol: [{1}] tex count: [{2}] buildImageIdx: [{3}] group total [{4}]", fileNameHash.ToString(), symbol.hash, textures.Count, item.buildImageIdx, data.textureStartIndex[fileNameHash]);
                }
                item.symbolIdx = data.GetSymbolCount();
                num5           = Math.Max(symbolFrame.sourceFrameNum + symbolFrame.duration, num5);
                float num6 = reader.ReadSingle();
                float num7 = reader.ReadSingle();
                float num8 = reader.ReadSingle();
                float num9 = reader.ReadSingle();
                symbolFrame.bboxMin = new Vector2(num6 - num8 * 0.5f, num7 - num9 * 0.5f);
                symbolFrame.bboxMax = new Vector2(num6 + num8 * 0.5f, num7 + num9 * 0.5f);
                float x     = reader.ReadSingle();
                float num10 = reader.ReadSingle();
                float x2    = reader.ReadSingle();
                float num11 = reader.ReadSingle();
                symbolFrame.uvMin  = new Vector2(x, 1f - num10);
                symbolFrame.uvMax  = new Vector2(x2, 1f - num11);
                build.frames[num4] = symbolFrame;
                data.symbolFrameInstances.Add(item);
                num4++;
            }
            symbol.numLookupFrames = num5;
            data.AddBuildSymbol(symbol);
            build.symbols[i] = symbol;
        }
        ParseHashTable(reader);
        return(build.index);
    }