call it VisitFunc

This commit is contained in:
Josh Deprez 2021-09-29 13:50:05 +10:00
parent 3ad1cf8d4d
commit 67367b6cd1
16 changed files with 25 additions and 19 deletions

View file

@ -52,7 +52,7 @@ func (b *Billboard) Prepare(g *Game) error {
} }
// Scan visits &b.Src. // Scan visits &b.Src.
func (b *Billboard) Scan(visit func(interface{}) error) error { func (b *Billboard) Scan(visit VisitFunc) error {
return visit(&b.Src) return visit(&b.Src)
} }

View file

@ -86,7 +86,7 @@ func (c *Camera) Prepare(game *Game) error {
} }
// Scan visits c.Child. // Scan visits c.Child.
func (c *Camera) Scan(visit func(interface{}) error) error { func (c *Camera) Scan(visit VisitFunc) error {
return visit(c.Child) return visit(c.Child)
} }

View file

@ -64,7 +64,7 @@ func (c *Container) Prepare(*Game) error {
} }
// Scan visits every non-nil component in the container. // Scan visits every non-nil component in the container.
func (c *Container) Scan(visit func(interface{}) error) error { func (c *Container) Scan(visit VisitFunc) error {
for _, x := range c.items { for _, x := range c.items {
if x != nil { if x != nil {
if err := visit(x); err != nil { if err := visit(x); err != nil {

View file

@ -121,7 +121,7 @@ func (d *DrawDAG) Prepare(game *Game) error {
} }
// Scan visits d.Child. // Scan visits d.Child.
func (d *DrawDAG) Scan(visit func(interface{}) error) error { func (d *DrawDAG) Scan(visit VisitFunc) error {
return visit(d.Child) return visit(d.Child)
} }

View file

@ -63,7 +63,7 @@ func (d *DrawDFS) drawRecursive(component interface{}, screen *ebiten.Image, opt
} }
// Scan visits d.Child. // Scan visits d.Child.
func (d *DrawDFS) Scan(visit func(interface{}) error) error { func (d *DrawDFS) Scan(visit VisitFunc) error {
return visit(d.Child) return visit(d.Child)
} }

View file

@ -162,7 +162,7 @@ func (g *Game) ReversePath(component interface{}) []interface{} {
// //
// visitPre is visited before descendants, while visitPost is visited after // visitPre is visited before descendants, while visitPost is visited after
// descendants. nil visitors are ignored. // descendants. nil visitors are ignored.
func (g *Game) Query(ancestor interface{}, behaviour reflect.Type, visitPre, visitPost func(interface{}) error) error { func (g *Game) Query(ancestor interface{}, behaviour reflect.Type, visitPre, visitPost VisitFunc) error {
pi := reflect.TypeOf(ancestor).Implements(behaviour) pi := reflect.TypeOf(ancestor).Implements(behaviour)
if pi && visitPre != nil { if pi && visitPre != nil {
if err := visitPre(ancestor); err != nil { if err := visitPre(ancestor); err != nil {
@ -192,7 +192,7 @@ func (g *Game) Query(ancestor interface{}, behaviour reflect.Type, visitPre, vis
} }
// Scan visits g.Root. // Scan visits g.Root.
func (g *Game) Scan(visit func(interface{}) error) error { func (g *Game) Scan(visit VisitFunc) error {
return visit(g.Root) return visit(g.Root)
} }
@ -425,6 +425,12 @@ func concatOpts(a, b ebiten.DrawImageOptions) ebiten.DrawImageOptions {
return a return a
} }
// VisitFunc callbacks are either provided or called by various Game functions.
// For example, Query takes two VisitFuncs that are called for each result, and
// Scan is given a VisitFunc that should be called with each component. For
// recursive operations, return Skip for components that should be skipped.
type VisitFunc func(interface{}) error
// Skip is an "error" value that can be returned from visitor callbacks. It // Skip is an "error" value that can be returned from visitor callbacks. It
// tells recursive methods of Game to skip processing the current item and its // tells recursive methods of Game to skip processing the current item and its
// descendants, but will otherwise continue processing. // descendants, but will otherwise continue processing.

View file

@ -149,7 +149,7 @@ type Saver interface {
// Scan should visit each immediate subcomponent, aborting early if an error is // Scan should visit each immediate subcomponent, aborting early if an error is
// returned from the visitor. // returned from the visitor.
type Scanner interface { type Scanner interface {
Scan(visit func(interface{}) error) error Scan(visit VisitFunc) error
} }
// Transformer components can provide draw options to apply to themselves and // Transformer components can provide draw options to apply to themselves and

View file

@ -39,7 +39,7 @@ func (p *Parallax) Prepare(game *Game) error {
} }
// Scan visits p.Child. // Scan visits p.Child.
func (p *Parallax) Scan(visit func(interface{}) error) error { func (p *Parallax) Scan(visit VisitFunc) error {
return visit(p.Child) return visit(p.Child)
} }

View file

@ -113,7 +113,7 @@ func (m *PrismMap) Prepare(g *Game) error {
} }
// Scan visits &m.Sheet and all Prisms. // Scan visits &m.Sheet and all Prisms.
func (m *PrismMap) Scan(visit func(interface{}) error) error { func (m *PrismMap) Scan(visit VisitFunc) error {
if err := visit(&m.Sheet); err != nil { if err := visit(&m.Sheet); err != nil {
return err return err
} }

View file

@ -39,7 +39,7 @@ type Scene struct {
} }
// Scan visits s.Child. // Scan visits s.Child.
func (s *Scene) Scan(visit func(interface{}) error) error { func (s *Scene) Scan(visit VisitFunc) error {
return visit(s.Child) return visit(s.Child)
} }

View file

@ -47,7 +47,7 @@ func (s *Sheet) Prepare(*Game) error {
} }
// Scan visits &s.Src. // Scan visits &s.Src.
func (s *Sheet) Scan(visit func(interface{}) error) error { func (s *Sheet) Scan(visit VisitFunc) error {
return visit(&s.Src) return visit(&s.Src)
} }

View file

@ -41,7 +41,7 @@ func (s *Sprite) Draw(screen *ebiten.Image, opts *ebiten.DrawImageOptions) {
} }
// Scan visits &s.Actor and &s.Sheet. // Scan visits &s.Actor and &s.Sheet.
func (s *Sprite) Scan(visit func(interface{}) error) error { func (s *Sprite) Scan(visit VisitFunc) error {
if err := visit(&s.Actor); err != nil { if err := visit(&s.Actor); err != nil {
return err return err
} }

View file

@ -100,7 +100,7 @@ func (t *Tilemap) Load(fs.FS) error {
} }
// Scan visits &t.Sheet and all tiles. // Scan visits &t.Sheet and all tiles.
func (t *Tilemap) Scan(visit func(interface{}) error) error { func (t *Tilemap) Scan(visit VisitFunc) error {
if err := visit(&t.Sheet); err != nil { if err := visit(&t.Sheet); err != nil {
return err return err
} }
@ -155,6 +155,6 @@ type AnimatedTile struct {
func (a *AnimatedTile) Cell() int { return a.anim.Cell() } func (a *AnimatedTile) Cell() int { return a.anim.Cell() }
// Scan visits a.anim. // Scan visits a.anim.
func (a *AnimatedTile) Scan(visit func(interface{}) error) error { func (a *AnimatedTile) Scan(visit VisitFunc) error {
return visit(a.anim) return visit(a.anim)
} }

View file

@ -61,7 +61,7 @@ func (w *Wall) CollidesWith(b geom.Box) bool {
} }
// Scan visits &w.Sheet and all WallUnits. // Scan visits &w.Sheet and all WallUnits.
func (w *Wall) Scan(visit func(interface{}) error) error { func (w *Wall) Scan(visit VisitFunc) error {
if err := visit(&w.Sheet); err != nil { if err := visit(&w.Sheet); err != nil {
return err return err
} }
@ -106,7 +106,7 @@ func (u *WallUnit) Draw(screen *ebiten.Image, opts *ebiten.DrawImageOptions) {
} }
// Scan visits u.Tile. // Scan visits u.Tile.
func (u *WallUnit) Scan(visit func(interface{}) error) error { func (u *WallUnit) Scan(visit VisitFunc) error {
return visit(u.Tile) return visit(u.Tile)
} }

View file

@ -259,7 +259,7 @@ func (aw *Awakeman) Prepare(game *engine.Game) error {
return nil return nil
} }
func (aw *Awakeman) Scan(visit func(interface{}) error) error { func (aw *Awakeman) Scan(visit engine.VisitFunc) error {
return visit(&aw.Sprite) return visit(&aw.Sprite)
} }

View file

@ -55,7 +55,7 @@ func NewBubble(pos geom.Int3) *Bubble {
} }
} }
func (b *Bubble) Scan(visit func(interface{}) error) error { func (b *Bubble) Scan(visit engine.VisitFunc) error {
return visit(&b.Sprite) return visit(&b.Sprite)
} }