package tower import ( "f1-game/internal/algorithm/aoi" "f1-game/internal/types" ) type ( Towers []*Tower Tower struct { id int32 minX int32 minY int32 maxX int32 maxY int32 markers aoi.Objects watchers aoi.Objects } ) func (p Towers) Makers() aoi.Objects { makers := aoi.Objects{} for _, tower := range p { makers.Adds(tower.markers) } return makers } func (p Towers) MakersFilter(watcher *aoi.Object) aoi.Objects { makers := aoi.Objects{} if watcher.IsWatcher() { for _, tower := range p { // if !watcher.IsFilter(tower.id) makers.Adds(tower.markers) // towerID加入到观察者过滤列表 //watcher.SetFilter(tower.id) // } } } return makers } func (p Towers) IDSet() types.Set[int32] { idSet := types.NewSet[int32]() for _, tower := range p { idSet.Add(tower.id) } return idSet } func (p *Tower) AddMarker(object *aoi.Object) { p.markers.Add(object) } func (p *Tower) DelMarker(object *aoi.Object) { p.markers.Remove(object.ObjectID) } func (p *Tower) AddWatcher(object *aoi.Object) { p.watchers.Add(object) } func (p *Tower) DelWatcher(object *aoi.Object) { p.watchers.Remove(object.ObjectID) } func (p *Tower) InTower(point *aoi.Point) bool { return point.X >= p.minX && point.X <= p.maxX && point.Y >= p.minY && point.Y <= p.maxY } func (p *Tower) FilterWatchers(filterWatchers aoi.Objects) aoi.Objects { watchers := aoi.Objects{} for _, object := range p.watchers { if !filterWatchers.Contains(object.ObjectID) { watchers.Add(object) } } return watchers }