mirror of
https://github.com/KillzXGaming/Switch-Toolbox
synced 2024-09-20 14:32:05 +00:00
Automatically quantize curve data to keep file size optmimal.
This commit is contained in:
parent
8b04c55c32
commit
7b2bbb15d4
4 changed files with 37 additions and 2 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -650,6 +650,41 @@ namespace BrawlboxHelper
|
|||
return value.X == value.Y && value.X == value.Z;
|
||||
}
|
||||
|
||||
private static void QuantizeCurveData(AnimCurve curve)
|
||||
{
|
||||
float MaxFrame = 0;
|
||||
for (int frame = 0; frame < curve.Frames.Length; frame++)
|
||||
MaxFrame = Math.Max(MaxFrame, curve.Frames[frame]);
|
||||
|
||||
float MaxValues = 0;
|
||||
for (int key = 0; key < curve.Keys.Length; key++)
|
||||
{
|
||||
MaxValues = Math.Max(MaxValues, curve.Keys[key, 0]);
|
||||
if (curve.CurveType == AnimCurveType.Linear)
|
||||
MaxValues = Math.Max(MaxValues, curve.Keys[key, 1]);
|
||||
if (curve.CurveType == AnimCurveType.Cubic)
|
||||
{
|
||||
MaxValues = Math.Max(MaxValues, curve.Keys[key, 1]);
|
||||
MaxValues = Math.Max(MaxValues, curve.Keys[key, 2]);
|
||||
MaxValues = Math.Max(MaxValues, curve.Keys[key, 3]);
|
||||
}
|
||||
}
|
||||
|
||||
if (MaxFrame < Byte.MaxValue)
|
||||
curve.FrameType = AnimCurveFrameType.Byte;
|
||||
else if (MaxFrame < Int16.MaxValue)
|
||||
curve.FrameType = AnimCurveFrameType.Decimal10x5;
|
||||
else
|
||||
curve.FrameType = AnimCurveFrameType.Single;
|
||||
|
||||
if (MaxValues < Byte.MaxValue)
|
||||
curve.KeyType = AnimCurveKeyType.SByte;
|
||||
else if (MaxFrame < Int16.MaxValue)
|
||||
curve.KeyType = AnimCurveKeyType.Int16;
|
||||
else
|
||||
curve.KeyType = AnimCurveKeyType.Single;
|
||||
}
|
||||
|
||||
private static AnimCurve GenerateCurve(uint AnimOffset, CHR0EntryNode entry)
|
||||
{
|
||||
AnimCurve curve = new AnimCurve();
|
||||
|
@ -676,8 +711,6 @@ namespace BrawlboxHelper
|
|||
aout = entry.GetAnimFrame(frame, true);
|
||||
FillKeyList(aout, frame, curve.AnimDataOffset, Frames, Keys);
|
||||
|
||||
Console.WriteLine(aout);
|
||||
|
||||
if (!ain.Equals(aout))
|
||||
{
|
||||
FillKeyList(aout, frame, curve.AnimDataOffset, Frames, Keys);
|
||||
|
@ -744,6 +777,8 @@ namespace BrawlboxHelper
|
|||
break;
|
||||
}
|
||||
|
||||
QuantizeCurveData(curve);
|
||||
|
||||
return curve;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue