• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

mlange-42 / ark-tools / 13609383102

01 Mar 2025 10:23PM CUT coverage: 98.438% (-1.6%) from 100.0%
13609383102

push

github

web-flow
Add observers and reporters (#2)

287 of 297 new or added lines in 9 files covered. (96.63%)

630 of 640 relevant lines covered (98.44%)

133.94 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

100.0
/observer/grid_to_layers.go
1
package observer
2

3
import "github.com/mlange-42/ark/ecs"
4

5
// GridToLayers creates an observer that serves as adapter from multiple [Grid] observers to a [GridLayers] observer.
6
func GridToLayers(obs ...Grid) GridLayers {
4✔
7
        if len(obs) == 0 {
5✔
8
                panic("no observers given")
1✔
9
        }
10
        return &gridToLayers{
3✔
11
                Observers: obs,
3✔
12
        }
3✔
13
}
14

15
// gridToLayers is an observer that serves as adapter from multiple [Grid] observers to a [GridLayers] observer.
16
type gridToLayers struct {
17
        Observers []Grid
18
        values    [][]float64
19
}
20

21
// Initialize the child observer.
22
func (o *gridToLayers) Initialize(w *ecs.World) {
2✔
23
        for i, obs := range o.Observers {
7✔
24
                obs.Initialize(w)
5✔
25
                if i == 0 {
7✔
26
                        continue
2✔
27
                }
28
                obs0 := o.Observers[0]
3✔
29
                w1, h1 := obs0.Dims()
3✔
30
                w2, h2 := obs.Dims()
3✔
31

3✔
32
                if w1 != w2 || h1 != h2 {
4✔
33
                        panic("grids for layers have different dimensions")
1✔
34
                }
35
        }
36

37
        o.values = make([][]float64, len(o.Observers))
1✔
38
}
39

40
// Update the child observer.
41
func (o *gridToLayers) Update(w *ecs.World) {
1✔
42
        for _, obs := range o.Observers {
4✔
43
                obs.Update(w)
3✔
44
        }
3✔
45
}
46

47
// Dims returns the matrix dimensions.
48
func (o *gridToLayers) Dims() (int, int) {
1✔
49
        return o.Observers[0].Dims()
1✔
50
}
1✔
51

52
// Layers returns the number of layers.
53
func (o *gridToLayers) Layers() int {
1✔
54
        return len(o.Observers)
1✔
55
}
1✔
56

57
// Values for the current model tick.
58
func (o *gridToLayers) Values(w *ecs.World) [][]float64 {
1✔
59
        for i, obs := range o.Observers {
4✔
60
                o.values[i] = obs.Values(w)
3✔
61
        }
3✔
62
        return o.values
1✔
63
}
64

65
// X axis coordinates.
66
func (o *gridToLayers) X(c int) float64 {
1✔
67
        return o.Observers[0].X(c)
1✔
68
}
1✔
69

70
// Y axis coordinates.
71
func (o *gridToLayers) Y(r int) float64 {
1✔
72
        return o.Observers[0].Y(r)
1✔
73
}
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc