private void LoadAnim(ShapeAnim shapeAnim) { Initialize(); Text = shapeAnim.Name; ShapeAnim = shapeAnim; }
internal static void Read(ResFileSwitchLoader loader, ShapeAnim shapeAnim) { if (loader.ResFile.VersionMajor2 == 9) { shapeAnim.Flags = (ShapeAnimFlags)loader.ReadUInt32(); } else { loader.LoadHeaderBlock(); } shapeAnim.Name = loader.LoadString(); shapeAnim.Path = loader.LoadString(); shapeAnim.BindModel = loader.Load <Model>(); uint BindIndicesOffset = loader.ReadOffset(); uint VertexShapeAnimsArrayOffset = loader.ReadOffset(); shapeAnim.UserData = loader.LoadDictValues <UserData>(); if (loader.ResFile.VersionMajor2 < 9) { shapeAnim.Flags = (ShapeAnimFlags)loader.ReadInt16(); } ushort numUserData = loader.ReadUInt16(); ushort numVertexShapeAnim = loader.ReadUInt16(); ushort numKeyShapeAnim = loader.ReadUInt16(); shapeAnim.FrameCount = loader.ReadInt32(); shapeAnim.BakedSize = loader.ReadUInt32(); ushort numCurve = loader.ReadUInt16(); shapeAnim.BindIndices = loader.LoadCustom(() => loader.ReadUInt16s(numVertexShapeAnim), BindIndicesOffset); shapeAnim.VertexShapeAnims = loader.LoadList <VertexShapeAnim>(numVertexShapeAnim, VertexShapeAnimsArrayOffset); }
public void Reload(ShapeAnim anim) { Name = anim.Name; FrameCount = anim.FrameCount; FrameRate = 60.0f; Loop = anim.Flags.HasFlag(ShapeAnimFlags.Looping); AnimGroups.Clear(); foreach (var shapeAnim in anim.VertexShapeAnims) { var group = new ShapeAnimGroup(); AnimGroups.Add(group); group.Name = shapeAnim.Name; //Get the shape keys used for animating int baseIndex = 0; for (int i = 0; i < shapeAnim.KeyShapeAnimInfos.Count; i++) { int startBaseIndex = shapeAnim.KeyShapeAnimInfos.Count - shapeAnim.BaseDataList.Length; var keyShapeInfo = shapeAnim.KeyShapeAnimInfos[i]; //Get the curve index for animated indices int curveIndex = keyShapeInfo.CurveIndex; //Make a new sampler track using step interpolation var track = new KeyShapeTrack(); track.InterpolationType = STInterpoaltionType.Step; track.Name = keyShapeInfo.Name; if (group.BaseTarget == null && curveIndex == -1) { group.BaseTarget = track; } if (curveIndex != -1) { BfresAnimations.GenerateKeys(track, shapeAnim.Curves[curveIndex]); } else if (i >= startBaseIndex) { float baseWeight = shapeAnim.BaseDataList[baseIndex]; track.KeyFrames.Add(new STKeyFrame(0, baseWeight)); baseIndex++; } group.Tracks.Add(track); } } }
public static void Write(ResFileSwitchSaver saver, ShapeAnim shapeAnim) { if (saver.ResFile.VersionMajor2 == 9) { saver.Write((uint)shapeAnim.Flags); } else { saver.SaveHeaderBlock(); } saver.SaveString(shapeAnim.Name); saver.SaveString(shapeAnim.Path); }
public PerShapeAnim(BFRES.MTA mta, ShapeAnim vis) { mta.Text = vis.Name; mta.ImageKey = "mesh"; mta.SelectedImageKey = "mesh"; mta.FrameCount = (uint)vis.FrameCount; foreach (VertexShapeAnim vtxanim in vis.VertexShapeAnims) { BFRES.MatAnimEntry mat = new BFRES.MatAnimEntry(); mat.ImageKey = "bone"; mat.SelectedImageKey = "bone"; //First set the data then iterpolate mat.Text = vtxanim.Name; foreach (AnimCurve cr in vtxanim.Curves) { mat.Interpolate(cr); } for (int Frame = 0; Frame < vis.FrameCount; Frame++) { foreach (BFRES.MatAnimData track in mat.matCurves) { BFRES.AnimKey left = track.GetLeft(Frame); BFRES.AnimKey right = track.GetRight(Frame); track.Value = Animation.Hermite(Frame, left.frame, right.frame, 0, 0, left.unk1, right.unk1); } } mta.matEntries.Add(mat); } }
public BfresShapeAnim(ShapeAnim anim, string name) { ModelName = name; CanPlay = true; //Default all animations to not play unless toggled in list Reload(anim); }
public void Read(ShapeAnim shapeAnim) { ShapeAnim = shapeAnim; }
public FSHA(ShapeAnim anim) { LoadAnim(anim); }
private void LoadAnim(ShapeAnim shapeAnim) { Text = shapeAnim.Name; ShapeAnim = shapeAnim; }