Fix ADV and BUNKI animation polish
This commit is contained in:
@@ -84,6 +84,15 @@ public readonly record struct RenderObject(long Handle, long SurfaceResId, long
|
||||
Affine2D? RangeTransform = null,
|
||||
bool TimeVarying = false);
|
||||
|
||||
/// <summary>The retained handle interval selected by an op-0x222 backbuffer publication.</summary>
|
||||
public readonly record struct GfxHandleRange(long First, long Count)
|
||||
{
|
||||
public static GfxHandleRange All => new(0, long.MaxValue);
|
||||
|
||||
public bool Contains(long handle)
|
||||
=> Count > 0 && handle >= First && (ulong)(handle - First) < (ulong)Count;
|
||||
}
|
||||
|
||||
/// <summary>Host-agnostic model of the AGE native gfx command-buffer (reversed in
|
||||
/// docs/engine-re.md, gfx op-contract table). One registry maps an object handle to a GfxObject — the
|
||||
/// native retained-gfx owner+0x408 map (EngineCtx+0x46a1c) that op 0x215 queries and the geometry get/set ops share. Each object carries a
|
||||
|
||||
@@ -31,6 +31,20 @@ public readonly record struct Affine2D(double XX, double XY, double YX, double Y
|
||||
inverse = new(xx, xy, yx, yy, -(TX * xx + TY * yx), -(TX * xy + TY * yy));
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>Decompose the projected axes for a Godot-style canvas item. AGE's ordinary retained
|
||||
/// transforms contain scale/rotation but no shear; the determinant preserves reflected Y axes.</summary>
|
||||
public (double RotationRadians, double ScaleX, double ScaleY) DecomposeCanvasAxes()
|
||||
{
|
||||
double scaleX = System.Math.Sqrt(XX * XX + XY * XY);
|
||||
double scaleY = System.Math.Sqrt(YX * YX + YY * YY);
|
||||
double determinant = XX * YY - XY * YX;
|
||||
if (determinant < 0) scaleY = -scaleY;
|
||||
double rotation = scaleX > 1e-12
|
||||
? System.Math.Atan2(XY, XX)
|
||||
: System.Math.Atan2(-YX, YY);
|
||||
return (rotation, scaleX, scaleY);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Exact 2D projection of AGE's row-vector retained-object matrix. Native call order is anchored
|
||||
|
||||
Reference in New Issue
Block a user