mirror of
https://github.com/Octops/quake-kube.git
synced 2026-04-12 21:20:42 +00:00
Initial commit
This commit is contained in:
72
internal/quake/content/maps.go
Normal file
72
internal/quake/content/maps.go
Normal file
@ -0,0 +1,72 @@
|
||||
package content
|
||||
|
||||
import (
|
||||
"archive/zip"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Map struct {
|
||||
File string `json:"file"`
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
func getMaps(dir string) (result []*Map, err error) {
|
||||
err = walk(dir, func(path string, info os.FileInfo, err error) error {
|
||||
mp, err := OpenMapPack(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer mp.Close()
|
||||
|
||||
maps, err := mp.Maps()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
result = append(result, maps...)
|
||||
return err
|
||||
}, ".pk3")
|
||||
return
|
||||
}
|
||||
|
||||
type MapPack struct {
|
||||
*os.File
|
||||
*zip.Reader
|
||||
|
||||
path string
|
||||
}
|
||||
|
||||
func OpenMapPack(path string) (*MapPack, error) {
|
||||
f, err := os.Open(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
info, err := f.Stat()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
r, err := zip.NewReader(f, info.Size())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
mp := &MapPack{
|
||||
File: f,
|
||||
Reader: r,
|
||||
path: path,
|
||||
}
|
||||
return mp, nil
|
||||
}
|
||||
|
||||
func (m *MapPack) Maps() ([]*Map, error) {
|
||||
maps := make([]*Map, 0)
|
||||
for _, f := range m.Reader.File {
|
||||
if !hasExts(f.Name, ".bsp") {
|
||||
continue
|
||||
}
|
||||
path := filepath.Join(filepath.Base(filepath.Dir(m.path)), filepath.Base(m.path))
|
||||
mapName := strings.TrimSuffix(filepath.Base(f.Name), ".bsp")
|
||||
maps = append(maps, &Map{File: path, Name: mapName})
|
||||
}
|
||||
return maps, nil
|
||||
}
|
||||
Reference in New Issue
Block a user