public void AddAnims(KAnimFile anim_file)
    {
        KAnimFileData data = anim_file.GetData();

        if (data == null)
        {
            Debug.LogError("AddAnims() Null animfile data");
        }
        else
        {
            maxSymbols = Mathf.Max(maxSymbols, data.maxVisSymbolFrames);
            for (int i = 0; i < data.animCount; i++)
            {
                KAnim.Anim anim = data.GetAnim(i);
                if (anim.animFile.hashName != data.hashName)
                {
                    Debug.LogErrorFormat("How did we get an anim from another file? [{0}] != [{1}] for anim [{2}]", data.name, anim.animFile.name, i);
                }
                anims[anim.hash] = new AnimLookupData
                {
                    animIndex = anim.index
                };
            }
            if (usingNewSymbolOverrideSystem && data.buildIndex != -1 && data.build.symbols != null && data.build.symbols.Length > 0)
            {
                SymbolOverrideController component = GetComponent <SymbolOverrideController>();
                component.AddBuildOverride(anim_file.GetData(), -1);
            }
        }
    }
    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);
    }
Esempio n. 3
0
    private static KAnim.Build.Symbol GetSymbol(KAnimFile anim_file, string symbol_name)
    {
        KAnim.Build.Symbol result = anim_file.GetData().build.symbols[0];
        KAnimHashedString  y      = new KAnimHashedString(symbol_name);

        KAnim.Build.Symbol[] symbols = anim_file.GetData().build.symbols;
        foreach (KAnim.Build.Symbol symbol in symbols)
        {
            if (symbol.hash == y)
            {
                result = symbol;
                break;
            }
        }
        return(result);
    }
    protected override void OnSpawn()
    {
        GetComponent <Storage>().SetOffsets(DELIVERY_OFFSETS);
        Storage component = GetComponent <Storage>();
        Storage storage   = component;

        storage.OnWorkableEventCB = (Action <Workable.WorkableEvent>)Delegate.Combine(storage.OnWorkableEventCB, new Action <Workable.WorkableEvent>(OnWorkEvent));
        KAnimFile anim = Assets.GetAnim("anim_bury_dupe_kanim");
        int       num  = 0;

        while (true)
        {
            KAnim.Anim anim2 = anim.GetData().GetAnim(num);
            if (anim2 == null)
            {
                break;
            }
            if (anim2.name == "working_pre")
            {
                float workTime = (float)(anim2.numFrames - 3) / anim2.frameRate;
                component.SetWorkTime(workTime);
                break;
            }
            num++;
        }
        base.OnSpawn();
        base.smi.StartSM();
        Components.Graves.Add(this);
    }
 public void AddAnimOverrides(KAnimFile kanim_file, float priority = 0f)
 {
     Debug.Assert((UnityEngine.Object)kanim_file != (UnityEngine.Object)null);
     if (kanim_file.GetData().build != null && kanim_file.GetData().build.symbols.Length > 0)
     {
         SymbolOverrideController component = GetComponent <SymbolOverrideController>();
         DebugUtil.Assert((UnityEngine.Object)component != (UnityEngine.Object)null, "Anim overrides containing additional symbols require a symbol override controller.");
         component.AddBuildOverride(kanim_file.GetData(), 0);
     }
     overrideAnimFiles.Add(new OverrideAnimFileData
     {
         priority = priority,
         file     = kanim_file
     });
     overrideAnimFiles.Sort((OverrideAnimFileData a, OverrideAnimFileData b) => b.priority.CompareTo(a.priority));
     RebuildOverrides(kanim_file);
 }
 public void RemoveAnimOverrides(KAnimFile kanim_file)
 {
     Debug.Assert((UnityEngine.Object)kanim_file != (UnityEngine.Object)null);
     if (kanim_file.GetData().build != null && kanim_file.GetData().build.symbols.Length > 0)
     {
         SymbolOverrideController component = GetComponent <SymbolOverrideController>();
         DebugUtil.Assert((UnityEngine.Object)component != (UnityEngine.Object)null, "Anim overrides containing additional symbols require a symbol override controller.");
         component.TryRemoveBuildOverride(kanim_file.GetData(), 0);
     }
     for (int i = 0; i < overrideAnimFiles.Count; i++)
     {
         OverrideAnimFileData overrideAnimFileData = overrideAnimFiles[i];
         if ((UnityEngine.Object)overrideAnimFileData.file == (UnityEngine.Object)kanim_file)
         {
             overrideAnimFiles.RemoveAt(i);
             break;
         }
     }
     RebuildOverrides(kanim_file);
 }
Esempio n. 7
0
    public AddModResult AddAnimMod(GroupFile gf, AnimCommandFile akf, KAnimFile file)
    {
        Debug.Assert(gf != null);
        Debug.Assert((UnityEngine.Object)file != (UnityEngine.Object)null, gf.groupID);
        Debug.Assert(akf != null, gf.groupID);
        int    index = AddGroup(akf, gf, file);
        string name  = file.GetData().name;
        int    num   = groups[index].files.FindIndex((KAnimFile candidate) => (UnityEngine.Object)candidate != (UnityEngine.Object)null && candidate.GetData().name == name);

        if (num == -1)
        {
            groups[index].files.Add(file);
            return(AddModResult.Added);
        }
        groups[index].files[num].mod = file.mod;
        return(AddModResult.Replaced);
    }
Esempio n. 8
0
        // получаем длительность анимации в аним файле. или общую длительность нескольких анимаций
        public static float GetAnimDuration(KAnimFile kAnimFile, params string[] anims)
        {
            if (kAnimFile == null)
            {
                throw new ArgumentNullException(nameof(kAnimFile));
            }
            if (anims == null)
            {
                throw new ArgumentNullException(nameof(anims));
            }
            var   kanim_data = kAnimFile.GetData();
            float duration   = 0;

            for (int i = 0; i < kanim_data.animCount; i++)
            {
                var anim = kanim_data.GetAnim(i);
                if (anims.Contains(anim.name))
                {
                    duration += anim.numFrames / anim.frameRate;
                }
            }
            return(duration);
        }
    public void AddAccessories(KAnimFile default_build, ResourceSet parent)
    {
        KAnim.Build        build  = file.GetData().build;
        KAnim.Build.Symbol symbol = default_build.GetData().build.GetSymbol(targetSymbolId);
        string             text   = Id.ToLower();

        if (symbol != null)
        {
            string    id        = text + "_DEFAULT";
            Accessory accessory = new Accessory(id, parent, this, default_build.batchTag, symbol);
            accessories.Add(accessory);
            HashCache.Get().Add(accessory.IdHash.HashValue, accessory.Id);
        }
        for (int i = 0; i < build.symbols.Length; i++)
        {
            string text2 = HashCache.Get().Get(build.symbols[i].hash);
            if (text2.StartsWith(text))
            {
                Accessory accessory2 = new Accessory(text2, parent, this, file.batchTag, build.symbols[i]);
                accessories.Add(accessory2);
                HashCache.Get().Add(accessory2.IdHash.HashValue, accessory2.Id);
            }
        }
    }
    public static Sprite GetUISpriteFromMultiObjectAnim(KAnimFile animFile, string animName = "ui", bool centered = false, string symbolName = "")
    {
        Tuple <KAnimFile, string, bool> key = new Tuple <KAnimFile, string, bool>(animFile, animName, centered);

        if (knownUISprites.ContainsKey(key))
        {
            return(knownUISprites[key]);
        }
        if ((UnityEngine.Object)animFile == (UnityEngine.Object)null)
        {
            DebugUtil.LogWarningArgs(animName, "missing Anim File");
            return(null);
        }
        KAnimFileData data = animFile.GetData();

        if (data == null)
        {
            DebugUtil.LogWarningArgs(animName, "KAnimFileData is null");
            return(null);
        }
        if (data.build == null)
        {
            return(null);
        }
        KAnim.Anim.Frame frame = KAnim.Anim.Frame.InvalidFrame;
        for (int i = 0; i < data.animCount; i++)
        {
            KAnim.Anim anim = data.GetAnim(i);
            if (anim.name == animName)
            {
                frame = anim.GetFrame(data.batchTag, 0);
            }
        }
        if (!frame.IsValid())
        {
            DebugUtil.LogWarningArgs($"missing '{animName}' anim in '{animFile}'");
            return(null);
        }
        if (data.elementCount == 0)
        {
            return(null);
        }
        KAnim.Anim.FrameElement frameElement = default(KAnim.Anim.FrameElement);
        if (string.IsNullOrEmpty(symbolName))
        {
            symbolName = animName;
        }
        frameElement = data.FindAnimFrameElement(symbolName);
        KAnim.Build.Symbol symbol = data.build.GetSymbol(frameElement.symbol);
        if (symbol == null)
        {
            DebugUtil.LogWarningArgs(animFile.name, animName, "placeSymbol [", frameElement.symbol, "] is missing");
            return(null);
        }
        int frame2 = frameElement.frame;

        KAnim.Build.SymbolFrameInstance frame3      = symbol.GetFrame(frame2);
        KAnim.Build.SymbolFrame         symbolFrame = frame3.symbolFrame;
        if (symbolFrame == null)
        {
            DebugUtil.LogWarningArgs(animName, "SymbolFrame [", frameElement.frame, "] is missing");
            return(null);
        }
        Texture2D texture = data.build.GetTexture(0);
        float     x       = symbolFrame.uvMin.x;
        float     x2      = symbolFrame.uvMax.x;
        float     y       = symbolFrame.uvMax.y;
        float     y2      = symbolFrame.uvMin.y;
        int       num     = (int)((float)texture.width * Mathf.Abs(x2 - x));
        int       num2    = (int)((float)texture.height * Mathf.Abs(y2 - y));
        float     num3    = Mathf.Abs(symbolFrame.bboxMax.x - symbolFrame.bboxMin.x);
        Rect      rect    = default(Rect);

        rect.width  = (float)num;
        rect.height = (float)num2;
        rect.x      = (float)(int)((float)texture.width * x);
        rect.y      = (float)(int)((float)texture.height * y);
        float pixelsPerUnit = 100f;

        if (num != 0)
        {
            pixelsPerUnit = 100f / (num3 / (float)num);
        }
        Sprite sprite = Sprite.Create(texture, rect, (!centered) ? Vector2.zero : new Vector2(0.5f, 0.5f), pixelsPerUnit, 0u, SpriteMeshType.FullRect);

        sprite.name         = $"{texture.name}:{animName}:{frameElement.frame.ToString()}:{centered}";
        knownUISprites[key] = sprite;
        return(sprite);
    }
Esempio n. 11
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;
 }
    private void ShowHelmet()
    {
        KBatchedAnimController assigneeController = GetAssigneeController();

        if (!((Object)assigneeController == (Object)null))
        {
            KAnimHashedString kAnimHashedString = new KAnimHashedString("snapTo_neck");
            if (!string.IsNullOrEmpty(anim_file))
            {
                KAnimFile anim = Assets.GetAnim(anim_file);
                assigneeController.GetComponent <SymbolOverrideController>().AddSymbolOverride(kAnimHashedString, anim.GetData().build.GetSymbol(kAnimHashedString), 6);
            }
            assigneeController.SetSymbolVisiblity(kAnimHashedString, true);
            is_shown = true;
            UpdateJets();
        }
    }