Files
aego/tests/fixture/platformer.go

68 lines
1.4 KiB
Go

package fixture
import (
"io/fs"
"os"
"path/filepath"
"strings"
"testing"
"aego/core/mathx"
"aego/sdk"
)
type enemyStats struct {
Speed float32 `aego:"speed,min=0,max=10"`
Cooldown float32 `aego:"cooldown,min=0,max=5"`
Damage int64 `aego:"damage,min=0"`
Tint mathx.Color `aego:"tint"`
}
type Platformer struct{}
func (Platformer) Info() sdk.ModuleInfo {
return sdk.ModuleInfo{ID: "mygame", Version: "0.1.0"}
}
func (Platformer) Register(r *sdk.Registry) error {
if err := sdk.DataType[enemyStats](r, sdk.Name("mygame.EnemyStats")).Err(); err != nil {
return err
}
sdk.Live[enemyStats](r, "speed")
return nil
}
func Copy(t testing.TB, name string) string {
t.Helper()
src := filepath.Join("..", "..", "examples", name)
dst := t.TempDir()
err := filepath.WalkDir(src, func(p string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
rel, _ := filepath.Rel(src, p)
if d.IsDir() {
switch rel {
case ".aego", "native", "exports":
return filepath.SkipDir
}
return os.MkdirAll(filepath.Join(dst, rel), 0o755)
}
if rel == "go.mod" || rel == "go.sum" {
return nil
}
data, err := os.ReadFile(p)
if err != nil {
return err
}
if rel == "project.aego" {
data = []byte(strings.Replace(string(data), "native=true", "native=false", 1))
}
return os.WriteFile(filepath.Join(dst, rel), data, 0o644)
})
if err != nil {
t.Fatal(err)
}
return dst
}