User-Friendliness

This commit is contained in:
2026-04-02 20:41:48 +02:00
parent af4d23ea48
commit 7c7eb4dcc0
2 changed files with 74 additions and 10 deletions
+35 -1
View File
@@ -52,6 +52,8 @@ type hakChunk struct {
Size int64
}
type ProgressFunc func(string)
func Build(p *project.Project) (BuildResult, error) {
moduleResult, err := BuildModule(p)
if err != nil {
@@ -68,15 +70,26 @@ func Build(p *project.Project) (BuildResult, error) {
}
func BuildModule(p *project.Project) (BuildResult, error) {
return buildModule(p, nil)
}
func BuildModuleWithProgress(p *project.Project, progress ProgressFunc) (BuildResult, error) {
return buildModule(p, progress)
}
func buildModule(p *project.Project, progress ProgressFunc) (BuildResult, error) {
progressf(progress, "Validating project...")
if err := validateForBuild(p); err != nil {
return BuildResult{}, err
}
progressf(progress, "Collecting module resources...")
moduleResources, err := collectModuleResources(p, nil)
if err != nil {
return BuildResult{}, err
}
progressf(progress, "Writing module archive...")
outputPath := filepath.Join(p.BuildDir(), p.Config.Module.ResRef+".mod")
output, err := os.Create(outputPath)
if err != nil {
@@ -95,14 +108,25 @@ func BuildModule(p *project.Project) (BuildResult, error) {
}
func BuildHAKs(p *project.Project) (BuildResult, error) {
return buildHAKs(p, nil)
}
func BuildHAKsWithProgress(p *project.Project, progress ProgressFunc) (BuildResult, error) {
return buildHAKs(p, progress)
}
func buildHAKs(p *project.Project, progress ProgressFunc) (BuildResult, error) {
progressf(progress, "Validating project...")
if err := validateForBuild(p); err != nil {
return BuildResult{}, err
}
progressf(progress, "Collecting asset resources...")
assetResources, err := collectAssetResources(p)
if err != nil {
return BuildResult{}, err
}
progressf(progress, "Cleaning previous generated HAKs...")
if err := cleanupGeneratedHAKs(p.BuildDir(), p.Config.Module.ResRef); err != nil {
return BuildResult{}, err
}
@@ -112,10 +136,12 @@ func BuildHAKs(p *project.Project) (BuildResult, error) {
return result, nil
}
progressf(progress, "Planning HAK chunks...")
chunks, err := planHAKChunks(p, assetResources)
if err != nil {
return BuildResult{}, err
}
progressf(progress, "Resolving module HAK order...")
moduleHakOrder, err := resolveModuleHAKOrder(p, chunks)
if err != nil {
return BuildResult{}, err
@@ -125,7 +151,8 @@ func BuildHAKs(p *project.Project) (BuildResult, error) {
ModuleHAKs: moduleHakOrder,
HAKs: make([]BuildManifestHAK, 0, len(chunks)),
}
for _, chunk := range chunks {
for index, chunk := range chunks {
progressf(progress, fmt.Sprintf("Writing HAK %d/%d: %s (%d assets)", index+1, len(chunks), chunk.Name, len(chunk.Assets)))
hakPath := filepath.Join(p.BuildDir(), chunk.Name+".hak")
hakOutput, err := os.Create(hakPath)
if err != nil {
@@ -154,6 +181,7 @@ func BuildHAKs(p *project.Project) (BuildResult, error) {
})
}
progressf(progress, "Writing HAK manifest...")
manifestPath := filepath.Join(p.BuildDir(), "haks.json")
manifestBytes, err := json.MarshalIndent(manifest, "", " ")
if err != nil {
@@ -167,6 +195,12 @@ func BuildHAKs(p *project.Project) (BuildResult, error) {
return result, nil
}
func progressf(progress ProgressFunc, message string) {
if progress != nil {
progress(message)
}
}
func collectModuleResources(p *project.Project, moduleHakOrder []string) ([]erf.Resource, error) {
var moduleResources []erf.Resource