43 lines
933 B
Go
43 lines
933 B
Go
package native
|
|
|
|
import "aego/sdk"
|
|
|
|
type Rotator struct {
|
|
Speed float32 `aego:"speed,doc=radians per second"`
|
|
}
|
|
|
|
type rotatorSystem struct{}
|
|
|
|
func (rotatorSystem) Run(ctx *sdk.Context) {
|
|
s := sdk.SceneOf(ctx)
|
|
if s == nil {
|
|
return
|
|
}
|
|
dt := float32(ctx.Dt)
|
|
sdk.Query1[Rotator](s).Each(func(n sdk.NodeHandle, r *Rotator) {
|
|
local := s.Local(n)
|
|
s.SetRotation(n, local.Rotation+r.Speed*dt)
|
|
})
|
|
}
|
|
|
|
type Module struct{}
|
|
|
|
func (Module) Info() sdk.ModuleInfo {
|
|
return sdk.ModuleInfo{ID: "rotator", Version: "0.1.0"}
|
|
}
|
|
|
|
func (Module) Register(r *sdk.Registry) error {
|
|
if err := sdk.Component[Rotator](r, sdk.Name("game.Rotator")).
|
|
Default(func() Rotator { return Rotator{Speed: 1} }).
|
|
Script("speed").
|
|
Err(); err != nil {
|
|
return err
|
|
}
|
|
r.System(sdk.SystemDesc{ID: "rotator.spin", Phase: sdk.PhaseUpdate, System: rotatorSystem{}})
|
|
return registerSpinner(r)
|
|
}
|
|
|
|
func Modules() []sdk.Module {
|
|
return []sdk.Module{Module{}}
|
|
}
|