tower.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package tower
  2. import (
  3. "f1-game/internal/algorithm/aoi"
  4. "f1-game/internal/types"
  5. )
  6. type (
  7. Towers []*Tower
  8. Tower struct {
  9. id int32
  10. minX int32
  11. minY int32
  12. maxX int32
  13. maxY int32
  14. markers aoi.Objects
  15. watchers aoi.Objects
  16. }
  17. )
  18. func (p Towers) Makers() aoi.Objects {
  19. makers := aoi.Objects{}
  20. for _, tower := range p {
  21. makers.Adds(tower.markers)
  22. }
  23. return makers
  24. }
  25. func (p Towers) MakersFilter(watcher *aoi.Object) aoi.Objects {
  26. makers := aoi.Objects{}
  27. if watcher.IsWatcher() {
  28. for _, tower := range p {
  29. // if !watcher.IsFilter(tower.id)
  30. makers.Adds(tower.markers)
  31. // towerID加入到观察者过滤列表
  32. //watcher.SetFilter(tower.id)
  33. // }
  34. }
  35. }
  36. return makers
  37. }
  38. func (p Towers) IDSet() types.Set[int32] {
  39. idSet := types.NewSet[int32]()
  40. for _, tower := range p {
  41. idSet.Add(tower.id)
  42. }
  43. return idSet
  44. }
  45. func (p *Tower) AddMarker(object *aoi.Object) {
  46. p.markers.Add(object)
  47. }
  48. func (p *Tower) DelMarker(object *aoi.Object) {
  49. p.markers.Remove(object.ObjectID)
  50. }
  51. func (p *Tower) AddWatcher(object *aoi.Object) {
  52. p.watchers.Add(object)
  53. }
  54. func (p *Tower) DelWatcher(object *aoi.Object) {
  55. p.watchers.Remove(object.ObjectID)
  56. }
  57. func (p *Tower) InTower(point *aoi.Point) bool {
  58. return point.X >= p.minX && point.X <= p.maxX && point.Y >= p.minY && point.Y <= p.maxY
  59. }
  60. func (p *Tower) FilterWatchers(filterWatchers aoi.Objects) aoi.Objects {
  61. watchers := aoi.Objects{}
  62. for _, object := range p.watchers {
  63. if !filterWatchers.Contains(object.ObjectID) {
  64. watchers.Add(object)
  65. }
  66. }
  67. return watchers
  68. }