Skip to content

Instantly share code, notes, and snippets.

@Austinhs
Created October 31, 2023 14:12
Show Gist options
  • Select an option

  • Save Austinhs/931feffef6e9a3f9d6fba1722680a7b5 to your computer and use it in GitHub Desktop.

Select an option

Save Austinhs/931feffef6e9a3f9d6fba1722680a7b5 to your computer and use it in GitHub Desktop.
wait groups & go routines
package main
import (
"crate-mix/lib/mix"
"crate-mix/lib/settings"
"fmt"
"log"
"os"
"sync"
)
func main() {
// Check for assets
_, err := os.Stat(settings.Root + "/assets")
if os.IsNotExist(err) {
log.Fatal("assets directory does not exist")
}
// Create export folder -- otherwise clear it
_, err = os.Stat(settings.Root + "/export")
if os.IsNotExist(err) {
os.Mkdir(settings.Root+"/export", 0755)
} else {
if err := os.RemoveAll(settings.Root + "/export"); err != nil {
log.Fatal(err)
}
os.Mkdir(settings.Root+"/export", 0755)
}
wait := new(sync.WaitGroup)
counter := 1
for _, gender := range []string{"Male", "Female"} {
template := mix.GetTemplateLayers(gender)
for _, group := range settings.GetAvailableLayerGroupsToMix() {
groupPath := settings.Root + "/assets/" + gender + "/" + group
// Get all layers in group & loop them
files, err := os.ReadDir(groupPath)
if err != nil {
log.Println("Error", err)
continue
}
for _, file := range files {
fileName := file.Name()
filePath := groupPath + "/" + fileName
if fileName == ".DS_Store" {
continue
}
// TODO: Define export area
// TODO: Check if premade -- copy that image to export instead
// Create layer for this item
layer := mix.Layer{
Layer_name: mix.CleanFileName(fileName),
Trait_name: group,
Path: filePath,
}
// Copy template
image := make(map[string]mix.Layer)
for k, v := range template {
image[k] = v
}
image[group] = layer
// Build image in a go routine
wait.Add(1)
go func(image map[string]mix.Layer, group string) {
defer wait.Done()
layerName := image[group].Layer_name
mix.Create(image, layerName)
}(image, group)
fmt.Printf("%v+\n", fileName)
counter++
if counter == 10 {
wait.Wait()
os.Exit(1)
}
// TODO: Create metadata & sql
// TODO: Save image, metadata, sql
}
}
}
wait.Wait()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment