| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- 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
- }
|