internal Animation(AnimationContainer container, IntPtr ptr, string name)
        {
            Container = container;
            _UnmanagedPtr = ptr;
            Name = name;

            Duration = HavokInterop.Execute(() => Interop.getDuration(_UnmanagedPtr));
            FrameCount = HavokInterop.Execute(() => Interop.getNumFrames(_UnmanagedPtr));
            FrameDuration = Duration / FrameCount;
        }
        private IComponent CreateModel(Engine engine, Skeleton skeleton, ModelDefinition model, ImcVariant variant, int m, int b)
        {
            const string PapPathFormat = "chara/monster/m{0:D4}/animation/a0001/bt_common/resident/monster.pap";

            var component = new AnimatedModel(engine, skeleton, variant, model, ModelQuality.High) {

            };

            var papPath = string.Format(PapPathFormat, m, b);

            SaintCoinach.IO.File papFileBase;
            if (Parent.Realm.Packs.TryGetFile(papPath, out papFileBase)) {
                var anim = new AnimationContainer(skeleton, new PapFile(papFileBase));

                var hasAnim = false;
                for(var i = 0; i < DefaultAnimationNames.Length && !hasAnim; ++i) {
                    var n = DefaultAnimationNames[i];
                    if (anim.AnimationNames.Contains(n)) {
                        component.AnimationPlayer.Animation = anim.Get(n);
                        hasAnim = true;
                    }
                }

                if (!hasAnim)
                    component.AnimationPlayer.Animation = anim.Get(0);
            }
            return component;
        }