diff --git a/find-godot.ps1 b/find-godot.ps1 new file mode 100644 index 0000000..5949ed7 --- /dev/null +++ b/find-godot.ps1 @@ -0,0 +1,48 @@ +# Godot 4 실행 파일을 찾는다. 못 찾으면 아무것도 내놓지 않는다. +# .\find-godot.ps1 그냥 실행판 (창이 뜬다) +# .\find-godot.ps1 -Console 콘솔판 (--headless 용, 출력이 보인다) +# 찾는 순서: $env:GODOT_BIN > 아래 폴더들 > PATH 위의 godot +param([switch]$Console) + +$dirs = @( + "$env:LOCALAPPDATA\Programs\Godot", + [Environment]::GetFolderPath('Desktop'), + "$env:USERPROFILE\Desktop", + "$env:OneDrive\Desktop", + "$env:USERPROFILE\Downloads", + "$env:ProgramFiles\Godot" +) + +$found = $null + +if ($env:GODOT_BIN -and (Test-Path $env:GODOT_BIN)) { + $found = $env:GODOT_BIN +} + +if (-not $found) { + foreach ($d in $dirs) { + if (-not $d -or -not (Test-Path $d)) { continue } + # 버전이 올라가도 잡히도록 이름으로 훑고, 높은 버전을 먼저 쓴다 + $hit = Get-ChildItem -Path $d -Filter "Godot_v4*_win64.exe" -File -ErrorAction SilentlyContinue | + Where-Object { $_.Name -notlike "*_console.exe" } | + Sort-Object Name -Descending | Select-Object -First 1 + if ($hit) { $found = $hit.FullName; break } + } +} + +if (-not $found) { + $cmd = Get-Command godot -ErrorAction SilentlyContinue + if ($cmd) { $found = $cmd.Source } +} + +if (-not $found) { return } + +# 찾은 것과 원하는 판이 다르면 짝이 되는 파일로 바꿔 준다 +$isConsole = $found -like "*_console.exe" +if ($Console -ne $isConsole) { + if ($Console) { $alt = $found -replace '\.exe$', '_console.exe' } + else { $alt = $found -replace '_console\.exe$', '.exe' } + if (Test-Path $alt) { $found = $alt } +} + +return $found diff --git a/run.ps1 b/run.ps1 index ff27047..d9ad85e 100644 --- a/run.ps1 +++ b/run.ps1 @@ -1,7 +1,20 @@ -# 에디터 없이 게임만 바로 실행합니다. 사용: 우클릭 > PowerShell로 실행, 또는 .\run.ps1 -$godot = "$env:LOCALAPPDATA\Programs\Godot\Godot_v4.7.2-stable_win64.exe" -if (-not (Test-Path $godot)) { - Write-Error "Godot을 찾을 수 없습니다: $godot" +# 에디터 없이 게임만 바로 실행합니다. 사용: 우클릭 > PowerShell로 실행, 또는 .\run.ps1 +$godot = & "$PSScriptRoot\find-godot.ps1" +if (-not $godot) { + Write-Error "Godot 4를 찾을 수 없습니다. 실행 파일 경로를 GODOT_BIN 환경 변수에 넣어 주세요." exit 1 } + +# 클론 직후엔 .godot이 없다. 한 번 가져와야 class_name이 등록되고 스크립트가 뜬다. +if (-not (Test-Path "$PSScriptRoot\.godot")) { + Write-Host "첫 실행입니다. 프로젝트를 가져오는 중..." + $importer = & "$PSScriptRoot\find-godot.ps1" -Console + if (-not $importer) { $importer = $godot } + & $importer --headless --import --path $PSScriptRoot + if ($LASTEXITCODE -ne 0) { + Write-Error "가져오기에 실패했습니다." + exit 1 + } +} + Start-Process -FilePath $godot -ArgumentList @("--path", $PSScriptRoot) -WorkingDirectory $PSScriptRoot diff --git a/test.ps1 b/test.ps1 index a756272..b214ef1 100644 --- a/test.ps1 +++ b/test.ps1 @@ -1,4 +1,19 @@ -# 경제 로직 스모크 테스트를 돌립니다. 사용: .\test.ps1 -$godot = "$env:LOCALAPPDATA\Programs\Godot\Godot_v4.7.2-stable_win64_console.exe" +# 경제 로직 스모크 테스트를 돌립니다. 사용: .\test.ps1 +$godot = & "$PSScriptRoot\find-godot.ps1" -Console +if (-not $godot) { + Write-Error "Godot 4를 찾을 수 없습니다. 실행 파일 경로를 GODOT_BIN 환경 변수에 넣어 주세요." + exit 1 +} + +# 클론 직후엔 .godot이 없다. 한 번 가져와야 class_name이 등록되고 스크립트가 뜬다. +if (-not (Test-Path "$PSScriptRoot\.godot")) { + Write-Host "첫 실행입니다. 프로젝트를 가져오는 중..." + & $godot --headless --import --path $PSScriptRoot + if ($LASTEXITCODE -ne 0) { + Write-Error "가져오기에 실패했습니다." + exit 1 + } +} + & $godot --headless --path $PSScriptRoot res://tests/smoke.tscn exit $LASTEXITCODE