This commit is contained in:
41666 2024-06-13 22:33:29 -04:00
commit c5cc245e25
29 changed files with 926 additions and 0 deletions

View file

@ -0,0 +1,100 @@
// / Generate pkgs/translators/vehicles_map.gen.go
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
"regexp"
"strings"
"time"
)
type VehicleResponse struct {
VehicleList []Vehicle `json:"vehicle_list"`
}
type Vehicle struct {
VehicleID string `json:"vehicle_id"`
Name LocaleString `json:"name"`
}
type LocaleString struct {
En string `json:"en"`
}
func fetchCensusVehicles() (VehicleResponse, error) {
var vehicleResponse VehicleResponse
client := http.Client{
Timeout: time.Second * 30,
}
resp, err := client.Get("https://census.lithafalcon.cc/get/ps2/vehicle")
if err != nil {
return vehicleResponse, fmt.Errorf("census request failed: %w", err)
}
err = json.NewDecoder(resp.Body).Decode(&vehicleResponse)
if err != nil {
return vehicleResponse, fmt.Errorf("census response decode failed: %w", err)
}
return vehicleResponse, nil
}
func generateRegexp(vehicles []string) *regexp.Regexp {
pipes := strings.Join(vehicles, "|")
expr := fmt.Sprintf("(%s)", pipes)
log.Println(expr)
return regexp.MustCompile(expr)
}
func main() {
filterRegexp := generateRegexp(AllVehicles)
censusVehicles, err := fetchCensusVehicles()
if err != nil {
log.Fatalln("fetch census failed", err)
}
vehicles := []VehicleItem{}
for _, vehicle := range censusVehicles.VehicleList {
if vehicle.Name.En == "" || strings.Contains(vehicle.Name.En, "Turret") {
continue
}
match := filterRegexp.FindString(strings.ToLower(vehicle.Name.En))
if match == "" {
continue
}
switch match {
case "wasp":
match = "valkyrie"
case "deliverer":
match = "ant"
case "lodestar":
match = "galaxy"
}
enumName := fmt.Sprintf("%s%s", strings.ToUpper(match[0:1]), match[1:])
vehicles = append(vehicles, VehicleItem{
VehicleID: vehicle.VehicleID,
VehicleEnumName: enumName,
})
}
output, err := renderTemplate(TemplateData{
Vehicles: vehicles,
})
if err != nil {
log.Fatalln("render failed", err)
}
fmt.Println(output)
}

View file

@ -0,0 +1,39 @@
package main
import (
"bytes"
"fmt"
"text/template"
)
var (
vehicleMapTmpl = `package translators
var (
VehicleMap = map[string]Vehicle{
{{ range .Vehicles }}"{{ .VehicleID }}": {{ .VehicleEnumName }},
{{end}}
}
)`
vehicleMapTemplate = template.Must(template.New("vehicle_map").Parse(vehicleMapTmpl))
)
type TemplateData struct {
Vehicles []VehicleItem
}
type VehicleItem struct {
VehicleID string
VehicleEnumName string
}
func renderTemplate(data TemplateData) (string, error) {
var buffer bytes.Buffer
err := vehicleMapTemplate.Execute(&buffer, data)
if err != nil {
return "", fmt.Errorf("template render failed, %w", err)
}
return buffer.String(), nil
}

View file

@ -0,0 +1,27 @@
package main
var (
AllVehicles = []string{
"flash",
"sunderer",
"lightning",
"scythe",
"vanguard",
"prowler",
"reaver",
"mosquito",
"galaxy",
"valkyrie",
"wasp",
"deliverer",
"lodestar",
"liberator",
"ant",
"harasser",
"dervish",
"chimera",
"javelin",
"corsair",
"magrider",
}
)