-
-
Notifications
You must be signed in to change notification settings - Fork 246
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
14 changed files
with
618 additions
and
550 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
using CUE4Parse_Conversion.Animations; | ||
using CUE4Parse.UE4.Objects.Core.Misc; | ||
using CUE4Parse.Utils; | ||
|
||
namespace FModel.Views.Snooper.Animations; | ||
|
||
public class Animation : IDisposable | ||
{ | ||
public readonly Sequence[] Sequences; | ||
public readonly float EndTime; // Animation End Time | ||
public readonly float TotalElapsedTime; // Animation Max Time | ||
|
||
public int CurrentSequence; | ||
public int FrameInSequence; // Current Sequence's Frame to Display | ||
|
||
public readonly List<FGuid> AttachedModels; | ||
|
||
public Animation() | ||
{ | ||
Sequences = Array.Empty<Sequence>(); | ||
AttachedModels = new List<FGuid>(); | ||
} | ||
|
||
public Animation(CAnimSet animSet) : this() | ||
{ | ||
Sequences = new Sequence[animSet.Sequences.Count]; | ||
for (int i = 0; i < Sequences.Length; i++) | ||
{ | ||
Sequences[i] = new Sequence(animSet.Sequences[i]); | ||
|
||
TotalElapsedTime += animSet.Sequences[i].NumFrames * Sequences[i].TimePerFrame; | ||
EndTime = Sequences[i].EndTime; | ||
} | ||
|
||
// if (Sequences.Length > 0) | ||
// Tracker.ElapsedTime = Sequences[0].StartTime; | ||
} | ||
|
||
public Animation(CAnimSet animSet, params FGuid[] animatedModels) : this(animSet) | ||
{ | ||
AttachedModels.AddRange(animatedModels); | ||
} | ||
|
||
public void TimeCalculation(float elapsedTime) | ||
{ | ||
for (int i = 0; i < Sequences.Length; i++) | ||
{ | ||
if (elapsedTime < Sequences[i].EndTime && elapsedTime >= Sequences[i].StartTime) | ||
{ | ||
CurrentSequence = i; | ||
break; | ||
} | ||
} | ||
if (elapsedTime >= TotalElapsedTime) Reset(); | ||
|
||
var lastEndTime = 0.0f; | ||
for (int s = 0; s < CurrentSequence; s++) | ||
lastEndTime = Sequences[s].EndTime; | ||
|
||
FrameInSequence = Math.Min(((elapsedTime - lastEndTime) / Sequences[CurrentSequence].TimePerFrame).FloorToInt(), Sequences[CurrentSequence].EndFrame); | ||
} | ||
|
||
private void Reset() | ||
{ | ||
FrameInSequence = 0; | ||
CurrentSequence = 0; | ||
} | ||
|
||
public void Dispose() | ||
{ | ||
AttachedModels.Clear(); | ||
} | ||
} |
2 changes: 1 addition & 1 deletion
2
...s/Snooper/Models/Animations/BoneIndice.cs → ...el/Views/Snooper/Animations/BoneIndice.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
using System.Numerics; | ||
using CUE4Parse_Conversion.Animations; | ||
using CUE4Parse.Utils; | ||
using ImGuiNET; | ||
|
||
namespace FModel.Views.Snooper.Animations; | ||
|
||
public class Sequence | ||
{ | ||
public readonly string Name; | ||
public readonly float TimePerFrame; | ||
public readonly float StartTime; | ||
public readonly float Duration; | ||
public readonly float EndTime; | ||
public readonly int EndFrame; | ||
public readonly int LoopingCount; | ||
|
||
public Sequence(CAnimSequence sequence) | ||
{ | ||
Name = sequence.Name; | ||
TimePerFrame = 1.0f / sequence.Rate; | ||
StartTime = sequence.StartPos; | ||
Duration = sequence.AnimEndTime; | ||
EndTime = StartTime + Duration; | ||
EndFrame = (Duration / TimePerFrame).FloorToInt() - 1; | ||
LoopingCount = sequence.LoopingCount; | ||
} | ||
|
||
private readonly float _height = 20.0f; | ||
public void DrawSequence(ImDrawListPtr drawList, float x, float y, Vector2 ratio, int index, uint col) | ||
{ | ||
var height = _height * (index % 2); | ||
var p1 = new Vector2(x + StartTime * ratio.X, y + height); | ||
var p2 = new Vector2(x + EndTime * ratio.X, y + height + _height); | ||
drawList.PushClipRect(p1, p2, true); | ||
drawList.AddRectFilled(p1, p2, col); | ||
drawList.AddText(p1 with { X = p1.X + 2.5f }, 0xFF000000, Name); | ||
drawList.PopClipRect(); | ||
} | ||
} |
Oops, something went wrong.