TH1/Tools/CheckMoveTransformVisualRefresh.ps1

53 lines
2.0 KiB
PowerShell

param(
[string]$FragmentMoveFile = "Unity/Assets/Scripts/TH1_Anim/Fragments/FragmentMove.cs",
[string]$UnitRendererFile = "Unity/Assets/Scripts/TH1_Renderer/UnitRenderer.cs"
)
$ErrorActionPreference = "Stop"
$repoRoot = git rev-parse --show-toplevel 2>$null
if (-not $repoRoot) {
throw "Not inside a git repository."
}
$repoRoot = [System.IO.Path]::GetFullPath($repoRoot.Trim())
$fragmentMovePath = Join-Path $repoRoot $FragmentMoveFile
$unitRendererPath = Join-Path $repoRoot $UnitRendererFile
if (-not (Test-Path -LiteralPath $fragmentMovePath)) {
throw "FragmentMove file not found: $fragmentMovePath"
}
if (-not (Test-Path -LiteralPath $unitRendererPath)) {
throw "UnitRenderer file not found: $unitRendererPath"
}
$fragmentMoveText = Get-Content -LiteralPath $fragmentMovePath -Raw -Encoding UTF8
$unitRendererText = Get-Content -LiteralPath $unitRendererPath -Raw -Encoding UTF8
foreach ($needle in @(
'public void InstantUpdateUnitImageOnly()',
'RenderUpdateUnitImage();'
)) {
if (-not $unitRendererText.Contains($needle)) {
throw "Move transform visual-refresh guardrail failed: UnitRenderer missing '$needle'."
}
}
foreach ($needle in @(
'Data.UnitRenderer?.InstantUpdateUnitImageOnly();',
'Data.UnitRenderer.AnimManager.EnqueueAnim(UnitAtomAnimType.Move,animData);',
'Data.UnitRenderer?.InstantUpdateUnit(true);'
)) {
if (-not $fragmentMoveText.Contains($needle)) {
throw "Move transform visual-refresh guardrail failed: FragmentMove missing '$needle'."
}
}
$startRefresh = $fragmentMoveText.IndexOf('Data.UnitRenderer?.InstantUpdateUnitImageOnly();')
$moveAnim = $fragmentMoveText.IndexOf('Data.UnitRenderer.AnimManager.EnqueueAnim(UnitAtomAnimType.Move,animData);')
if ($startRefresh -lt 0 -or $moveAnim -lt 0 -or $startRefresh -gt $moveAnim) {
throw "Move transform visual-refresh guardrail failed: FragmentMove must refresh transformed unit image before starting the move animation."
}
Write-Host "Move transform visual-refresh guardrail passed."