Shift a bunch of stuff into Makefile to speed up the build.

This commit is contained in:
Empathic Qubit 2021-06-01 04:36:49 -04:00
parent a73da6408e
commit 6a51609b4f
8 changed files with 200 additions and 203 deletions

View file

@ -1,38 +1,28 @@
SetTitleMatchMode, RegEx
WinWait, ahk_exe i)ChunkMerge.exe
WinActivate, ahk_exe i)ChunkMerge.exe
ControlFocus Button1, A
Send {Space}
WinWaitNotActive, i)ChunkMerge
WinGet, ChunkMain, ID, ahk_exe i)ChunkMerge.exe
WinActivate, ahk_id %ChunkMain%
Clipboard := ChunkMerge_NifFile
ControlFocus Edit1, ahk_id %ChunkMain%
Send +{Insert}
Send {Enter}
WinWaitActive, i)ChunkMerge
ControlFocus Button2, A
Send {Space}
WinWaitNotActive, i)ChunkMerge
Clipboard := ChunkMerge_CollisionFile
ControlFocus Edit2, ahk_id %ChunkMain%
Send +{Insert}
Send {Enter}
WinWaitActive, i)ChunkMerge
ControlFocus, ComboBox1, A
ControlFocus, ComboBox1, ahk_id %ChunkMain%
Send, %ChunkMerge_TemplateFile%
ControlFocus, Mesh Data, A
Send {Space}
ControlFocus, Name of NiTriShape, A
Send {Space}
ControlClick, Mesh Data, ahk_id %ChunkMain%
ControlClick, Name of NiTriShape, ahk_id %ChunkMain%
Send {Enter}
ControlSend Convert, {Space}, ahk_id %ChunkMain%
Sleep 3000
WinClose, ahk_exe i)ChunkMerge.exe
Loop {
Sleep 100
ControlGetText, FinishedText, RichEdit20W1, ahk_id %ChunkMain%
IfInString, FinishedText, Nif converted successfully
{
Break
}
}

107
Makefile Normal file
View file

@ -0,0 +1,107 @@
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/c/ProgramData/chocolatey/bin:$(SystemRoot)/System32/WindowsPowerShell/v1.0
mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
current_dir := $(patsubst %/,%,$(dir $(mkfile_path)))
scriptFiles := $(patsubst Source/Scripts/%.psc,plugin/Data/Scripts/%.pex,$(wildcard Source/Scripts/*.psc))
textureFiles := $(patsubst Source/Textures/%.xcf,plugin/Data/Textures/%.dds,$(wildcard Source/Textures/_EQ_ItemRoulette/*.xcf))
modelFiles := $(patsubst Source/Meshes/%_mesh.blend,plugin/Data/Meshes/%_final.nif,$(wildcard Source/Meshes/_EQ_ItemRoulette/*_mesh.blend))
.ONESHELL:
all: zip
clean:
rm -rf \
plugin/Data/Meshes \
plugin/Data/Scripts \
plugin/Data/Textures && true
distclean: clean
rm -rf build && true
mkdir build
zip: build/Item_Roulette_for_VRIK.zip
build/Item_Roulette_for_VRIK.zip: plugin
rm -rf "$@"
powershell -Command 'Compress-Archive -Path "plugin/*" -DestinationPath "$@"'
plugin: scripts models
scripts: $(scriptFiles)
plugin/Data/Scripts/%.pex: Source/Scripts/%.psc
"$(SKYRIM_BASE)/Papyrus Compiler/PapyrusCompiler.exe" \
"$^" \
"-f=$(SKYRIM_BASE)/Data/Source/Scripts/TESV_Papyrus_Flags.flg" \
"-i=$(SKYRIM_BASE)/Data/Source/Scripts;Source/Scripts" \
"-o=$@" \
textures: $(textureFiles)
GIMP=$$(powershell -Command '(Get-Item "$(ProgramW6432)/GIMP*/bin/gimp-console*.exe").FullName')
"$$GIMP" -n -i --batch-interpreter python-fu-eval -b "import export_gimp_textures"
models: $(modelFiles)
build/ChunkMerge/ChunkMerge.exe: build/chunkmerge.7z
7z x -y "-obuild" "$<"
build/chunkmerge.7z:
powershell -Command 'Invoke-WebRequest -Uri "https://github.com/downloads/skyfox69/NifUtils/ChunkMerge0155.7z" -OutFile build/chunkmerge.7z'
build/ChunkMerge/ChunkMerge.xml: build/ChunkMerge/ChunkMerge.exe
cat > "$@" <<'HERE'
<Config>
<PathSkyrim>$(SKYRIM_BASE)</PathSkyrim>
<PathNifXML>$(current_dir)/nif.xml</PathNifXML>
<PathTemplate>$(current_dir)\\Source\\Meshes\\_EQ_ItemRoulette</PathTemplate>
<LastTexture></LastTexture>
<LastTemplate></LastTemplate>
<DirSource></DirSource>
<DirDestination></DirDestination>
<DirCollision></DirCollision>
<MatHandling>0</MatHandling>
<VertexColorHandling>0</VertexColorHandling>
<UpdateTangentSpace>1</UpdateTangentSpace>
<ReorderProperties>1</ReorderProperties>
<CollTypeHandling>1</CollTypeHandling>
<CollMaterial>-553455049</CollMaterial>
<MaterialScan>
<MatScanTag>SkyrimHavokMaterial</MatScanTag>
<MatScanName>SKY_HAV_</MatScanName>
<MatScanPrefixList>
<MatScanPrefix>Material</MatScanPrefix>
</MatScanPrefixList>
<MatScanIgnoreList>
<MatScanIgnore>Unknown</MatScanIgnore>
</MatScanIgnoreList>
</MaterialScan>
<DirectXView>
<ShowTexture>1</ShowTexture>
<ShowWireframe>0</ShowWireframe>
<ShowColorWire>0</ShowColorWire>
<ForceDDS>0</ForceDDS>
<ColorWireframe>ffffffff</ColorWireframe>
<ColorWireCollision>ffffff00</ColorWireCollision>
<ColorBackground>ff200020</ColorBackground>
<ColorSelected>ffff00ff</ColorSelected>
<TexturePathList>
</TexturePathList>
</DirectXView>
</Config>
HERE
plugin/Data/Meshes/_EQ_ItemRoulette/%_final.nif: Source/Meshes/_EQ_ItemRoulette/%_template.nif plugin/Data/Meshes/_EQ_ItemRoulette/%_collision.nif plugin/Data/Meshes/_EQ_ItemRoulette/%_mesh.nif build/ChunkMerge/ChunkMerge.xml
cp "$(filter %_mesh.nif,$^)" "$@"
build/ChunkMerge/ChunkMerge.exe &
powershell -Command '$$env:ChunkMerge_NifFile=Split-Path (Join-Path "$@" "."); $$env:ChunkMerge_CollisionFile=Split-Path (Join-Path "$(filter %_collision.nif,$^)" ".") ; $$env:ChunkMerge_TemplateFile="$(notdir $(filter %_template.nif,$^))" ; Start-Process -Wait -FilePath AutoHotKey -ArgumentList @("ChunkMerge.ahk") ; Stop-Process -Name ChunkMerge'
plugin/Data/Meshes/_EQ_ItemRoulette/%_mesh.nif: Source/Meshes/_EQ_ItemRoulette/%_mesh.blend
BLENDER=$$(powershell -Command '(Get-Item "$(ProgramW6432)/Blender*/Blender*/blender.exe").FullName')
"$$BLENDER" --background --python "./export_blender_models.py" -- "$^" "$@"
plugin/Data/Meshes/_EQ_ItemRoulette/%_collision.nif: Source/Meshes/_EQ_ItemRoulette/%_collision.blend
BLENDER=$$(powershell -Command '(Get-Item "$(ProgramW6432)/Blender*/Blender*/blender.exe").FullName')
"$$BLENDER" --background --python "./export_blender_models.py" -- "$^" "$@"

View file

@ -4,9 +4,12 @@ Actor Property PlayerRef Auto
Static Property _EQ_ItemRoulette_Roulette Auto
ObjectReference[] DisplayItems
ObjectReference Roulette
Int MAX_ITEMS = 6
Int CIRCLE_RADIUS = 16
Int MAX_ITEMS = 5
Float UI_DISTANCE = 32.0
Float UI_DEGREES = 7.0
Float UI_ZEES = 4.0
Event OnInit()
DisplayItems = New ObjectReference[127]
@ -21,15 +24,38 @@ EndEvent
Function Main()
Debug.Trace("Item Roulette loaded")
Roulette = PlayerRef.PlaceAtMe(_EQ_ItemRoulette_Roulette)
RegisterForModEvent("_EQ_ItemRoulette_Activate", "OnMyAction")
VRIK.VrikAddGestureAction("_EQ_ItemRoulette_Activate", "Activate Item Roulette")
RegisterForSingleUpdate(0.01)
EndFunction
Event OnUpdate()
Float handX = VRIK.VrikGetHandX(true)
Float handY = VRIK.VrikGetHandY(true)
Float handZ = VRIK.VrikGetHandZ(true)
Float playerAngle = PlayerRef.GetAngleZ()
Roulette.MoveTo(PlayerRef, UI_DISTANCE * Math.sin(playerAngle), UI_DISTANCE * Math.cos(playerAngle), VRIK.VrikGetHmdZ(), true)
Int index = 0
While index < MAX_ITEMS && DisplayItems[index] != None
DisplayItems[index].SetPosition(VRIK.VrikGetHandX(true) + CIRCLE_RADIUS * Math.sin(60 * index), VRIK.VrikGetHandY(true), VRIK.VrikGetHandZ(true) + CIRCLE_RADIUS * Math.cos(60 * index))
; TLRB
Float top = 0
Float left = 0
If index == 0
top = -UI_ZEES
ElseIf index == 1
left = -UI_DEGREES
ElseIf index == 2
top = 0
left = 0
ElseIf index == 3
left = UI_DEGREES
Else
top = UI_ZEES
EndIf
DisplayItems[index].MoveTo(PlayerRef, UI_DISTANCE * Math.sin(playerAngle - left), UI_DISTANCE * Math.cos(playerAngle - left), (VRIK.VrikGetHmdZ() - PlayerRef.Z) + top)
index += 1
EndWhile
@ -38,8 +64,6 @@ EndEvent
Event OnMyAction(string eventName, string strArg, float numArg, Form sender)
Debug.Trace("VRIK activated me!")
PlayerRef.PlaceAtMe(_EQ_ItemRoulette_Roulette)
;/
Int numItems = PlayerRef.getNumItems()
Int formIndex = numItems
Int count = 0
@ -52,5 +76,4 @@ Event OnMyAction(string eventName, string strArg, float numArg, Form sender)
invItemInst.SetMotionType(invItemInst.Motion_Keyframed)
DisplayItems[count - 1] = invItemInst
EndWhile
/;
EndEvent

180
build.ps1
View file

@ -5,17 +5,11 @@
.PARAMETER InstallDependencies
Installs script dependencies with Chocolatey, except Papyrus, and quit
.PARAMETER Scripts
Build Papyrus scripts
.PARAMETER StartVortex
Start Vortex on the appropriate port and do nothing else.
.PARAMETER Models
Build Blender models
.PARAMETER Textures
Build GIMP textures
.PARAMETER Zip
Build the ZIP AND NOTHING ELSE. You probably don't want this option.
.PARAMETER Target
Build a specific Makefile target
.PARAMETER KickVortex
Syncs the plugin with Vortex. This option requires Node.js and pnpm to
@ -37,20 +31,13 @@ param (
[Parameter(Mandatory = $False)]
[Switch]
$InstallDependencies,
[Parameter(Mandatory = $False)]
[Switch]
$StartVortex,
[Parameter(Mandatory = $False)]
[Switch]
$Scripts,
[Parameter(Mandatory = $False)]
[Switch]
$Models,
[Parameter(Mandatory = $False)]
[Switch]
$Textures,
[Parameter(Mandatory = $False)]
[Switch]
$Zip,
[String]
$Target,
[Parameter(Mandatory = $False)]
[Switch]
@ -70,14 +57,16 @@ if($InstallDependencies) {
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
choco install blender gimp 7zip autohotkey
choco install blender gimp 7zip autohotkey make nodejs
return 0
}
if(-not $Scripts -and -not $Models -and -not $Textures -and -not $Zip) {
$Scripts = $true
$Textures = $true
$Models = $true
$Zip = $true
if($StartVortex) {
Stop-Process -Name Vortex -ErrorAction SilentlyContinue
$VortexPath = (Get-ItemProperty HKLM:\SOFTWARE\57979c68-f490-55b8-8fed-8b017a5af2fe).InstallLocation
$GameId = (Get-Item "$env:APPDATA/Vortex/skyrim*").BaseName
& "$VortexPath/Vortex.exe" --remote-debugging-port=$KickPort --game=$GameId
return 0
}
New-Item -ItemType Directory "$PSScriptRoot/build" -ErrorAction SilentlyContinue
@ -143,139 +132,26 @@ if($Reload) {
}
}
if($Scripts) {
# Compile the scripts
& "$SkyrimBase/Papyrus Compiler/PapyrusCompiler.exe" `
"$PsScriptRoot/Source/Scripts" `
"-f=$SkyrimBase/Data/Source/Scripts/TESV_Papyrus_Flags.flg" `
"-i=$SkyrimBase/Data/Source/Scripts;$PsScriptRoot/Source/Scripts" `
"-o=$PsScriptRoot/plugin/Data/Scripts" `
"-all"
make -C "$PSScriptRoot" SKYRIM_BASE=$SkyrimBase $Target
if($LastExitCode -ne 0) {
return $LastExitCode
}
}
if($Textures) {
Push-Location "$PSScriptRoot"
$Gimp = (Get-Item -Path @("$Env:ProgramFiles/GIMP*/bin/gimp-console*.exe", "${env:ProgramFiles(x86)}/GIMP*/bin/gimp-console*.exe")).FullName
& $Gimp -n -i --batch-interpreter python-fu-eval -b "import export_gimp_textures"
if($LastExitCode -ne 0) {
return $LastExitCode
}
Pop-Location
}
if($Models) {
$Blender = (Get-Item -Path @("${env:ProgramFiles(x86)}/blender*/blender*/blender.exe", "$env:ProgramFiles/blender*/blender*/blender.exe")).FullName
& $Blender --background --python "$PSScriptRoot/export_blender_models.py"
if($LastExitCode -ne 0) {
return $LastExitCode
}
$ChunkmergeBase = "$PSScriptRoot/build/ChunkMerge"
$MeshSourceDir = "$PSScriptRoot/Source/Meshes/_EQ_ItemRoulette"
$MeshDestDir = "$PSScriptRoot/plugin/Data/Meshes/_EQ_ItemRoulette"
$ChunkMergeZip = "$PSScriptRoot/build/chunkmerge.7z"
if(-not (Test-Path $ChunkmergeBase)) {
Invoke-WebRequest -Uri "https://github.com/downloads/skyfox69/NifUtils/ChunkMerge0155.7z" -OutFile $ChunkMergeZip
7z x "-o$PSScriptRoot/build" $ChunkMergeZip
}
$ChunkMergeConfig = @"
<Config>
<PathSkyrim>$SkyrimBase</PathSkyrim>
<PathNifXML>$PSScriptRoot/nif.xml</PathNifXML>
<PathTemplate>$MeshSourceDir</PathTemplate>
<LastTexture></LastTexture>
<LastTemplate></LastTemplate>
<DirSource></DirSource>
<DirDestination></DirDestination>
<DirCollision></DirCollision>
<MatHandling>0</MatHandling>
<VertexColorHandling>0</VertexColorHandling>
<UpdateTangentSpace>1</UpdateTangentSpace>
<ReorderProperties>1</ReorderProperties>
<CollTypeHandling>1</CollTypeHandling>
<CollMaterial>-553455049</CollMaterial>
<MaterialScan>
<MatScanTag>SkyrimHavokMaterial</MatScanTag>
<MatScanName>SKY_HAV_</MatScanName>
<MatScanPrefixList>
<MatScanPrefix>Material</MatScanPrefix>
</MatScanPrefixList>
<MatScanIgnoreList>
<MatScanIgnore>Unknown</MatScanIgnore>
</MatScanIgnoreList>
</MaterialScan>
<DirectXView>
<ShowTexture>1</ShowTexture>
<ShowWireframe>0</ShowWireframe>
<ShowColorWire>0</ShowColorWire>
<ForceDDS>0</ForceDDS>
<ColorWireframe>ffffffff</ColorWireframe>
<ColorWireCollision>ffffff00</ColorWireCollision>
<ColorBackground>ff200020</ColorBackground>
<ColorSelected>ffff00ff</ColorSelected>
<TexturePathList>
</TexturePathList>
</DirectXView>
</Config>
"@
Out-File -Encoding ascii -FilePath "$ChunkmergeBase/ChunkMerge.xml" -InputObject $ChunkMergeConfig
$ChunkMerge = "$ChunkmergeBase/ChunkMerge.exe"
& $ChunkMerge
# FIXME This path is not recursive because ChunkMerge can't handle it
foreach($ChunkTemplate in (Get-Item "$MeshSourceDir/*_template.nif")) {
$env:ChunkMerge_NifFile = Join-Path $MeshDestDir ($ChunkTemplate.Name -replace "_template.", ".")
$env:ChunkMerge_CollisionFile = Join-Path $MeshDestDir ($ChunkTemplate.Name -replace "_template.", "_collision.")
$env:ChunkMerge_TemplateFile = $ChunkTemplate.Name
Start-Process -Wait -FilePath AutoHotkey -ArgumentList @("$PSScriptRoot/ChunkMerge.ahk")
if($LastExitCode -ne 0) {
return $LastExitCode
}
}
}
if($Zip) {
# ZIP up the deployment package
$ZipPath = "$PSScriptRoot/build/Item Roulette for VRIK.zip"
Remove-Item $ZipPath -ErrorAction SilentlyContinue
Compress-Archive -Path $PSScriptRoot/plugin/* -DestinationPath $ZipPath
if(-not $LastExitCode -eq 0) {
return $LastExitCode
}
if($KickVortex) {
# Restart Vortex and kick off deploy-mods event via Chrome Debug Protocol.
$VortexRunningWithDebuggingPortActive = `
(Get-NetTCPConnection -State Listen -LocalPort $KickPort -ErrorAction SilentlyContinue) `
| Where-Object {
$tcpConn = $_
Get-Process -Name Vortex | Where-Object { $tcpConn.OwningProcess -eq $_.Id }
}
$env:KICK_PORT=$KickPort
if (-not $VortexRunningWithDebuggingPortActive) {
Stop-Process -Name Vortex -ErrorAction SilentlyContinue
$VortexPath = (Get-ItemProperty HKLM:\SOFTWARE\57979c68-f490-55b8-8fed-8b017a5af2fe).InstallLocation
$GameId = (Get-Item "$env:APPDATA/Vortex/skyrim*").BaseName
& "$VortexPath/Vortex.exe" --remote-debugging-port=$KickPort --game=$GameId
}
pnpm install -C "$PSScriptRoot"
if(-not $LastExitCode -eq 0) {
return $LastExitCode
}
node "$PSScriptRoot/kick-vortex.js"
if(-not $LastExitCode -eq 0) {
return $LastExitCode
}
}
if($Reload) {

View file

@ -2,24 +2,25 @@ import bpy
import os
import itertools
from pathlib import Path
import sys
argv = sys.argv
try:
index = argv.index("--") + 1
except ValueError:
index = len(argv)
argv = argv[index:]
curdir = Path(__file__).parent
print("Current directory: " + str(curdir))
plugin_data_dir = curdir.joinpath("plugin/Data")
print("Plugin directory: " + str(plugin_data_dir))
mesh_src_dir = curdir.joinpath("Source/Meshes")
print("Mesh Source directory: " + str(mesh_src_dir))
mesh_dest_dir = plugin_data_dir.joinpath("Meshes")
print("Mesh Dest directory: " + str(mesh_dest_dir))
blend_paths = itertools.chain(Path(mesh_src_dir).rglob("*_mesh.blend"), Path(mesh_src_dir).rglob("*_collision.blend"))
for blend_path in blend_paths:
dest_blend_path = mesh_dest_dir.joinpath(blend_path.relative_to(mesh_src_dir))
nif_parent = dest_blend_path.parent
nif_path = nif_parent.joinpath(dest_blend_path.stem.replace('_mesh', '') + '.nif')
print("CONVERTING: " + str(blend_path) + " -> " + str(nif_path))
try:
nif_parent.mkdir(parents=True)
except FileExistsError:
pass
bpy.ops.wm.open_mainfile(filepath=str(blend_path))
bpy.ops.export_scene.nif(filepath=str(nif_path))
blend_path = Path(argv[0])
nif_path = Path(argv[1])
nif_parent = nif_path.parent
print("CONVERTING: " + str(blend_path) + " -> " + str(nif_path))
try:
nif_parent.mkdir(parents=True)
except FileExistsError:
pass
bpy.ops.wm.open_mainfile(filepath=str(blend_path))
bpy.ops.export_scene.nif(filepath=str(nif_path))