127 lines
4.5 KiB
PowerShell
127 lines
4.5 KiB
PowerShell
# automatically imports the bindings file into steamvr so you don't have to
|
|
# go through the awful UI yourself.
|
|
# This uses the undocumented API in the bindings UI itself (it's a webapp).
|
|
# SteamVR needs to be running for this to work, but avoids needing to mess with steamvr's json
|
|
# config directly.
|
|
Write-Host "Checking if SteamVR is running..."
|
|
# Check if SteamVR is running
|
|
$steamVRProcess = Get-Process -Name "vrcompositor" -ErrorAction SilentlyContinue
|
|
if (-not $steamVRProcess) {
|
|
$wshell = New-Object -ComObject Wscript.Shell
|
|
$wshell.Popup("SteamVR is not running. Please start SteamVR and try again.", 0, "SteamVR Not Running", 0x0 + 0x30)
|
|
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
|
exit 1
|
|
}
|
|
|
|
Write-Host "Copying bindings file..."
|
|
# Get the directory that the script is in
|
|
$currentDir = Split-Path -Parent $MyInvocation.MyCommand.Definition
|
|
|
|
# Source bindings file
|
|
$sourceBindingsFile = Join-Path -Path $currentDir -ChildPath "org.jrbudda.vivecraft.steamvrinput_knuckles.json"
|
|
|
|
# Ensure the source file exists
|
|
if (-not (Test-Path $sourceBindingsFile)) {
|
|
Write-Error "Bindings file not found: $sourceBindingsFile"
|
|
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
|
exit 1
|
|
}
|
|
|
|
# Construct the path to the SteamVR input import directory
|
|
$steamVRImportDir = Join-Path -Path ([Environment]::GetFolderPath("MyDocuments")) -ChildPath "steamvr\input\imports"
|
|
|
|
# Ensure the SteamVR input import directory exists
|
|
if (-not (Test-Path $steamVRImportDir)) {
|
|
New-Item -ItemType Directory -Path $steamVRImportDir -Force
|
|
}
|
|
|
|
# Function to copy and import bindings
|
|
function Import-SteamVRBinding {
|
|
param (
|
|
[string]$bindingsFilePath,
|
|
[string]$controllerType
|
|
)
|
|
|
|
$fileName = Split-Path $bindingsFilePath -Leaf
|
|
$destBindingsFile = Join-Path -Path $steamVRImportDir -ChildPath $fileName
|
|
|
|
# Copy the bindings file
|
|
Copy-Item -Path $bindingsFilePath -Destination $destBindingsFile -Force
|
|
|
|
Write-Host "Calling SteamVR API for $controllerType..."
|
|
# Convert the destination file path to a file URI
|
|
$fileUri = [System.Uri]::new($destBindingsFile).AbsoluteUri
|
|
|
|
# Construct the body with the correct file URI
|
|
$body = @{
|
|
app_key = "org.jrbudda.vivecraft.steamvrinput"
|
|
controller_type = $controllerType
|
|
url = $fileUri
|
|
} | ConvertTo-Json
|
|
|
|
try {
|
|
$response = Invoke-WebRequest -UseBasicParsing -Uri "http://localhost:27062/input/selectconfig.action" `
|
|
-Method POST `
|
|
-Headers @{
|
|
"Accept" = "application/json, text/plain, */*"
|
|
"Origin" = "http://localhost:27062"
|
|
"Referer" = "http://localhost:27062/dashboard/controllerbinding.html"
|
|
} `
|
|
-ContentType "application/json" `
|
|
-Body $body
|
|
|
|
if ($response.StatusCode -eq 200) {
|
|
Write-Host "Successfully set recommended SteamVR bindings for Vivecraft ($controllerType)."
|
|
}
|
|
}
|
|
catch {
|
|
Write-Error "Failed to call the API for $controllerType : $_"
|
|
return $false
|
|
}
|
|
|
|
return $true
|
|
}
|
|
|
|
# Get the directory that the script is in
|
|
$currentDir = Split-Path -Parent $MyInvocation.MyCommand.Definition
|
|
|
|
# Define bindings and controller types
|
|
$bindings = @(
|
|
@{
|
|
File = "org.jrbudda.vivecraft.steamvrinput_knuckles.json"
|
|
Type = "knuckles"
|
|
},
|
|
@{
|
|
File = "org.jrbudda.vivecraft.steamvrinput_pico_controller.json"
|
|
Type = "pico_controller"
|
|
}
|
|
# Add more bindings here as needed
|
|
)
|
|
|
|
$allSucceeded = $true
|
|
|
|
foreach ($binding in $bindings) {
|
|
$sourceBindingsFile = Join-Path -Path $currentDir -ChildPath $binding.File
|
|
|
|
# Ensure the source file exists
|
|
if (-not (Test-Path $sourceBindingsFile)) {
|
|
Write-Error "Bindings file not found: $sourceBindingsFile"
|
|
$allSucceeded = $false
|
|
continue
|
|
}
|
|
|
|
$result = Import-SteamVRBinding -bindingsFilePath $sourceBindingsFile -controllerType $binding.Type
|
|
if (-not $result) {
|
|
$allSucceeded = $false
|
|
}
|
|
}
|
|
|
|
if ($allSucceeded) {
|
|
$wshell = New-Object -ComObject Wscript.Shell
|
|
$wshell.Popup("Successfully set recommended SteamVR bindings for Vivecraft for all controller types.", 0, "Success", 0x0 + 0x40)
|
|
} else {
|
|
$wshell = New-Object -ComObject Wscript.Shell
|
|
$wshell.Popup("Some errors occurred while setting SteamVR bindings. Please check the console for details.", 0, "Warning", 0x0 + 0x30)
|
|
}
|
|
|
|
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|