Scan uses visitor pattern
This commit is contained in:
parent
fe2558b2c1
commit
6d0838a369
15 changed files with 17 additions and 58 deletions
|
@ -51,12 +51,12 @@ func (b *Billboard) Prepare(g *Game) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scan returns a slice containing Src.
|
// Scan visits &b.Src.
|
||||||
//func (b *Billboard) Scan() []interface{} { return []interface{}{&b.Src} }
|
|
||||||
func (b *Billboard) Scan(visit func(interface{}) error) error {
|
func (b *Billboard) Scan(visit func(interface{}) error) error {
|
||||||
return visit(&b.Src)
|
return visit(&b.Src)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// String returns "Billboard@(b.Pos)".
|
||||||
func (b *Billboard) String() string {
|
func (b *Billboard) String() string {
|
||||||
return fmt.Sprintf("Billboard@%v", b.Pos)
|
return fmt.Sprintf("Billboard@%v", b.Pos)
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,8 +85,7 @@ func (c *Camera) Prepare(game *Game) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scan returns s.Child.
|
// Scan visits c.Child.
|
||||||
//func (c *Camera) Scan() []interface{} { return []interface{}{c.Child} }
|
|
||||||
func (c *Camera) Scan(visit func(interface{}) error) error {
|
func (c *Camera) Scan(visit func(interface{}) error) error {
|
||||||
return visit(c.Child)
|
return visit(c.Child)
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,11 +5,10 @@ var _ interface {
|
||||||
Scanner
|
Scanner
|
||||||
} = &Container{}
|
} = &Container{}
|
||||||
|
|
||||||
// Container contains many components.
|
// Container contains many components, in order.
|
||||||
type Container []interface{}
|
type Container []interface{}
|
||||||
|
|
||||||
// Scan returns c.
|
// Scan visits every component in the container.
|
||||||
//func (c Container) Scan() []interface{} { return c }
|
|
||||||
func (c Container) Scan(visit func(interface{}) error) error {
|
func (c Container) Scan(visit func(interface{}) error) error {
|
||||||
for _, x := range c {
|
for _, x := range c {
|
||||||
if err := visit(x); err != nil {
|
if err := visit(x); err != nil {
|
||||||
|
|
|
@ -114,7 +114,7 @@ func (d *DrawDAG) Prepare(game *Game) error {
|
||||||
return d.Register(d, nil)
|
return d.Register(d, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
//func (d *DrawDAG) Scan() []interface{} { return []interface{}{d.Child} }
|
// Scan visits d.Child.
|
||||||
func (d *DrawDAG) Scan(visit func(interface{}) error) error {
|
func (d *DrawDAG) Scan(visit func(interface{}) error) error {
|
||||||
return visit(d.Child)
|
return visit(d.Child)
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,7 @@ func (d *DrawDFS) draw(component interface{}, screen *ebiten.Image, opts ebiten.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//func (d *DrawDFS) Scan() []interface{} { return []interface{}{d.Child} }
|
// Scan visits d.Child.
|
||||||
func (d *DrawDFS) Scan(visit func(interface{}) error) error {
|
func (d *DrawDFS) Scan(visit func(interface{}) error) error {
|
||||||
return visit(d.Child)
|
return visit(d.Child)
|
||||||
}
|
}
|
||||||
|
|
|
@ -170,8 +170,7 @@ func (g *Game) Query(ancestor interface{}, behaviour reflect.Type) map[interface
|
||||||
return g.byAB[abKey{ancestor, behaviour}]
|
return g.byAB[abKey{ancestor, behaviour}]
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scan returns g.Root.
|
// Scan visits g.Root.
|
||||||
//func (g *Game) Scan() []interface{} { return []interface{}{g.Root} }
|
|
||||||
func (g *Game) Scan(visit func(interface{}) error) error {
|
func (g *Game) Scan(visit func(interface{}) error) error {
|
||||||
return visit(g.Root)
|
return visit(g.Root)
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,8 +38,7 @@ func (p *Parallax) Prepare(game *Game) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scan returns the child component.
|
// Scan visits p.Child.
|
||||||
//func (p *Parallax) Scan() []interface{} { return []interface{}{p.Child} }
|
|
||||||
func (p *Parallax) Scan(visit func(interface{}) error) error {
|
func (p *Parallax) Scan(visit func(interface{}) error) error {
|
||||||
return visit(p.Child)
|
return visit(p.Child)
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,15 +112,7 @@ func (m *PrismMap) Prepare(g *Game) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scan returns the Sheet and all the Prisms.
|
// Scan visits &m.Sheet and all Prisms.
|
||||||
/*func (m *PrismMap) Scan() []interface{} {
|
|
||||||
c := make([]interface{}, 1, len(m.Map)+1)
|
|
||||||
c[0] = &m.Sheet
|
|
||||||
for _, prism := range m.Map {
|
|
||||||
c = append(c, prism)
|
|
||||||
}
|
|
||||||
return c
|
|
||||||
}*/
|
|
||||||
func (m *PrismMap) Scan(visit func(interface{}) error) error {
|
func (m *PrismMap) Scan(visit func(interface{}) error) error {
|
||||||
if err := visit(&m.Sheet); err != nil {
|
if err := visit(&m.Sheet); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -38,7 +38,7 @@ type Scene struct {
|
||||||
Hides
|
Hides
|
||||||
}
|
}
|
||||||
|
|
||||||
//func (s *Scene) Scan() []interface{} { return []interface{}{s.Child} }
|
// Scan visits s.Child.
|
||||||
func (s *Scene) Scan(visit func(interface{}) error) error {
|
func (s *Scene) Scan(visit func(interface{}) error) error {
|
||||||
return visit(s.Child)
|
return visit(s.Child)
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,8 +46,7 @@ func (s *Sheet) Prepare(*Game) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scan returns the Src.
|
// Scan visits &s.Src.
|
||||||
//func (s *Sheet) Scan() []interface{} { return []interface{}{&s.Src} }
|
|
||||||
func (s *Sheet) Scan(visit func(interface{}) error) error {
|
func (s *Sheet) Scan(visit func(interface{}) error) error {
|
||||||
return visit(&s.Src)
|
return visit(&s.Src)
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,13 +40,7 @@ func (s *Sprite) Draw(screen *ebiten.Image, opts *ebiten.DrawImageOptions) {
|
||||||
screen.DrawImage(s.Sheet.SubImage(s.anim.Cell()), opts)
|
screen.DrawImage(s.Sheet.SubImage(s.anim.Cell()), opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scan returns the Actor and the Sheet.
|
// Scan visits &s.Actor and &s.Sheet.
|
||||||
/*func (s *Sprite) Scan() []interface{} {
|
|
||||||
return []interface{}{
|
|
||||||
&s.Actor,
|
|
||||||
&s.Sheet,
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
func (s *Sprite) Scan(visit func(interface{}) error) error {
|
func (s *Sprite) Scan(visit func(interface{}) error) error {
|
||||||
if err := visit(&s.Actor); err != nil {
|
if err := visit(&s.Actor); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -99,15 +99,7 @@ func (t *Tilemap) Load(fs.FS) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scan returns a slice containing Src and all non-nil tiles.
|
// Scan visits &t.Sheet and all tiles.
|
||||||
/*func (t *Tilemap) Scan() []interface{} {
|
|
||||||
c := make([]interface{}, 1, len(t.Map)+1)
|
|
||||||
c[0] = &t.Sheet
|
|
||||||
for _, tile := range t.Map {
|
|
||||||
c = append(c, tile)
|
|
||||||
}
|
|
||||||
return c
|
|
||||||
}*/
|
|
||||||
func (t *Tilemap) Scan(visit func(interface{}) error) error {
|
func (t *Tilemap) Scan(visit func(interface{}) error) error {
|
||||||
if err := visit(&t.Sheet); err != nil {
|
if err := visit(&t.Sheet); err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -162,8 +154,7 @@ type AnimatedTile struct {
|
||||||
|
|
||||||
func (a *AnimatedTile) Cell() int { return a.anim.Cell() }
|
func (a *AnimatedTile) Cell() int { return a.anim.Cell() }
|
||||||
|
|
||||||
// Scan returns a.anim.
|
// Scan visits a.anim.
|
||||||
//func (a *AnimatedTile) Scan() []interface{} { return []interface{}{a.anim} }
|
|
||||||
func (a *AnimatedTile) Scan(visit func(interface{}) error) error {
|
func (a *AnimatedTile) Scan(visit func(interface{}) error) error {
|
||||||
return visit(a.anim)
|
return visit(a.anim)
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,17 +60,7 @@ func (w *Wall) CollidesWith(b geom.Box) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scan returns the Sheet and all WallUnits.
|
// Scan visits &w.Sheet and all WallUnits.
|
||||||
/*
|
|
||||||
func (w *Wall) Scan() []interface{} {
|
|
||||||
c := make([]interface{}, 1, len(w.Units)+1)
|
|
||||||
c[0] = &w.Sheet
|
|
||||||
for _, unit := range w.Units {
|
|
||||||
c = append(c, unit)
|
|
||||||
}
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
func (w *Wall) Scan(visit func(interface{}) error) error {
|
func (w *Wall) Scan(visit func(interface{}) error) error {
|
||||||
if err := visit(&w.Sheet); err != nil {
|
if err := visit(&w.Sheet); err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -115,8 +105,7 @@ func (u *WallUnit) Draw(screen *ebiten.Image, opts *ebiten.DrawImageOptions) {
|
||||||
screen.DrawImage(u.wall.Sheet.SubImage(u.Tile.Cell()), opts)
|
screen.DrawImage(u.wall.Sheet.SubImage(u.Tile.Cell()), opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scan returns the Tile.
|
// Scan visits u.Tile.
|
||||||
//func (u *WallUnit) Scan() []interface{} { return []interface{}{u.Tile} }
|
|
||||||
func (u *WallUnit) Scan(visit func(interface{}) error) error {
|
func (u *WallUnit) Scan(visit func(interface{}) error) error {
|
||||||
return visit(u.Tile)
|
return visit(u.Tile)
|
||||||
}
|
}
|
||||||
|
|
|
@ -270,7 +270,6 @@ func (aw *Awakeman) Prepare(game *engine.Game) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
//func (aw *Awakeman) Scan() []interface{} { return []interface{}{&aw.Sprite} }
|
|
||||||
func (aw *Awakeman) Scan(visit func(interface{}) error) error {
|
func (aw *Awakeman) Scan(visit func(interface{}) error) error {
|
||||||
return visit(&aw.Sprite)
|
return visit(&aw.Sprite)
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,6 @@ func NewBubble(pos geom.Int3) *Bubble {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//func (b *Bubble) Scan() []interface{} { return []interface{}{&b.Sprite} }
|
|
||||||
func (b *Bubble) Scan(visit func(interface{}) error) error {
|
func (b *Bubble) Scan(visit func(interface{}) error) error {
|
||||||
return visit(&b.Sprite)
|
return visit(&b.Sprite)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue