actor.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package mapPathfind
  2. import (
  3. nameActor "f1-game/internal/name/actor"
  4. nameRemote "f1-game/internal/name/remote"
  5. cstring "github.com/cherry-game/cherry/extend/string"
  6. cfacade "github.com/cherry-game/cherry/facade"
  7. cactor "github.com/cherry-game/cherry/net/actor"
  8. )
  9. type actor struct {
  10. cactor.Base
  11. workerSize int
  12. counter int
  13. }
  14. func NewActor(workerSize int) *actor {
  15. if workerSize < 1 {
  16. workerSize = 1
  17. }
  18. return &actor{
  19. workerSize: workerSize,
  20. }
  21. }
  22. func (p *actor) AliasID() string {
  23. return nameActor.Map_Pathfind
  24. }
  25. func (p *actor) OnInit() {
  26. }
  27. func (p *actor) OnStop() {
  28. }
  29. // OnRemoteReceived 拦截remote消息,转发到子Actor
  30. func (p *actor) OnRemoteReceived(m *cfacade.Message) (next bool, invoke bool) {
  31. // 设置障碍物消息转发到所有子Actor
  32. if m.FuncName == nameRemote.MapPathFind_SetBarriers || m.FuncName == nameRemote.MapPathFind_RemoveBarriers {
  33. p.Child().Each(func(iActor cfacade.IActor) {
  34. iActor.PostRemote(m)
  35. })
  36. return
  37. }
  38. // 其它消息转发到单个子Actor
  39. // 计数器自增
  40. p.counter++
  41. // 根据计数器循环取模获取 actorPath 进行寻路处理
  42. childID := cstring.ToString(p.counter % p.workerSize)
  43. if child, found := p.Child().Get(childID); found {
  44. child.PostRemote(m)
  45. }
  46. return false, false
  47. }