示例#1
0
        /// <summary>
        /// Initialize debug data<para/>
        /// Инициализация отладочной иноформации
        /// </summary>
        public static void Init()
        {
            //Entities.Camera.Position = new OpenTK.Vector3(375.604f, 58.78056f, -585.3889f);

            rend         = new Graphics.Renderers.DebugRenderer();
            box          = new Graphics.Renderers.DebugRenderer.Box();
            box.LineSize = 2f;
            box.Size     = Vector3.One * 0.5f;
            //rend.Primitives.Add(box);


            AnimationFile fg = new AnimationFile(PathManager.GetAbsolute("anim/ped.ifp"));

            animation = fg["WALK_player"];


            man    = new Model(new ModelFile(ArchiveManager.Get("HFYST.dff"), true), true, true);
            manTex = new TextureDictionary(new TextureFile(ArchiveManager.Get("HFYST.txd"), true), true, true);



            ApplyAnimationFrame(man.Children, animation, 2);

            re    = new Graphics.Renderers.SkinnedRenderer();
            lines = new List <Graphics.Renderers.DebugRenderer.Line>();
        }
示例#2
0
        static void ApplyAnimationFrame(Model.Branch[] branches, AnimationFile.Animation animation, float time = 0)
        {
            foreach (Model.Branch b in branches)
            {
                AnimationFile.Bone boneDef = animation[b.Name];
                if (b.Parent != null)
                {
                    if (boneDef != null)
                    {
                        Vector3             transition = Vector3.Zero;
                        Quaternion          rotation = b.OriginalAngles;
                        float               scale = b.OriginalScale;
                        AnimationFile.Frame frameFrom, frameTo;
                        float               delta = 0;

                        frameFrom = SeekFrameReverse(boneDef, time, 0);
                        frameTo   = SeekFrame(boneDef, time, 0);
                        if (frameFrom != null && frameTo != null)
                        {
                            delta    = (time - frameFrom.Delay) / (frameTo.Delay - frameFrom.Delay);
                            rotation = Quaternion.Slerp(frameFrom.Rotation, frameTo.Rotation, delta);                            //Vector3.Lerp(frameFrom.Transition, frameTo.Transition, delta);
                        }

                        frameFrom = SeekFrameReverse(boneDef, time, 1);
                        frameTo   = SeekFrame(boneDef, time, 1);
                        if (frameFrom != null && frameTo != null)
                        {
                            delta      = (time - frameFrom.Delay) / (frameTo.Delay - frameFrom.Delay);
                            transition = Vector3.Lerp(frameFrom.Transition, frameTo.Transition, delta);
                        }
                        if (b.Name == "Root")
                        {
                            transition.Z = 0;
                        }


                        b.Position = b.OriginalPosition + transition;
                        b.Angles   = rotation;
                        b.Scale    = scale;
                    }
                }
                if (b.Children != null)
                {
                    ApplyAnimationFrame(b.Children, animation, time);
                }
            }
        }