From 001df3f66b504582c2ddd3d75ce92e2280a39e9e Mon Sep 17 00:00:00 2001 From: bitver Date: Fri, 23 May 2025 00:23:25 +0500 Subject: [PATCH] feat: component manager generator refactor: remove unused component managers and update component references --- cmd/component/component.go | 196 +++++++++++++++ desktop-components.go | 2 +- .../components/asteroid-scene-manager.go | 9 +- examples/new-api/components/asteroid-tag.go | 9 +- examples/new-api/components/audio.go | 15 +- examples/new-api/components/bullet-tag.go | 9 +- examples/new-api/components/controller.go | 9 +- examples/new-api/components/hp.go | 9 +- examples/new-api/components/ids.go | 34 +-- examples/new-api/components/managers.go | 91 +++++++ examples/new-api/components/space-spawner.go | 8 +- .../new-api/components/spaceship-intent.go | 9 +- examples/new-api/components/tags.go | 9 +- examples/new-api/components/texture-circle.go | 8 +- examples/new-api/components/texture-rect.go | 8 +- examples/new-api/components/wall-tag.go | 9 +- examples/new-api/components/weapon.go | 8 +- examples/new-api/entities/asteroid.go | 2 +- examples/new-api/entities/player.go | 2 +- examples/new-api/entities/satellite.go | 2 +- examples/new-api/entities/space-spawner.go | 2 +- examples/new-api/entities/spaceship.go | 2 +- examples/new-api/entities/wall.go | 2 +- examples/new-api/instances/component-list.go | 16 +- examples/new-api/systems/asterodd.go | 8 +- examples/new-api/systems/audio.go | 4 +- examples/new-api/systems/collision-handler.go | 8 +- examples/new-api/systems/debug-info.go | 4 +- examples/new-api/systems/hp.go | 2 +- examples/new-api/systems/render-overlay.go | 2 +- examples/new-api/systems/space-spawner.go | 4 +- examples/new-api/systems/spaceship-intents.go | 2 +- examples/new-api/systems/spatial-audio.go | 2 +- examples/new-api/systems/texture-circle.go | 2 +- go.mod | 2 + stdcomponents/aabb.go | 11 +- stdcomponents/animation-player.go | 8 +- stdcomponents/animation-state.go | 11 +- stdcomponents/bvh-tree.go | 8 +- stdcomponents/camera.go | 9 +- stdcomponents/colliders.go | 38 +-- stdcomponents/collision-cell.go | 7 +- stdcomponents/collision-chunk.go | 11 +- stdcomponents/collision-grid-member.go | 7 +- stdcomponents/collision-grid.go | 8 +- stdcomponents/collision.go | 8 +- stdcomponents/flip.go | 9 +- stdcomponents/frame-buffer-2d.go | 8 +- stdcomponents/ids.go | 62 +++-- stdcomponents/managers.go | 223 ++++++++++++++++++ stdcomponents/network.go | 10 +- stdcomponents/position-smooth.go | 12 +- stdcomponents/position.go | 8 +- stdcomponents/render-order.go | 9 +- stdcomponents/render-visible.go | 9 +- stdcomponents/renderable.go | 9 +- stdcomponents/rigidbody.go | 9 +- stdcomponents/rl-texture-pro.go | 8 +- stdcomponents/rotation.go | 8 +- stdcomponents/scale.go | 8 +- stdcomponents/spatial-index.go | 11 +- stdcomponents/sprite-matrix.go | 8 +- stdcomponents/sprite-sheet.go | 8 +- stdcomponents/sprite.go | 8 +- stdcomponents/tint.go | 12 +- stdcomponents/transform.go | 8 +- stdcomponents/velocity.go | 8 +- stdcomponents/ysort.go | 9 +- stdsystems/collision-setup.go | 3 +- 69 files changed, 650 insertions(+), 453 deletions(-) create mode 100644 cmd/component/component.go create mode 100644 examples/new-api/components/managers.go create mode 100644 stdcomponents/managers.go diff --git a/cmd/component/component.go b/cmd/component/component.go new file mode 100644 index 00000000..634c440b --- /dev/null +++ b/cmd/component/component.go @@ -0,0 +1,196 @@ +// component.go: Go code generator for ECS component managers +// Usage: go run component.go +// Scans for structs with '//go:generate go tool component' and generates ids.go and managers.go + +package main + +import ( + "bytes" + "fmt" + "go/ast" + "go/parser" + "go/token" + "os" + "path/filepath" + "regexp" + "strings" +) + +// Accepts: -shared, -std, -example in any combination/order +var ( + generateRe = regexp.MustCompile(`//go:generate go tool component((?: -[a-z]+)*)`) +) + +type Component struct { + StructName string + File string + Shared bool + Std bool + Example bool +} + +func main() { + _, err := os.Getwd() + if err != nil { + fmt.Fprintf(os.Stderr, "Failed to get working directory: %v\n", err) + os.Exit(1) + } + + files, err := filepath.Glob("*.go") + if err != nil { + fmt.Fprintf(os.Stderr, "Failed to list Go files: %v\n", err) + os.Exit(1) + } + + var components []Component + for _, file := range files { + if strings.HasSuffix(file, "_test.go") { + continue + } + comps := processFile(file) + components = append(components, comps...) + } + + if len(components) > 0 { + generateIdsGo(components) + generateManagersGo(components) + } +} + +// processFile parses a Go file and returns all components with a go:generate comment. +func processFile(filename string) []Component { + fset := token.NewFileSet() + fileAst, err := parser.ParseFile(fset, filename, nil, parser.ParseComments) + if err != nil { + fmt.Fprintf(os.Stderr, "Failed to parse %s: %v\n", filename, err) + return nil + } + + // Map line number to comment text + comments := map[int]string{} + for _, cg := range fileAst.Comments { + for _, c := range cg.List { + comments[fset.Position(c.Pos()).Line] = c.Text + } + } + + var components []Component + for _, decl := range fileAst.Decls { + gd, ok := decl.(*ast.GenDecl) + if !ok || gd.Tok != token.TYPE { + continue + } + for _, spec := range gd.Specs { + ts, ok := spec.(*ast.TypeSpec) + if !ok { + continue + } + // Accept both struct and type alias + if _, ok := ts.Type.(*ast.StructType); !ok { + if _, ok := ts.Type.(*ast.Ident); !ok { + continue + } + } + // Check for go:generate comment immediately above + line := fset.Position(gd.Pos()).Line - 1 + comment, ok := comments[line] + if !ok { + continue + } + matches := generateRe.FindStringSubmatch(comment) + if matches == nil { + continue + } + flags := matches[1] + // Split flags by space and check for each + flagSet := map[string]bool{} + for _, f := range strings.Fields(flags) { + flagSet[f] = true + } + components = append(components, Component{ + StructName: ts.Name.Name, + File: filename, + Shared: flagSet["-shared"], + Std: flagSet["-std"], + Example: flagSet["-example"], + }) + } + } + return components +} + +// generateIdsGo creates ids.go for the detected components. +func generateIdsGo(components []Component) { + if len(components) == 0 { + return + } + pkgName := getPackageName(components[0].File) + var buf bytes.Buffer + buf.WriteString("// Code generated by component generator; DO NOT EDIT.\n") + buf.WriteString("\npackage " + pkgName + "\n\n") + buf.WriteString("import (\n") + if anyExample(components) { + buf.WriteString("\t\"gomp/stdcomponents\"\n") + } else { + buf.WriteString("\t\"gomp/pkg/ecs\"\n") + } + buf.WriteString(")\n\n") + buf.WriteString("const (\n") + if components[0].Example { + buf.WriteString("\t" + components[0].StructName + "ComponentId = iota + stdcomponents.StdLastComponentId\n") + for i := 1; i < len(components); i++ { + buf.WriteString("\t" + components[i].StructName + "ComponentId\n") + } + } else { + buf.WriteString("\tInvalidComponentId ecs.ComponentId = iota\n") + for _, c := range components { + buf.WriteString("\t" + c.StructName + "ComponentId\n") + } + buf.WriteString("\tStdLastComponentId\n") + } + buf.WriteString(")\n\n") + _ = os.WriteFile("ids.go", buf.Bytes(), 0644) +} + +// getPackageName returns the package name for a Go file. +func getPackageName(filename string) string { + fset := token.NewFileSet() + fileAst, err := parser.ParseFile(fset, filename, nil, parser.PackageClauseOnly) + if err != nil { + return "main" + } + return fileAst.Name.Name +} + +// anyExample returns true if any component is marked as -example. +func anyExample(components []Component) bool { + for _, c := range components { + if c.Example { + return true + } + } + return false +} + +// generateManagersGo creates managers.go for the detected components. +func generateManagersGo(components []Component) { + if len(components) == 0 { + return + } + pkgName := getPackageName(components[0].File) + var buf bytes.Buffer + buf.WriteString("// Code generated by componentgen; DO NOT EDIT.\n") + buf.WriteString("\npackage " + pkgName + "\n\n") + buf.WriteString("import (\n\t\"gomp/pkg/ecs\"\n)\n\n") + + for _, c := range components { + if c.Shared { + buf.WriteString(fmt.Sprintf("type %[1]sComponentManager = ecs.SharedComponentManager[%[1]s]\n\n", c.StructName)) + buf.WriteString(fmt.Sprintf("func New%[1]sComponentManager() %[1]sComponentManager {\n\treturn ecs.NewSharedComponentManager[%[1]s](%[1]sComponentId)\n}\n\n", c.StructName)) + } else { + buf.WriteString(fmt.Sprintf("type %[1]sComponentManager = ecs.ComponentManager[%[1]s]\n\n", c.StructName)) + buf.WriteString(fmt.Sprintf("func New%[1]sComponentManager() %[1]sComponentManager {\n\treturn ecs.NewComponentManager[%[1]s](%[1]sComponentId)\n}\n\n", c.StructName)) + } + } + _ = os.WriteFile("managers.go", buf.Bytes(), 0644) +} diff --git a/desktop-components.go b/desktop-components.go index d1b1ba62..04771d32 100644 --- a/desktop-components.go +++ b/desktop-components.go @@ -31,7 +31,7 @@ func NewDesktopComponents() DesktopComponents { Tint: stdcomponents.NewTintComponentManager(), AnimationPlayer: stdcomponents.NewAnimationPlayerComponentManager(), AnimationState: stdcomponents.NewAnimationStateComponentManager(), - RlTexturePro: stdcomponents.NewRlTextureProComponentManager(), + RlTexturePro: stdcomponents.NewRLTextureProComponentManager(), Network: stdcomponents.NewNetworkComponentManager(), } } diff --git a/examples/new-api/components/asteroid-scene-manager.go b/examples/new-api/components/asteroid-scene-manager.go index 7e15b789..1bd9571c 100644 --- a/examples/new-api/components/asteroid-scene-manager.go +++ b/examples/new-api/components/asteroid-scene-manager.go @@ -14,15 +14,8 @@ Thank you for your support! package components -import "gomp/pkg/ecs" - +//go:generate go tool component -example type AsteroidSceneManager struct { PlayerScore int32 PlayerHp int32 } - -type AsteroidSceneManagerComponentManager = ecs.ComponentManager[AsteroidSceneManager] - -func NewAsteroidSceneManagerComponentManager() AsteroidSceneManagerComponentManager { - return ecs.NewComponentManager[AsteroidSceneManager](AsteroidSceneManagerComponentId) -} diff --git a/examples/new-api/components/asteroid-tag.go b/examples/new-api/components/asteroid-tag.go index aefa29e5..a1301d90 100644 --- a/examples/new-api/components/asteroid-tag.go +++ b/examples/new-api/components/asteroid-tag.go @@ -14,13 +14,6 @@ Thank you for your support! package components -import "gomp/pkg/ecs" - +//go:generate go tool component -example type AsteroidTag struct { } - -type AsteroidComponentManager = ecs.ComponentManager[AsteroidTag] - -func NewAsteroidTagComponentManager() AsteroidComponentManager { - return ecs.NewComponentManager[AsteroidTag](AsteroidTagComponentId) -} diff --git a/examples/new-api/components/audio.go b/examples/new-api/components/audio.go index 93032d0a..bfda0ea0 100644 --- a/examples/new-api/components/audio.go +++ b/examples/new-api/components/audio.go @@ -16,9 +16,9 @@ package components import ( rl "github.com/gen2brain/raylib-go/raylib" - "gomp/pkg/ecs" ) +//go:generate go tool component -example type SoundEffect struct { // audio clip from assets Clip *rl.Sound @@ -34,21 +34,10 @@ type SoundEffect struct { Pan float32 } -type SoundEffectsComponentManager = ecs.ComponentManager[SoundEffect] - -func NewSoundEffectsComponentManager() SoundEffectsComponentManager { - return ecs.NewComponentManager[SoundEffect](SoundEffectManagerComponentId) -} - +//go:generate go tool component -example type SpatialAudio struct { // follows raylib rules. Base is 1.0 Volume float32 // follows raylib rules. Base is 0.5, 1.0 is left, 0.0 is right Pan float32 } - -type SpatialAudioComponentManager = ecs.ComponentManager[SpatialAudio] - -func NewSpatialAudioComponentManager() SpatialAudioComponentManager { - return ecs.NewComponentManager[SpatialAudio](SpatialAudioManagerComponentId) -} diff --git a/examples/new-api/components/bullet-tag.go b/examples/new-api/components/bullet-tag.go index b29b3f0c..f908e492 100644 --- a/examples/new-api/components/bullet-tag.go +++ b/examples/new-api/components/bullet-tag.go @@ -14,13 +14,6 @@ Thank you for your support! package components -import "gomp/pkg/ecs" - +//go:generate go tool component -example type BulletTag struct { } - -type BulletTagComponentManager = ecs.ComponentManager[BulletTag] - -func NewBulletTagComponentManager() BulletTagComponentManager { - return ecs.NewComponentManager[BulletTag](BulletTagComponentId) -} diff --git a/examples/new-api/components/controller.go b/examples/new-api/components/controller.go index ec245041..7853e71f 100644 --- a/examples/new-api/components/controller.go +++ b/examples/new-api/components/controller.go @@ -14,12 +14,5 @@ Thank you for your support! package components -import "gomp/pkg/ecs" - +//go:generate go tool component -example type Controller struct{} - -type ControllerComponentManager = ecs.ComponentManager[Controller] - -func NewControllerComponentManager() ControllerComponentManager { - return ecs.NewComponentManager[Controller](ControllerComponentId) -} diff --git a/examples/new-api/components/hp.go b/examples/new-api/components/hp.go index d5ed1e39..7d151f02 100644 --- a/examples/new-api/components/hp.go +++ b/examples/new-api/components/hp.go @@ -14,14 +14,7 @@ Thank you for your support! package components -import "gomp/pkg/ecs" - +//go:generate go tool component -example type Hp struct { Hp, MaxHp int32 } - -type HpComponentManager = ecs.ComponentManager[Hp] - -func NewHealthComponentManager() HpComponentManager { - return ecs.NewComponentManager[Hp](HealthComponentId) -} diff --git a/examples/new-api/components/ids.go b/examples/new-api/components/ids.go index f6063132..9eb7992c 100644 --- a/examples/new-api/components/ids.go +++ b/examples/new-api/components/ids.go @@ -1,16 +1,4 @@ -/* -This Source Code Form is subject to the terms of the Mozilla -Public License, v. 2.0. If a copy of the MPL was not distributed -with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -===-===-===-===-===-===-===-===-===-=== -Donations during this file development: --===-===-===-===-===-===-===-===-===-=== - -none :) - -Thank you for your support! -*/ +// Code generated by component generator; DO NOT EDIT. package components @@ -19,18 +7,18 @@ import ( ) const ( - HealthComponentId = iota + stdcomponents.StdLastComponentId - ControllerComponentId - PlayerTagComponentId + AsteroidSceneManagerComponentId = iota + stdcomponents.StdLastComponentId + AsteroidTagComponentId + SoundEffectComponentId + SpatialAudioComponentId BulletTagComponentId - WallComponentId + ControllerComponentId + HpComponentId SpaceSpawnerTagComponentId - AsteroidTagComponentId - WeaponComponentId SpaceshipIntentComponentId - AsteroidSceneManagerComponentId - SoundEffectManagerComponentId - SpatialAudioManagerComponentId - TextureRectComponentId + PlayerTagComponentId TextureCircleComponentId + TextureRectComponentId + WallComponentId + WeaponComponentId ) diff --git a/examples/new-api/components/managers.go b/examples/new-api/components/managers.go new file mode 100644 index 00000000..5e87e212 --- /dev/null +++ b/examples/new-api/components/managers.go @@ -0,0 +1,91 @@ +// Code generated by componentgen; DO NOT EDIT. + +package components + +import ( + "gomp/pkg/ecs" +) + +type AsteroidSceneManagerComponentManager = ecs.ComponentManager[AsteroidSceneManager] + +func NewAsteroidSceneManagerComponentManager() AsteroidSceneManagerComponentManager { + return ecs.NewComponentManager[AsteroidSceneManager](AsteroidSceneManagerComponentId) +} + +type AsteroidTagComponentManager = ecs.ComponentManager[AsteroidTag] + +func NewAsteroidTagComponentManager() AsteroidTagComponentManager { + return ecs.NewComponentManager[AsteroidTag](AsteroidTagComponentId) +} + +type SoundEffectComponentManager = ecs.ComponentManager[SoundEffect] + +func NewSoundEffectComponentManager() SoundEffectComponentManager { + return ecs.NewComponentManager[SoundEffect](SoundEffectComponentId) +} + +type SpatialAudioComponentManager = ecs.ComponentManager[SpatialAudio] + +func NewSpatialAudioComponentManager() SpatialAudioComponentManager { + return ecs.NewComponentManager[SpatialAudio](SpatialAudioComponentId) +} + +type BulletTagComponentManager = ecs.ComponentManager[BulletTag] + +func NewBulletTagComponentManager() BulletTagComponentManager { + return ecs.NewComponentManager[BulletTag](BulletTagComponentId) +} + +type ControllerComponentManager = ecs.ComponentManager[Controller] + +func NewControllerComponentManager() ControllerComponentManager { + return ecs.NewComponentManager[Controller](ControllerComponentId) +} + +type HpComponentManager = ecs.ComponentManager[Hp] + +func NewHpComponentManager() HpComponentManager { + return ecs.NewComponentManager[Hp](HpComponentId) +} + +type SpaceSpawnerTagComponentManager = ecs.ComponentManager[SpaceSpawnerTag] + +func NewSpaceSpawnerTagComponentManager() SpaceSpawnerTagComponentManager { + return ecs.NewComponentManager[SpaceSpawnerTag](SpaceSpawnerTagComponentId) +} + +type SpaceshipIntentComponentManager = ecs.ComponentManager[SpaceshipIntent] + +func NewSpaceshipIntentComponentManager() SpaceshipIntentComponentManager { + return ecs.NewComponentManager[SpaceshipIntent](SpaceshipIntentComponentId) +} + +type PlayerTagComponentManager = ecs.ComponentManager[PlayerTag] + +func NewPlayerTagComponentManager() PlayerTagComponentManager { + return ecs.NewComponentManager[PlayerTag](PlayerTagComponentId) +} + +type TextureCircleComponentManager = ecs.ComponentManager[TextureCircle] + +func NewTextureCircleComponentManager() TextureCircleComponentManager { + return ecs.NewComponentManager[TextureCircle](TextureCircleComponentId) +} + +type TextureRectComponentManager = ecs.ComponentManager[TextureRect] + +func NewTextureRectComponentManager() TextureRectComponentManager { + return ecs.NewComponentManager[TextureRect](TextureRectComponentId) +} + +type WallComponentManager = ecs.ComponentManager[Wall] + +func NewWallComponentManager() WallComponentManager { + return ecs.NewComponentManager[Wall](WallComponentId) +} + +type WeaponComponentManager = ecs.ComponentManager[Weapon] + +func NewWeaponComponentManager() WeaponComponentManager { + return ecs.NewComponentManager[Weapon](WeaponComponentId) +} diff --git a/examples/new-api/components/space-spawner.go b/examples/new-api/components/space-spawner.go index 30b0fd05..2cdd7ddb 100644 --- a/examples/new-api/components/space-spawner.go +++ b/examples/new-api/components/space-spawner.go @@ -15,17 +15,11 @@ Thank you for your support! package components import ( - "gomp/pkg/ecs" "time" ) +//go:generate go tool component -example type SpaceSpawnerTag struct { Cooldown time.Duration CooldownLeft time.Duration } - -type SpaceSpawnerComponentManager = ecs.ComponentManager[SpaceSpawnerTag] - -func NewSpaceSpawnerTagComponentManager() SpaceSpawnerComponentManager { - return ecs.NewComponentManager[SpaceSpawnerTag](SpaceSpawnerTagComponentId) -} diff --git a/examples/new-api/components/spaceship-intent.go b/examples/new-api/components/spaceship-intent.go index 40a7a1ee..d82ddb7d 100644 --- a/examples/new-api/components/spaceship-intent.go +++ b/examples/new-api/components/spaceship-intent.go @@ -14,8 +14,7 @@ Thank you for your support! package components -import "gomp/pkg/ecs" - +//go:generate go tool component -example type SpaceshipIntent struct { MoveUp bool MoveDown bool @@ -23,9 +22,3 @@ type SpaceshipIntent struct { RotateRight bool Fire bool } - -type SpaceshipIntentComponentManager = ecs.ComponentManager[SpaceshipIntent] - -func NewSpaceshipIntentComponentManager() SpaceshipIntentComponentManager { - return ecs.NewComponentManager[SpaceshipIntent](SpaceshipIntentComponentId) -} diff --git a/examples/new-api/components/tags.go b/examples/new-api/components/tags.go index f59165a3..b9143bce 100644 --- a/examples/new-api/components/tags.go +++ b/examples/new-api/components/tags.go @@ -14,13 +14,6 @@ Thank you for your support! package components -import "gomp/pkg/ecs" - +//go:generate go tool component -example type PlayerTag struct { } - -type PlayerTagComponentManager = ecs.ComponentManager[PlayerTag] - -func NewPlayerTagComponentManager() PlayerTagComponentManager { - return ecs.NewComponentManager[PlayerTag](PlayerTagComponentId) -} diff --git a/examples/new-api/components/texture-circle.go b/examples/new-api/components/texture-circle.go index 52a5d4c3..f98e1662 100644 --- a/examples/new-api/components/texture-circle.go +++ b/examples/new-api/components/texture-circle.go @@ -16,10 +16,10 @@ package components import ( rl "github.com/gen2brain/raylib-go/raylib" - "gomp/pkg/ecs" "image/color" ) +//go:generate go tool component -example type TextureCircle struct { CenterX float32 CenterY float32 @@ -28,9 +28,3 @@ type TextureCircle struct { Origin rl.Vector2 Color color.RGBA } - -type PrimitiveCircleComponentManager = ecs.ComponentManager[TextureCircle] - -func NewTextureCircleComponentManager() PrimitiveCircleComponentManager { - return ecs.NewComponentManager[TextureCircle](TextureCircleComponentId) -} diff --git a/examples/new-api/components/texture-rect.go b/examples/new-api/components/texture-rect.go index 66e45e7d..3dfe0f93 100644 --- a/examples/new-api/components/texture-rect.go +++ b/examples/new-api/components/texture-rect.go @@ -16,19 +16,13 @@ package components import ( rl "github.com/gen2brain/raylib-go/raylib" - "gomp/pkg/ecs" "image/color" ) +//go:generate go tool component -example type TextureRect struct { Dest rl.Rectangle Origin rl.Vector2 Rotation float32 Color color.RGBA } - -type TextureRectComponentManager = ecs.ComponentManager[TextureRect] - -func NewTextureRectComponentManager() TextureRectComponentManager { - return ecs.NewComponentManager[TextureRect](TextureRectComponentId) -} diff --git a/examples/new-api/components/wall-tag.go b/examples/new-api/components/wall-tag.go index f06fd71a..1f621e8b 100644 --- a/examples/new-api/components/wall-tag.go +++ b/examples/new-api/components/wall-tag.go @@ -14,13 +14,6 @@ Thank you for your support! package components -import "gomp/pkg/ecs" - +//go:generate go tool component -example type Wall struct { } - -type WallTagComponentManager = ecs.ComponentManager[Wall] - -func NewWallComponentManager() WallTagComponentManager { - return ecs.NewComponentManager[Wall](WallComponentId) -} diff --git a/examples/new-api/components/weapon.go b/examples/new-api/components/weapon.go index 19c0e947..b7200619 100644 --- a/examples/new-api/components/weapon.go +++ b/examples/new-api/components/weapon.go @@ -15,18 +15,12 @@ Thank you for your support! package components import ( - "gomp/pkg/ecs" "time" ) +//go:generate go tool component -example type Weapon struct { Damage int Cooldown time.Duration CooldownLeft time.Duration } - -type WeaponComponentManager = ecs.ComponentManager[Weapon] - -func NewWeaponComponentManager() WeaponComponentManager { - return ecs.NewComponentManager[Weapon](WeaponComponentId) -} diff --git a/examples/new-api/entities/asteroid.go b/examples/new-api/entities/asteroid.go index dd732ad2..2f9a36dd 100644 --- a/examples/new-api/entities/asteroid.go +++ b/examples/new-api/entities/asteroid.go @@ -34,7 +34,7 @@ type CreateAsteroidManagers struct { Velocities *stdcomponents.VelocityComponentManager CircleColliders *stdcomponents.CircleColliderComponentManager Sprites *stdcomponents.SpriteComponentManager - AsteroidTags *components.AsteroidComponentManager + AsteroidTags *components.AsteroidTagComponentManager Hp *components.HpComponentManager RigidBodies *stdcomponents.RigidBodyComponentManager Renderables *stdcomponents.RenderableComponentManager diff --git a/examples/new-api/entities/player.go b/examples/new-api/entities/player.go index a7b73020..1e29d42e 100644 --- a/examples/new-api/entities/player.go +++ b/examples/new-api/entities/player.go @@ -86,7 +86,7 @@ func CreatePlayer( player.Velocity = velocities.Create(entity, velocity) // Adding Tint component - tint := stdcomponents.Tint{R: 255, G: 255, B: 255, A: 255} + tint := stdcomponents.Tint{} player.Tint = tints.Create(entity, tint) // Adding sprite matrix component diff --git a/examples/new-api/entities/satellite.go b/examples/new-api/entities/satellite.go index 41a03857..50f7adcd 100644 --- a/examples/new-api/entities/satellite.go +++ b/examples/new-api/entities/satellite.go @@ -36,7 +36,7 @@ type CreateSatelliteManagers struct { RigidBodies *stdcomponents.RigidBodyComponentManager Velocities *stdcomponents.VelocityComponentManager Renderables *stdcomponents.RenderableComponentManager - SoundEffects *components.SoundEffectsComponentManager + SoundEffects *components.SoundEffectComponentManager } func CreateSatellite( diff --git a/examples/new-api/entities/space-spawner.go b/examples/new-api/entities/space-spawner.go index d9b012c6..fb2c8161 100644 --- a/examples/new-api/entities/space-spawner.go +++ b/examples/new-api/entities/space-spawner.go @@ -26,7 +26,7 @@ type CreateSpaceSpawnerManagers struct { EntityManager *ecs.EntityManager Positions *stdcomponents.PositionComponentManager Velocities *stdcomponents.VelocityComponentManager - SpaceSpawners *components.SpaceSpawnerComponentManager + SpaceSpawners *components.SpaceSpawnerTagComponentManager } func CreateSpaceSpawner( diff --git a/examples/new-api/entities/spaceship.go b/examples/new-api/entities/spaceship.go index 406596c8..9119f2a9 100644 --- a/examples/new-api/entities/spaceship.go +++ b/examples/new-api/entities/spaceship.go @@ -41,7 +41,7 @@ type CreateSpaceShipManagers struct { Hps *components.HpComponentManager Weapons *components.WeaponComponentManager SpaceshipIntents *components.SpaceshipIntentComponentManager - SoundEffects *components.SoundEffectsComponentManager + SoundEffects *components.SoundEffectComponentManager } func createMask(layers ...stdcomponents.CollisionLayer) (mask stdcomponents.CollisionMask) { diff --git a/examples/new-api/entities/wall.go b/examples/new-api/entities/wall.go index b5532ed9..316dc11e 100644 --- a/examples/new-api/entities/wall.go +++ b/examples/new-api/entities/wall.go @@ -36,7 +36,7 @@ type CreateWallManagers struct { RigidBodies *stdcomponents.RigidBodyComponentManager Renderables *stdcomponents.RenderableComponentManager Velocities *stdcomponents.VelocityComponentManager - WallTags *components.WallTagComponentManager + WallTags *components.WallComponentManager } func CreateWall( diff --git a/examples/new-api/instances/component-list.go b/examples/new-api/instances/component-list.go index daff7de5..335b2a18 100644 --- a/examples/new-api/instances/component-list.go +++ b/examples/new-api/instances/component-list.go @@ -56,16 +56,16 @@ type ComponentList struct { Controller components.ControllerComponentManager PlayerTag components.PlayerTagComponentManager BulletTag components.BulletTagComponentManager - AsteroidTag components.AsteroidComponentManager - SpaceSpawnerTag components.SpaceSpawnerComponentManager - Wall components.WallTagComponentManager + AsteroidTag components.AsteroidTagComponentManager + SpaceSpawnerTag components.SpaceSpawnerTagComponentManager + Wall components.WallComponentManager Weapon components.WeaponComponentManager SpaceshipIntent components.SpaceshipIntentComponentManager AsteroidSceneManager components.AsteroidSceneManagerComponentManager - SoundEffects components.SoundEffectsComponentManager + SoundEffects components.SoundEffectComponentManager SpatialAudio components.SpatialAudioComponentManager TextureRect components.TextureRectComponentManager - PrimitiveCircle components.PrimitiveCircleComponentManager + PrimitiveCircle components.TextureCircleComponentManager RenderVisible stdcomponents.RenderVisibleComponentManager } @@ -81,7 +81,7 @@ func NewComponentList() ComponentList { Tint: stdcomponents.NewTintComponentManager(), AnimationPlayer: stdcomponents.NewAnimationPlayerComponentManager(), AnimationState: stdcomponents.NewAnimationStateComponentManager(), - RLTexturePro: stdcomponents.NewRlTextureProComponentManager(), + RLTexturePro: stdcomponents.NewRLTextureProComponentManager(), Network: stdcomponents.NewNetworkComponentManager(), Renderable: stdcomponents.NewRenderableComponentManager(), RenderVisible: stdcomponents.NewRenderVisibleComponentManager(), @@ -104,7 +104,7 @@ func NewComponentList() ComponentList { CollisionCell: stdcomponents.NewCollisionCellComponentManager(), CollisionGridMember: stdcomponents.NewCollisionGridMemberComponentManager(), - Health: components.NewHealthComponentManager(), + Health: components.NewHpComponentManager(), Controller: components.NewControllerComponentManager(), PlayerTag: components.NewPlayerTagComponentManager(), BulletTag: components.NewBulletTagComponentManager(), @@ -114,7 +114,7 @@ func NewComponentList() ComponentList { Weapon: components.NewWeaponComponentManager(), SpaceshipIntent: components.NewSpaceshipIntentComponentManager(), AsteroidSceneManager: components.NewAsteroidSceneManagerComponentManager(), - SoundEffects: components.NewSoundEffectsComponentManager(), + SoundEffects: components.NewSoundEffectComponentManager(), SpatialAudio: components.NewSpatialAudioComponentManager(), TextureRect: components.NewTextureRectComponentManager(), PrimitiveCircle: components.NewTextureCircleComponentManager(), diff --git a/examples/new-api/systems/asterodd.go b/examples/new-api/systems/asterodd.go index 68bfdf84..1624e6da 100644 --- a/examples/new-api/systems/asterodd.go +++ b/examples/new-api/systems/asterodd.go @@ -48,16 +48,16 @@ type AssteroddSystem struct { CollisionGrids *stdcomponents.CollisionGridComponentManager PlayerTags *components.PlayerTagComponentManager - AsteroidTags *components.AsteroidComponentManager + AsteroidTags *components.AsteroidTagComponentManager BulletTags *components.BulletTagComponentManager Hps *components.HpComponentManager Weapons *components.WeaponComponentManager SpaceshipIntents *components.SpaceshipIntentComponentManager - SpaceSpawnerTags *components.SpaceSpawnerComponentManager + SpaceSpawnerTags *components.SpaceSpawnerTagComponentManager Collisions *stdcomponents.CollisionComponentManager SceneManager *components.AsteroidSceneManagerComponentManager - WallTags *components.WallTagComponentManager - SoundEffects *components.SoundEffectsComponentManager + WallTags *components.WallComponentManager + SoundEffects *components.SoundEffectComponentManager } func (s *AssteroddSystem) Init() { diff --git a/examples/new-api/systems/audio.go b/examples/new-api/systems/audio.go index e9d97c21..853beadd 100644 --- a/examples/new-api/systems/audio.go +++ b/examples/new-api/systems/audio.go @@ -32,7 +32,7 @@ func NewAudioSystem() AudioSystem { type AudioSystem struct { EntityManager *ecs.EntityManager - SoundEffects *components.SoundEffectsComponentManager + SoundEffects *components.SoundEffectComponentManager accSoundEffectsDelete [][]ecs.Entity numWorkers int Engine *core.Engine @@ -102,7 +102,7 @@ func NewAudioSettingsSystem() AudioSettingsSystem { type AudioSettingsSystem struct { EntityManager *ecs.EntityManager - SoundEffects *components.SoundEffectsComponentManager + SoundEffects *components.SoundEffectComponentManager SpatialAudio *components.SpatialAudioComponentManager } diff --git a/examples/new-api/systems/collision-handler.go b/examples/new-api/systems/collision-handler.go index f1cf620a..92122c55 100644 --- a/examples/new-api/systems/collision-handler.go +++ b/examples/new-api/systems/collision-handler.go @@ -31,20 +31,20 @@ type CollisionHandlerSystem struct { Collisions *stdcomponents.CollisionComponentManager Players *components.PlayerTagComponentManager PlayerTags *components.PlayerTagComponentManager - AsteroidTags *components.AsteroidComponentManager + AsteroidTags *components.AsteroidTagComponentManager BulletTags *components.BulletTagComponentManager Hps *components.HpComponentManager Weapons *components.WeaponComponentManager SpaceshipIntents *components.SpaceshipIntentComponentManager - SpaceSpawnerTags *components.SpaceSpawnerComponentManager + SpaceSpawnerTags *components.SpaceSpawnerTagComponentManager Positions *stdcomponents.PositionComponentManager Rotations *stdcomponents.RotationComponentManager Scales *stdcomponents.ScaleComponentManager Velocities *stdcomponents.VelocityComponentManager Sprites *stdcomponents.SpriteComponentManager BoxColliders *stdcomponents.BoxColliderComponentManager - WallTags *components.WallTagComponentManager - SoundEffects *components.SoundEffectsComponentManager + WallTags *components.WallComponentManager + SoundEffects *components.SoundEffectComponentManager } func (s *CollisionHandlerSystem) Init() {} diff --git a/examples/new-api/systems/debug-info.go b/examples/new-api/systems/debug-info.go index 126ab105..4c81c3fe 100644 --- a/examples/new-api/systems/debug-info.go +++ b/examples/new-api/systems/debug-info.go @@ -31,15 +31,15 @@ type DebugInfoSystem struct { BoxColliders *stdcomponents.BoxColliderComponentManager Cameras *stdcomponents.CameraComponentManager RenderTexture2D *stdcomponents.FrameBuffer2DComponentManager - TextureRect *components.TextureRectComponentManager Texture *stdcomponents.RLTextureProComponentManager Renderable *stdcomponents.RenderableComponentManager RenderOrders *stdcomponents.RenderOrderComponentManager AABBs *stdcomponents.AABBComponentManager - Circle *components.PrimitiveCircleComponentManager CollisionChunks *stdcomponents.CollisionChunkComponentManager Tints *stdcomponents.TintComponentManager BvhTrees *stdcomponents.BvhTreeComponentManager + TextureRect *components.TextureRectComponentManager + Circle *components.TextureCircleComponentManager debug bool children children diff --git a/examples/new-api/systems/hp.go b/examples/new-api/systems/hp.go index b6907ccb..d3c98e96 100644 --- a/examples/new-api/systems/hp.go +++ b/examples/new-api/systems/hp.go @@ -27,7 +27,7 @@ func NewHpSystem() HpSystem { type HpSystem struct { EntityManager *ecs.EntityManager Hps *components.HpComponentManager - Asteroids *components.AsteroidComponentManager + Asteroids *components.AsteroidTagComponentManager Players *components.PlayerTagComponentManager Hp *components.HpComponentManager AsteroidSceneManager *components.AsteroidSceneManagerComponentManager diff --git a/examples/new-api/systems/render-overlay.go b/examples/new-api/systems/render-overlay.go index 25e3ac1a..6e269887 100644 --- a/examples/new-api/systems/render-overlay.go +++ b/examples/new-api/systems/render-overlay.go @@ -225,7 +225,7 @@ func (s *RenderOverlaySystem) Run(dt time.Duration) bool { Y: a.Min.Y, Width: a.Max.X - a.Min.X, Height: a.Max.Y - a.Min.Y, - }, *tint) + }, tint.RGBA()) } return true }) diff --git a/examples/new-api/systems/space-spawner.go b/examples/new-api/systems/space-spawner.go index 36163858..ff72cb19 100644 --- a/examples/new-api/systems/space-spawner.go +++ b/examples/new-api/systems/space-spawner.go @@ -30,8 +30,8 @@ func NewSpaceSpawnerSystem() SpaceSpawnerSystem { type SpaceSpawnerSystem struct { EntityManager *ecs.EntityManager Positions *stdcomponents.PositionComponentManager - SpaceSpawners *components.SpaceSpawnerComponentManager - Asteroids *components.AsteroidComponentManager + SpaceSpawners *components.SpaceSpawnerTagComponentManager + Asteroids *components.AsteroidTagComponentManager Hp *components.HpComponentManager Sprites *stdcomponents.SpriteComponentManager CircleColliders *stdcomponents.CircleColliderComponentManager diff --git a/examples/new-api/systems/spaceship-intents.go b/examples/new-api/systems/spaceship-intents.go index ee95d448..ec0f8666 100644 --- a/examples/new-api/systems/spaceship-intents.go +++ b/examples/new-api/systems/spaceship-intents.go @@ -44,7 +44,7 @@ type SpaceshipIntentsSystem struct { RigidBodies *stdcomponents.RigidBodyComponentManager Weapons *components.WeaponComponentManager Hps *components.HpComponentManager - SoundEffects *components.SoundEffectsComponentManager + SoundEffects *components.SoundEffectComponentManager TexturePositionSmooth *stdcomponents.TexturePositionSmoothComponentManager Renderables *stdcomponents.RenderableComponentManager RenderOrders *stdcomponents.RenderOrderComponentManager diff --git a/examples/new-api/systems/spatial-audio.go b/examples/new-api/systems/spatial-audio.go index b03baa15..aad0be41 100644 --- a/examples/new-api/systems/spatial-audio.go +++ b/examples/new-api/systems/spatial-audio.go @@ -38,7 +38,7 @@ func NewSpatialAudioSystem() SpatialAudioSystem { type SpatialAudioSystem struct { EntityManager *ecs.EntityManager - SoundEffects *components.SoundEffectsComponentManager + SoundEffects *components.SoundEffectComponentManager Positions *stdcomponents.PositionComponentManager SpatialAudio *components.SpatialAudioComponentManager Cameras *stdcomponents.CameraComponentManager diff --git a/examples/new-api/systems/texture-circle.go b/examples/new-api/systems/texture-circle.go index 23c1c6f7..0c6d8f58 100644 --- a/examples/new-api/systems/texture-circle.go +++ b/examples/new-api/systems/texture-circle.go @@ -22,7 +22,7 @@ func NewTextureCircleSystem() TextureCircleSystem { } type TextureCircleSystem struct { - Circles *components.PrimitiveCircleComponentManager + Circles *components.TextureCircleComponentManager Textures *stdcomponents.RLTextureProComponentManager texture rl.RenderTexture2D diff --git a/go.mod b/go.mod index a9180438..74372117 100644 --- a/go.mod +++ b/go.mod @@ -75,3 +75,5 @@ require ( golang.org/x/text v0.25.0 google.golang.org/protobuf v1.36.1 ) + +tool gomp/cmd/component diff --git a/stdcomponents/aabb.go b/stdcomponents/aabb.go index fd3df068..95de97d1 100644 --- a/stdcomponents/aabb.go +++ b/stdcomponents/aabb.go @@ -15,13 +15,12 @@ Thank you for your support! package stdcomponents import ( - "gomp/pkg/ecs" "gomp/vectors" ) +//go:generate go tool component -std type AABB struct { - Min vectors.Vec2 - Max vectors.Vec2 + Min, Max vectors.Vec2 } func (a AABB) Center() vectors.Vec2 { @@ -36,9 +35,3 @@ func (a AABB) Rect() vectors.Rectangle { Height: a.Max.Y - a.Min.Y, } } - -type AABBComponentManager = ecs.ComponentManager[AABB] - -func NewAABBComponentManager() AABBComponentManager { - return ecs.NewComponentManager[AABB](AABBComponentId) -} diff --git a/stdcomponents/animation-player.go b/stdcomponents/animation-player.go index 420f92d7..c6bc158c 100644 --- a/stdcomponents/animation-player.go +++ b/stdcomponents/animation-player.go @@ -15,10 +15,10 @@ Thank you for your support! package stdcomponents import ( - "gomp/pkg/ecs" "time" ) +//go:generate go tool component -std type AnimationPlayer struct { First uint8 Last uint8 @@ -31,9 +31,3 @@ type AnimationPlayer struct { State AnimationState IsInitialized bool } - -type AnimationPlayerComponentManager = ecs.ComponentManager[AnimationPlayer] - -func NewAnimationPlayerComponentManager() AnimationPlayerComponentManager { - return ecs.NewComponentManager[AnimationPlayer](AnimationPlayerComponentId) -} diff --git a/stdcomponents/animation-state.go b/stdcomponents/animation-state.go index e88f2b9b..40a29f05 100644 --- a/stdcomponents/animation-state.go +++ b/stdcomponents/animation-state.go @@ -14,14 +14,5 @@ Thank you for your support! package stdcomponents -import ( - "gomp/pkg/ecs" -) - +//go:generate go tool component -std type AnimationState int32 - -type AnimationStateComponentManager = ecs.ComponentManager[AnimationState] - -func NewAnimationStateComponentManager() AnimationStateComponentManager { - return ecs.NewComponentManager[AnimationState](AnimationStateComponentId) -} diff --git a/stdcomponents/bvh-tree.go b/stdcomponents/bvh-tree.go index dd14c993..58460fba 100644 --- a/stdcomponents/bvh-tree.go +++ b/stdcomponents/bvh-tree.go @@ -33,12 +33,14 @@ type BvhLeaf struct { Id ecs.Entity } +//go:generate go tool component -std type BvhComponent struct { Entity ecs.Entity Aabb AABB Code uint64 } +//go:generate go tool component -std type BvhTree struct { Nodes ecs.PagedArray[BvhNode] AabbNodes ecs.PagedArray[AABB] @@ -317,9 +319,3 @@ func (t *BvhTree) mergeAABB(a, b *AABB) AABB { }, } } - -type BvhTreeComponentManager = ecs.ComponentManager[BvhTree] - -func NewBvhTreeComponentManager() BvhTreeComponentManager { - return ecs.NewComponentManager[BvhTree](BvhTreeComponentId) -} diff --git a/stdcomponents/camera.go b/stdcomponents/camera.go index 8bcfbe8d..3739b8be 100644 --- a/stdcomponents/camera.go +++ b/stdcomponents/camera.go @@ -16,7 +16,6 @@ package stdcomponents import ( rl "github.com/gen2brain/raylib-go/raylib" - "gomp/pkg/ecs" "gomp/vectors" "image/color" "math" @@ -38,6 +37,8 @@ type CameraLayer uint64 // Dst defines the camera's destination on the renderer screen // Layer defines the camera's layer, default is 0 - disabled // Order defines the camera's order, ascending order +// +//go:generate go tool component -std type Camera struct { rl.Camera2D Dst vectors.Rectangle // TODO: remove? @@ -115,9 +116,3 @@ func rotatePoint(p, pivot vectors.Vec2, angle float64) vectors.Vec2 { Y: rotatedY + pivot.Y, } } - -type CameraComponentManager = ecs.ComponentManager[Camera] - -func NewCameraComponentManager() CameraComponentManager { - return ecs.NewComponentManager[Camera](CameraComponentId) -} diff --git a/stdcomponents/colliders.go b/stdcomponents/colliders.go index 79127401..e6221cfb 100644 --- a/stdcomponents/colliders.go +++ b/stdcomponents/colliders.go @@ -15,7 +15,6 @@ Thank you for your support! package stdcomponents import ( - "gomp/pkg/ecs" "gomp/vectors" "math" ) @@ -45,6 +44,7 @@ const ( // Box Collider // =========================== +//go:generate go tool component -std type BoxCollider struct { WH vectors.Vec2 Offset vectors.Vec2 @@ -82,16 +82,11 @@ func (c *BoxCollider) GetSupport(direction vectors.Vec2, transform Transform2d) return rotated.Mul(transform.Scale).Add(transform.Position) } -type BoxColliderComponentManager = ecs.ComponentManager[BoxCollider] - -func NewBoxColliderComponentManager() BoxColliderComponentManager { - return ecs.NewComponentManager[BoxCollider](ColliderBoxComponentId) -} - // =========================== // Circle Collider // =========================== +//go:generate go tool component -std type CircleCollider struct { Radius float32 Layer CollisionLayer @@ -122,16 +117,11 @@ func (c *CircleCollider) GetSupport(direction vectors.Vec2, transform Transform2 return transform.Position.Add(radiusWithOffset) } -type CircleColliderComponentManager = ecs.ComponentManager[CircleCollider] - -func NewCircleColliderComponentManager() CircleColliderComponentManager { - return ecs.NewComponentManager[CircleCollider](ColliderCircleComponentId) -} - // =========================== // Polygon Collider // =========================== +//go:generate go tool component -std type PolygonCollider struct { Vertices []vectors.Vec2 Layer CollisionLayer @@ -157,16 +147,11 @@ func (c *PolygonCollider) GetSupport(direction vectors.Vec2, transform Transform return maxVertex } -type PolygonColliderComponentManager = ecs.ComponentManager[PolygonCollider] - -func NewPolygonColliderComponentManager() PolygonColliderComponentManager { - return ecs.NewComponentManager[PolygonCollider](PolygonColliderComponentId) -} - // =========================== // Generic Collider // =========================== +//go:generate go tool component -std type GenericCollider struct { Shape ColliderShape Layer CollisionLayer @@ -175,16 +160,9 @@ type GenericCollider struct { AllowSleep bool } -type GenericColliderComponentManager = ecs.ComponentManager[GenericCollider] - -func NewGenericColliderComponentManager() GenericColliderComponentManager { - return ecs.NewComponentManager[GenericCollider](GenericColliderComponentId) -} +// =========================== +// Collider Sleep State +// =========================== +//go:generate go tool component -std type ColliderSleepState struct{} - -type ColliderSleepStateComponentManager = ecs.ComponentManager[ColliderSleepState] - -func NewColliderSleepStateComponentManager() ColliderSleepStateComponentManager { - return ecs.NewComponentManager[ColliderSleepState](ColliderSleepStateComponentId) -} diff --git a/stdcomponents/collision-cell.go b/stdcomponents/collision-cell.go index 95f2c334..17ad85c1 100644 --- a/stdcomponents/collision-cell.go +++ b/stdcomponents/collision-cell.go @@ -96,6 +96,7 @@ func (ml *MemberList) Has(member ecs.Entity) bool { return ml.Lookup.Has(member) } +//go:generate go tool component -std type CollisionCell struct { Index SpatialCellIndex Layer CollisionLayer @@ -103,9 +104,3 @@ type CollisionCell struct { Size float32 Members *MemberList } - -type CollisionCellComponentManager = ecs.ComponentManager[CollisionCell] - -func NewCollisionCellComponentManager() CollisionCellComponentManager { - return ecs.NewComponentManager[CollisionCell](CollisionCellComponentId) -} diff --git a/stdcomponents/collision-chunk.go b/stdcomponents/collision-chunk.go index 6ae15b97..30318abc 100644 --- a/stdcomponents/collision-chunk.go +++ b/stdcomponents/collision-chunk.go @@ -14,17 +14,8 @@ Thank you for your support! package stdcomponents -import ( - "gomp/pkg/ecs" -) - +//go:generate go tool component -std type CollisionChunk struct { Size float32 Layer CollisionLayer } - -type CollisionChunkComponentManager = ecs.ComponentManager[CollisionChunk] - -func NewCollisionChunkComponentManager() CollisionChunkComponentManager { - return ecs.NewComponentManager[CollisionChunk](CollisionChunkComponentId) -} diff --git a/stdcomponents/collision-grid-member.go b/stdcomponents/collision-grid-member.go index 9f808150..064f776a 100644 --- a/stdcomponents/collision-grid-member.go +++ b/stdcomponents/collision-grid-member.go @@ -16,12 +16,7 @@ package stdcomponents import "gomp/pkg/ecs" +//go:generate go tool component -std type CollisionGridMember struct { Grid ecs.Entity } - -type CollisionGridMemberComponentManager = ecs.ComponentManager[CollisionGridMember] - -func NewCollisionGridMemberComponentManager() CollisionGridMemberComponentManager { - return ecs.NewComponentManager[CollisionGridMember](CollisionGridMemberComponentId) -} diff --git a/stdcomponents/collision-grid.go b/stdcomponents/collision-grid.go index 563f4a5e..0c7ec2c5 100644 --- a/stdcomponents/collision-grid.go +++ b/stdcomponents/collision-grid.go @@ -31,6 +31,8 @@ func NewCollisionGrid(collisionLayer CollisionLayer, cellSize float32) Collision } // CollisionGrid is a grid of cells that can be used for collision detection +// +//go:generate go tool component -std type CollisionGrid struct { Layer CollisionLayer // Layer of the grid CellSize float32 // Size of a cell @@ -80,9 +82,3 @@ func (g *CollisionGrid) CalculateSpatialHash(bb AABB) SpatialHash { Max: g.GetCellIndex(bb.Max), } } - -type CollisionGridComponentManager = ecs.ComponentManager[CollisionGrid] - -func NewCollisionGridComponentManager() CollisionGridComponentManager { - return ecs.NewComponentManager[CollisionGrid](CollisionGridComponentId) -} diff --git a/stdcomponents/collision.go b/stdcomponents/collision.go index 438f756c..b169c268 100644 --- a/stdcomponents/collision.go +++ b/stdcomponents/collision.go @@ -29,15 +29,11 @@ const ( ) // Collision Marks a proxy entity as representing a collision pair between E1 and E2 +// +//go:generate go tool component -std type Collision struct { E1, E2 ecs.Entity State CollisionState Normal vectors.Vec2 // Collision normal (direction) Depth float32 // Penetration depth } - -type CollisionComponentManager = ecs.ComponentManager[Collision] - -func NewCollisionComponentManager() CollisionComponentManager { - return ecs.NewComponentManager[Collision](CollisionComponentId) -} diff --git a/stdcomponents/flip.go b/stdcomponents/flip.go index 32775772..7e058c17 100644 --- a/stdcomponents/flip.go +++ b/stdcomponents/flip.go @@ -14,14 +14,7 @@ Thank you for your support! package stdcomponents -import "gomp/pkg/ecs" - +//go:generate go tool component -std type Flip struct { X, Y bool } - -type FlipComponentManager = ecs.ComponentManager[Flip] - -func NewFlipComponentManager() FlipComponentManager { - return ecs.NewComponentManager[Flip](FlipComponentId) -} diff --git a/stdcomponents/frame-buffer-2d.go b/stdcomponents/frame-buffer-2d.go index a7c053c1..d2021324 100644 --- a/stdcomponents/frame-buffer-2d.go +++ b/stdcomponents/frame-buffer-2d.go @@ -16,11 +16,11 @@ package stdcomponents import ( rl "github.com/gen2brain/raylib-go/raylib" - "gomp/pkg/ecs" "gomp/vectors" "image/color" ) +//go:generate go tool component -std type FrameBuffer2D struct { Position rl.Vector2 Frame rl.Rectangle @@ -40,9 +40,3 @@ func (d FrameBuffer2D) FrameRect() vectors.Rectangle { Height: d.Frame.Height, } } - -type FrameBuffer2DComponentManager = ecs.ComponentManager[FrameBuffer2D] - -func NewFrameBuffer2DComponentManager() FrameBuffer2DComponentManager { - return ecs.NewComponentManager[FrameBuffer2D](FrameBuffer2DComponentId) -} diff --git a/stdcomponents/ids.go b/stdcomponents/ids.go index 8184c516..888544d0 100644 --- a/stdcomponents/ids.go +++ b/stdcomponents/ids.go @@ -1,8 +1,4 @@ -/* -This Source Code Form is subject to the terms of the Mozilla -Public License, v. 2.0. If a copy of the MPL was not distributed -with this file, You can obtain one at http://mozilla.org/MPL/2.0/. -*/ +// Code generated by component generator; DO NOT EDIT. package stdcomponents @@ -10,45 +6,43 @@ import ( "gomp/pkg/ecs" ) -// StdLastComponentId MUST always be the last const ( InvalidComponentId ecs.ComponentId = iota - TransformComponentId - PositionComponentId - RotationComponentId - ScaleComponentId - FlipComponentId - VelocityComponentId - SpriteComponentId - SpriteSheetComponentId - SpriteMatrixComponentId - RLTextureProComponentId + AABBComponentId AnimationPlayerComponentId AnimationStateComponentId - TintComponentId - NetworkComponentId - RenderableComponentId - YSortComponentId - RenderOrderComponentId + BvhComponentComponentId + BvhTreeComponentId + CameraComponentId + BoxColliderComponentId + CircleColliderComponentId + PolygonColliderComponentId GenericColliderComponentId - ColliderBoxComponentId - ColliderCircleComponentId ColliderSleepStateComponentId - PolygonColliderComponentId - CollisionComponentId - SpatialHashComponentId - AABBComponentId - RigidBodyComponentId - BvhTreeComponentId - CollisionGridComponentId CollisionCellComponentId CollisionChunkComponentId CollisionGridMemberComponentId - s + CollisionGridComponentId + CollisionComponentId + FlipComponentId FrameBuffer2DComponentId - CameraComponentId + NetworkComponentId TexturePositionSmoothComponentId + PositionComponentId + RenderOrderComponentId RenderVisibleComponentId - - StdLastComponentId // StdLastComponentId MUST always be the last + RenderableComponentId + RigidBodyComponentId + RLTextureProComponentId + RotationComponentId + ScaleComponentId + SpatialHashComponentId + SpriteMatrixComponentId + SpriteSheetComponentId + SpriteComponentId + TintComponentId + Transform2dComponentId + VelocityComponentId + YSortComponentId + StdLastComponentId ) diff --git a/stdcomponents/managers.go b/stdcomponents/managers.go new file mode 100644 index 00000000..6b54a0b5 --- /dev/null +++ b/stdcomponents/managers.go @@ -0,0 +1,223 @@ +// Code generated by componentgen; DO NOT EDIT. + +package stdcomponents + +import ( + "gomp/pkg/ecs" +) + +type AABBComponentManager = ecs.ComponentManager[AABB] + +func NewAABBComponentManager() AABBComponentManager { + return ecs.NewComponentManager[AABB](AABBComponentId) +} + +type AnimationPlayerComponentManager = ecs.ComponentManager[AnimationPlayer] + +func NewAnimationPlayerComponentManager() AnimationPlayerComponentManager { + return ecs.NewComponentManager[AnimationPlayer](AnimationPlayerComponentId) +} + +type AnimationStateComponentManager = ecs.ComponentManager[AnimationState] + +func NewAnimationStateComponentManager() AnimationStateComponentManager { + return ecs.NewComponentManager[AnimationState](AnimationStateComponentId) +} + +type BvhComponentComponentManager = ecs.ComponentManager[BvhComponent] + +func NewBvhComponentComponentManager() BvhComponentComponentManager { + return ecs.NewComponentManager[BvhComponent](BvhComponentComponentId) +} + +type BvhTreeComponentManager = ecs.ComponentManager[BvhTree] + +func NewBvhTreeComponentManager() BvhTreeComponentManager { + return ecs.NewComponentManager[BvhTree](BvhTreeComponentId) +} + +type CameraComponentManager = ecs.ComponentManager[Camera] + +func NewCameraComponentManager() CameraComponentManager { + return ecs.NewComponentManager[Camera](CameraComponentId) +} + +type BoxColliderComponentManager = ecs.ComponentManager[BoxCollider] + +func NewBoxColliderComponentManager() BoxColliderComponentManager { + return ecs.NewComponentManager[BoxCollider](BoxColliderComponentId) +} + +type CircleColliderComponentManager = ecs.ComponentManager[CircleCollider] + +func NewCircleColliderComponentManager() CircleColliderComponentManager { + return ecs.NewComponentManager[CircleCollider](CircleColliderComponentId) +} + +type PolygonColliderComponentManager = ecs.ComponentManager[PolygonCollider] + +func NewPolygonColliderComponentManager() PolygonColliderComponentManager { + return ecs.NewComponentManager[PolygonCollider](PolygonColliderComponentId) +} + +type GenericColliderComponentManager = ecs.ComponentManager[GenericCollider] + +func NewGenericColliderComponentManager() GenericColliderComponentManager { + return ecs.NewComponentManager[GenericCollider](GenericColliderComponentId) +} + +type ColliderSleepStateComponentManager = ecs.ComponentManager[ColliderSleepState] + +func NewColliderSleepStateComponentManager() ColliderSleepStateComponentManager { + return ecs.NewComponentManager[ColliderSleepState](ColliderSleepStateComponentId) +} + +type CollisionCellComponentManager = ecs.ComponentManager[CollisionCell] + +func NewCollisionCellComponentManager() CollisionCellComponentManager { + return ecs.NewComponentManager[CollisionCell](CollisionCellComponentId) +} + +type CollisionChunkComponentManager = ecs.ComponentManager[CollisionChunk] + +func NewCollisionChunkComponentManager() CollisionChunkComponentManager { + return ecs.NewComponentManager[CollisionChunk](CollisionChunkComponentId) +} + +type CollisionGridMemberComponentManager = ecs.ComponentManager[CollisionGridMember] + +func NewCollisionGridMemberComponentManager() CollisionGridMemberComponentManager { + return ecs.NewComponentManager[CollisionGridMember](CollisionGridMemberComponentId) +} + +type CollisionGridComponentManager = ecs.ComponentManager[CollisionGrid] + +func NewCollisionGridComponentManager() CollisionGridComponentManager { + return ecs.NewComponentManager[CollisionGrid](CollisionGridComponentId) +} + +type CollisionComponentManager = ecs.ComponentManager[Collision] + +func NewCollisionComponentManager() CollisionComponentManager { + return ecs.NewComponentManager[Collision](CollisionComponentId) +} + +type FlipComponentManager = ecs.ComponentManager[Flip] + +func NewFlipComponentManager() FlipComponentManager { + return ecs.NewComponentManager[Flip](FlipComponentId) +} + +type FrameBuffer2DComponentManager = ecs.ComponentManager[FrameBuffer2D] + +func NewFrameBuffer2DComponentManager() FrameBuffer2DComponentManager { + return ecs.NewComponentManager[FrameBuffer2D](FrameBuffer2DComponentId) +} + +type NetworkComponentManager = ecs.ComponentManager[Network] + +func NewNetworkComponentManager() NetworkComponentManager { + return ecs.NewComponentManager[Network](NetworkComponentId) +} + +type TexturePositionSmoothComponentManager = ecs.ComponentManager[TexturePositionSmooth] + +func NewTexturePositionSmoothComponentManager() TexturePositionSmoothComponentManager { + return ecs.NewComponentManager[TexturePositionSmooth](TexturePositionSmoothComponentId) +} + +type PositionComponentManager = ecs.ComponentManager[Position] + +func NewPositionComponentManager() PositionComponentManager { + return ecs.NewComponentManager[Position](PositionComponentId) +} + +type RenderOrderComponentManager = ecs.ComponentManager[RenderOrder] + +func NewRenderOrderComponentManager() RenderOrderComponentManager { + return ecs.NewComponentManager[RenderOrder](RenderOrderComponentId) +} + +type RenderVisibleComponentManager = ecs.ComponentManager[RenderVisible] + +func NewRenderVisibleComponentManager() RenderVisibleComponentManager { + return ecs.NewComponentManager[RenderVisible](RenderVisibleComponentId) +} + +type RenderableComponentManager = ecs.ComponentManager[Renderable] + +func NewRenderableComponentManager() RenderableComponentManager { + return ecs.NewComponentManager[Renderable](RenderableComponentId) +} + +type RigidBodyComponentManager = ecs.ComponentManager[RigidBody] + +func NewRigidBodyComponentManager() RigidBodyComponentManager { + return ecs.NewComponentManager[RigidBody](RigidBodyComponentId) +} + +type RLTextureProComponentManager = ecs.ComponentManager[RLTexturePro] + +func NewRLTextureProComponentManager() RLTextureProComponentManager { + return ecs.NewComponentManager[RLTexturePro](RLTextureProComponentId) +} + +type RotationComponentManager = ecs.ComponentManager[Rotation] + +func NewRotationComponentManager() RotationComponentManager { + return ecs.NewComponentManager[Rotation](RotationComponentId) +} + +type ScaleComponentManager = ecs.ComponentManager[Scale] + +func NewScaleComponentManager() ScaleComponentManager { + return ecs.NewComponentManager[Scale](ScaleComponentId) +} + +type SpatialHashComponentManager = ecs.ComponentManager[SpatialHash] + +func NewSpatialHashComponentManager() SpatialHashComponentManager { + return ecs.NewComponentManager[SpatialHash](SpatialHashComponentId) +} + +type SpriteMatrixComponentManager = ecs.SharedComponentManager[SpriteMatrix] + +func NewSpriteMatrixComponentManager() SpriteMatrixComponentManager { + return ecs.NewSharedComponentManager[SpriteMatrix](SpriteMatrixComponentId) +} + +type SpriteSheetComponentManager = ecs.ComponentManager[SpriteSheet] + +func NewSpriteSheetComponentManager() SpriteSheetComponentManager { + return ecs.NewComponentManager[SpriteSheet](SpriteSheetComponentId) +} + +type SpriteComponentManager = ecs.ComponentManager[Sprite] + +func NewSpriteComponentManager() SpriteComponentManager { + return ecs.NewComponentManager[Sprite](SpriteComponentId) +} + +type TintComponentManager = ecs.ComponentManager[Tint] + +func NewTintComponentManager() TintComponentManager { + return ecs.NewComponentManager[Tint](TintComponentId) +} + +type Transform2dComponentManager = ecs.ComponentManager[Transform2d] + +func NewTransform2dComponentManager() Transform2dComponentManager { + return ecs.NewComponentManager[Transform2d](Transform2dComponentId) +} + +type VelocityComponentManager = ecs.ComponentManager[Velocity] + +func NewVelocityComponentManager() VelocityComponentManager { + return ecs.NewComponentManager[Velocity](VelocityComponentId) +} + +type YSortComponentManager = ecs.ComponentManager[YSort] + +func NewYSortComponentManager() YSortComponentManager { + return ecs.NewComponentManager[YSort](YSortComponentId) +} diff --git a/stdcomponents/network.go b/stdcomponents/network.go index 558db91b..903311c1 100644 --- a/stdcomponents/network.go +++ b/stdcomponents/network.go @@ -14,17 +14,11 @@ Thank you for your support! package stdcomponents -import "gomp/pkg/ecs" - type NetworkId int32 + +//go:generate go tool component -std type Network struct { Id NetworkId PatchIn []byte PatchOut []byte } - -type NetworkComponentManager = ecs.ComponentManager[Network] - -func NewNetworkComponentManager() NetworkComponentManager { - return ecs.NewComponentManager[Network](NetworkComponentId) -} diff --git a/stdcomponents/position-smooth.go b/stdcomponents/position-smooth.go index 5bcd7614..37d15ca2 100644 --- a/stdcomponents/position-smooth.go +++ b/stdcomponents/position-smooth.go @@ -14,10 +14,6 @@ Thank you for your support! package stdcomponents -import ( - "gomp/pkg/ecs" -) - const ( TexturePositionSmoothOff TexturePositionSmooth = iota TexturePositionSmoothLerp @@ -26,10 +22,6 @@ const ( // TexturePositionSmooth is the component tag for stdsystems.TexturePositionSmoothSystem // TODO: refactor or make stable realization +// +//go:generate go tool component -std type TexturePositionSmooth uint8 - -type TexturePositionSmoothComponentManager = ecs.ComponentManager[TexturePositionSmooth] - -func NewTexturePositionSmoothComponentManager() TexturePositionSmoothComponentManager { - return ecs.NewComponentManager[TexturePositionSmooth](TexturePositionSmoothComponentId) -} diff --git a/stdcomponents/position.go b/stdcomponents/position.go index d1bbed5b..cbf8ebb9 100644 --- a/stdcomponents/position.go +++ b/stdcomponents/position.go @@ -15,16 +15,10 @@ Thank you for your support! package stdcomponents import ( - "gomp/pkg/ecs" "gomp/vectors" ) +//go:generate go tool component -std type Position struct { XY vectors.Vec2 } - -type PositionComponentManager = ecs.ComponentManager[Position] - -func NewPositionComponentManager() PositionComponentManager { - return ecs.NewComponentManager[Position](PositionComponentId) -} diff --git a/stdcomponents/render-order.go b/stdcomponents/render-order.go index 68f0f638..6b1b527a 100644 --- a/stdcomponents/render-order.go +++ b/stdcomponents/render-order.go @@ -14,14 +14,7 @@ Thank you for your support! package stdcomponents -import "gomp/pkg/ecs" - +//go:generate go tool component -std type RenderOrder struct { CalculatedZ float32 } - -type RenderOrderComponentManager = ecs.ComponentManager[RenderOrder] - -func NewRenderOrderComponentManager() RenderOrderComponentManager { - return ecs.NewComponentManager[RenderOrder](RenderOrderComponentId) -} diff --git a/stdcomponents/render-visible.go b/stdcomponents/render-visible.go index 7ab8b444..302057f5 100644 --- a/stdcomponents/render-visible.go +++ b/stdcomponents/render-visible.go @@ -14,12 +14,5 @@ Thank you for your support! package stdcomponents -import "gomp/pkg/ecs" - +//go:generate go tool component -std type RenderVisible struct{} - -type RenderVisibleComponentManager = ecs.ComponentManager[RenderVisible] - -func NewRenderVisibleComponentManager() RenderVisibleComponentManager { - return ecs.NewComponentManager[RenderVisible](RenderVisibleComponentId) -} diff --git a/stdcomponents/renderable.go b/stdcomponents/renderable.go index 0d60fb1e..4ebba905 100644 --- a/stdcomponents/renderable.go +++ b/stdcomponents/renderable.go @@ -14,14 +14,13 @@ Thank you for your support! package stdcomponents -import "gomp/pkg/ecs" - const ( InvalidRenderableType RenderableType = iota SpriteRenderableType SpriteMatrixRenderableType ) +//go:generate go tool component -std type Renderable struct { CameraMask CameraLayer Type RenderableType @@ -29,9 +28,3 @@ type Renderable struct { } type RenderableType uint8 - -type RenderableComponentManager = ecs.ComponentManager[Renderable] - -func NewRenderableComponentManager() RenderableComponentManager { - return ecs.NewComponentManager[Renderable](RenderableComponentId) -} diff --git a/stdcomponents/rigidbody.go b/stdcomponents/rigidbody.go index 84ff8423..88d8a437 100644 --- a/stdcomponents/rigidbody.go +++ b/stdcomponents/rigidbody.go @@ -14,15 +14,8 @@ Thank you for your support! package stdcomponents -import "gomp/pkg/ecs" - +//go:generate go tool component -std type RigidBody struct { IsStatic bool Mass float32 } - -type RigidBodyComponentManager = ecs.ComponentManager[RigidBody] - -func NewRigidBodyComponentManager() RigidBodyComponentManager { - return ecs.NewComponentManager[RigidBody](RigidBodyComponentId) -} diff --git a/stdcomponents/rl-texture-pro.go b/stdcomponents/rl-texture-pro.go index b6050790..eef38b1a 100644 --- a/stdcomponents/rl-texture-pro.go +++ b/stdcomponents/rl-texture-pro.go @@ -16,11 +16,11 @@ package stdcomponents import ( rl "github.com/gen2brain/raylib-go/raylib" - "gomp/pkg/ecs" "gomp/vectors" "image/color" ) +//go:generate go tool component -std type RLTexturePro struct { Texture *rl.Texture2D Frame rl.Rectangle @@ -38,9 +38,3 @@ func (t *RLTexturePro) Rect() vectors.Rectangle { Height: t.Dest.Height, } } - -type RLTextureProComponentManager = ecs.ComponentManager[RLTexturePro] - -func NewRlTextureProComponentManager() RLTextureProComponentManager { - return ecs.NewComponentManager[RLTexturePro](RLTextureProComponentId) -} diff --git a/stdcomponents/rotation.go b/stdcomponents/rotation.go index d8856886..b9801e48 100644 --- a/stdcomponents/rotation.go +++ b/stdcomponents/rotation.go @@ -15,11 +15,11 @@ Thank you for your support! package stdcomponents import ( - "gomp/pkg/ecs" "gomp/vectors" "math" ) +//go:generate go tool component -std type Rotation struct { Angle vectors.Radians } @@ -32,9 +32,3 @@ func (r Rotation) SetFromDegrees(deg float64) Rotation { func (r Rotation) Degrees() float64 { return r.Angle * 180 / math.Pi } - -type RotationComponentManager = ecs.ComponentManager[Rotation] - -func NewRotationComponentManager() RotationComponentManager { - return ecs.NewComponentManager[Rotation](RotationComponentId) -} diff --git a/stdcomponents/scale.go b/stdcomponents/scale.go index 9d2925bc..d628c2d9 100644 --- a/stdcomponents/scale.go +++ b/stdcomponents/scale.go @@ -15,16 +15,10 @@ Thank you for your support! package stdcomponents import ( - "gomp/pkg/ecs" "gomp/vectors" ) +//go:generate go tool component -std type Scale struct { XY vectors.Vec2 } - -type ScaleComponentManager = ecs.ComponentManager[Scale] - -func NewScaleComponentManager() ScaleComponentManager { - return ecs.NewComponentManager[Scale](ScaleComponentId) -} diff --git a/stdcomponents/spatial-index.go b/stdcomponents/spatial-index.go index 601e4b27..0b34edfb 100644 --- a/stdcomponents/spatial-index.go +++ b/stdcomponents/spatial-index.go @@ -14,17 +14,8 @@ Thank you for your support! package stdcomponents -import ( - "gomp/pkg/ecs" -) - +//go:generate go tool component -std type SpatialHash struct { Min SpatialCellIndex Max SpatialCellIndex } - -type SpatialHashComponentManager = ecs.ComponentManager[SpatialHash] - -func NewSpatialHashComponentManager() SpatialHashComponentManager { - return ecs.NewComponentManager[SpatialHash](SpatialHashComponentId) -} diff --git a/stdcomponents/sprite-matrix.go b/stdcomponents/sprite-matrix.go index e2afa6a3..3b89f7dd 100644 --- a/stdcomponents/sprite-matrix.go +++ b/stdcomponents/sprite-matrix.go @@ -16,7 +16,6 @@ package stdcomponents import ( rl "github.com/gen2brain/raylib-go/raylib" - "gomp/pkg/ecs" "gomp/vectors" ) @@ -28,6 +27,7 @@ type SpriteMatrixAnimation struct { Loop bool } +//go:generate go tool component -std -shared type SpriteMatrix struct { Texture *rl.Texture2D Origin rl.Vector2 @@ -36,9 +36,3 @@ type SpriteMatrix struct { Animations []SpriteMatrixAnimation Rotation vectors.Radians } - -type SpriteMatrixComponentManager = ecs.SharedComponentManager[SpriteMatrix] - -func NewSpriteMatrixComponentManager() SpriteMatrixComponentManager { - return ecs.NewSharedComponentManager[SpriteMatrix](SpriteMatrixComponentId) -} diff --git a/stdcomponents/sprite-sheet.go b/stdcomponents/sprite-sheet.go index 3017e6f5..1608dd91 100644 --- a/stdcomponents/sprite-sheet.go +++ b/stdcomponents/sprite-sheet.go @@ -16,9 +16,9 @@ package stdcomponents import ( rl "github.com/gen2brain/raylib-go/raylib" - "gomp/pkg/ecs" ) +//go:generate go tool component -std type SpriteSheet struct { Texture *rl.Texture2D Frame rl.Rectangle @@ -27,9 +27,3 @@ type SpriteSheet struct { FPS int32 Vertical bool } - -type SpriteSheetComponentManager = ecs.ComponentManager[SpriteSheet] - -func NewSpriteSheetComponentManager() SpriteSheetComponentManager { - return ecs.NewComponentManager[SpriteSheet](SpriteSheetComponentId) -} diff --git a/stdcomponents/sprite.go b/stdcomponents/sprite.go index 80e9ead4..086ce307 100644 --- a/stdcomponents/sprite.go +++ b/stdcomponents/sprite.go @@ -16,19 +16,13 @@ package stdcomponents import ( rl "github.com/gen2brain/raylib-go/raylib" - "gomp/pkg/ecs" "image/color" ) +//go:generate go tool component -std type Sprite struct { Texture *rl.Texture2D Frame rl.Rectangle Origin rl.Vector2 Tint color.RGBA } - -type SpriteComponentManager = ecs.ComponentManager[Sprite] - -func NewSpriteComponentManager() SpriteComponentManager { - return ecs.NewComponentManager[Sprite](SpriteComponentId) -} diff --git a/stdcomponents/tint.go b/stdcomponents/tint.go index 9b26769b..b422f75e 100644 --- a/stdcomponents/tint.go +++ b/stdcomponents/tint.go @@ -15,14 +15,14 @@ Thank you for your support! package stdcomponents import ( - "gomp/pkg/ecs" "image/color" ) -type Tint = color.RGBA // TODO: remove type alias - -type TintComponentManager = ecs.ComponentManager[Tint] +//go:generate go tool component -std +type Tint struct { + R, G, B, A uint8 +} -func NewTintComponentManager() TintComponentManager { - return ecs.NewComponentManager[Tint](TintComponentId) +func (t Tint) RGBA() color.RGBA { + return color.RGBA{t.R, t.G, t.B, t.A} } diff --git a/stdcomponents/transform.go b/stdcomponents/transform.go index 7dd3e18f..0028402b 100644 --- a/stdcomponents/transform.go +++ b/stdcomponents/transform.go @@ -15,18 +15,12 @@ Thank you for your support! package stdcomponents import ( - "gomp/pkg/ecs" "gomp/vectors" ) +//go:generate go tool component -std type Transform2d struct { Position vectors.Vec2 Rotation vectors.Radians Scale vectors.Vec2 } - -type TransformComponentManager = ecs.ComponentManager[Transform2d] - -func NewTransformComponentManager() TransformComponentManager { - return ecs.NewComponentManager[Transform2d](TransformComponentId) -} diff --git a/stdcomponents/velocity.go b/stdcomponents/velocity.go index 24098f75..e418a056 100644 --- a/stdcomponents/velocity.go +++ b/stdcomponents/velocity.go @@ -15,10 +15,10 @@ Thank you for your support! package stdcomponents import ( - "gomp/pkg/ecs" "gomp/vectors" ) +//go:generate go tool component -std type Velocity struct { X, Y float32 } @@ -31,9 +31,3 @@ func (v *Velocity) SetVec2(velocity vectors.Vec2) { v.X = velocity.X v.Y = velocity.Y } - -type VelocityComponentManager = ecs.ComponentManager[Velocity] - -func NewVelocityComponentManager() VelocityComponentManager { - return ecs.NewComponentManager[Velocity](VelocityComponentId) -} diff --git a/stdcomponents/ysort.go b/stdcomponents/ysort.go index 1eef5b57..b5633fcb 100644 --- a/stdcomponents/ysort.go +++ b/stdcomponents/ysort.go @@ -14,13 +14,6 @@ Thank you for your support! package stdcomponents -import "gomp/pkg/ecs" - +//go:generate go tool component -std type YSort struct { } - -type YSortComponentManager = ecs.ComponentManager[YSort] - -func NewYSortComponentManager() YSortComponentManager { - return ecs.NewComponentManager[YSort](YSortComponentId) -} diff --git a/stdsystems/collision-setup.go b/stdsystems/collision-setup.go index ed3b9dd9..6bacc7eb 100644 --- a/stdsystems/collision-setup.go +++ b/stdsystems/collision-setup.go @@ -22,7 +22,6 @@ import ( "gomp/pkg/ecs" "gomp/pkg/worker" "gomp/stdcomponents" - "image/color" "math/rand" "time" @@ -209,7 +208,7 @@ func (s *CollisionSetupSystem) setup() { XY: cellIndex.ToVec2().Scale(grid.CellSize), }) const colorbase uint8 = 120 - s.Tints.Create(cellEntity, color.RGBA{ + s.Tints.Create(cellEntity, stdcomponents.Tint{ R: colorbase + uint8(rand.Intn(int(255-colorbase))), G: colorbase + uint8(rand.Intn(int(255-colorbase))), B: colorbase + uint8(rand.Intn(int(255-colorbase))),