Script para modificar el color de ventanas

Crear un script que pueda:
-Modificar los JSON que necesitemos.
-Modificar el campo "RenderColor" solo para la ventana principal en los archivos JSON que sean sobre las ventanas.
-Que el cambio se aplique cada vez que compilas.

3 Pasos para implementar el script:

1-Crea un target en Intersect.Client.csproj al final del <project>.
<Target Name=»UpdateRenderColor» AfterTargets=»Build»>
<Exec Command=»powershell -ExecutionPolicy Bypass -File &quot;$(ProjectDir)Update-RenderColor.ps1&quot;» />
</Target>

2.-Crea el archivo Update-RenderColor.ps1 en la misma carpeta que Intersect.Client.csproj

3.-Agrega el Contenido del script en Update-RenderColor.ps1


# Modifica SOLO el RenderColor de la ventana principal (raíz del JSON)

$baseDir = $PSScriptRoot
# Carpeta base donde están todos los recursos
$resourcesDir = Join-Path $baseDir "bin\Debug\net8.0\resources"

# Lista de archivos relativos a $resourcesDir
$filesToModify = @(
    "gui/layouts/menu/MainMenuWindow_online.json",
    "gui/layouts/menu/MainMenuWindow_singleplayer.json",
    "gui/layouts/menu/LoginWindow.json",
    "gui/layouts/menu/RegistrationWindow.json",
    "gui/layouts/menu/CreditsWindow.json",
    "gui/layouts/menu/SelectCharacterWindow.json",
    "gui/layouts/shared/SettingsWindow.json"          # ← Nueva carpeta
)

$newColor = "200,0,0,0"  # (A,R,G,B)

foreach ($relativePath in $filesToModify) {
    $filePath = Join-Path $resourcesDir $relativePath
    
    if (Test-Path $filePath) {
        Write-Host "Modificando SOLO la ventana principal en $relativePath ..." -ForegroundColor Cyan
        
        try {
            # Leer y parsear JSON
            $json = Get-Content $filePath -Raw | ConvertFrom-Json
            
            # Modificar solo la propiedad raíz
            if (Get-Member -InputObject $json -Name "RenderColor") {
                $json.RenderColor = $newColor
                Write-Host "  → RenderColor raíz cambiado a $newColor" -ForegroundColor Green
            } else {
                Write-Host "  → No se encontró RenderColor en la raíz" -ForegroundColor Yellow
            }
            
            # Convertir de nuevo a JSON y guardar
            $json | ConvertTo-Json -Depth 20 | Set-Content $filePath -Encoding UTF8 -NoNewline
        } catch {
            Write-Host "  → Error procesando JSON: $_" -ForegroundColor Red
        }
    } else {
        Write-Host "Archivo no encontrado: $relativePath (genera el juego primero)" -ForegroundColor Yellow
    }
}

Write-Host "`nProceso completado. Solo se modificó el RenderColor de la ventana principal." -ForegroundColor Green

Mejorando el Script

El script realizado previamente, puede realizar lo siguiente:
-Modificar los JSON que necesitemos.
-Modificar el campo "RenderColor" solo para la ventana principal en los archivos JSON que sean sobre las ventanas.
-Que las modificaciones se apliquen cada vez que compilas.

Ahora lo buscamos es:
-Modificar todos los archivos JSON que contengan la palabra Window dentro de las carpetas game, menu y shared.
-Que las modificaciones se apliquen cuando compilas en debug, release o publish.

param(

    [Parameter(Mandatory=$true)]

    [string]$ResourcesDir

)

# Subcarpetas donde buscar

$subFolders = @(‘game’, ‘menu’, ‘shared’)

# Patrón de archivo (contenga «Window»)

$pattern = ‘*Window*.json’

# Color nuevo

$newColor = «200,0,0,0»

# Para cada subcarpeta

foreach ($subFolder in $subFolders) {

    $searchPath = Join-Path $ResourcesDir «gui/layouts/$subFolder»

    if (Test-Path $searchPath) {

        # Buscar archivos JSON que coincidan con el patrón

        $files = Get-ChildItem -Path $searchPath -Filter $pattern -Recurse -File

        foreach ($file in $files) {

            # Ruta relativa para mensajes

            $relativePath = $file.FullName.Substring($ResourcesDir.Length)

            Write-Host «Modificando ventana en $relativePath …» -ForegroundColor Cyan

            # Parsear y modificar solo la raíz

            $json = Get-Content $file.FullName -Raw | ConvertFrom-Json

            if (Get-Member -InputObject $json -Name «RenderColor») {

                $json.RenderColor = $newColor

                $json | ConvertTo-Json -Depth 20 | Set-Content $file.FullName -Encoding UTF8 -NoNewline

                Write-Host »  → RenderColor raíz cambiado a $newColor» -ForegroundColor Green

            } else {

                Write-Host »  → No se encontró RenderColor en la raíz» -ForegroundColor Yellow

            }

        }

    } else {

        Write-Host «Carpeta no encontrada: $searchPath» -ForegroundColor Yellow

    }

}

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *