package mapPathfind import ( nameActor "f1-game/internal/name/actor" nameRemote "f1-game/internal/name/remote" cstring "github.com/cherry-game/cherry/extend/string" cfacade "github.com/cherry-game/cherry/facade" cactor "github.com/cherry-game/cherry/net/actor" ) type actor struct { cactor.Base workerSize int counter int } func NewActor(workerSize int) *actor { if workerSize < 1 { workerSize = 1 } return &actor{ workerSize: workerSize, } } func (p *actor) AliasID() string { return nameActor.Map_Pathfind } func (p *actor) OnInit() { } func (p *actor) OnStop() { } // OnRemoteReceived 拦截remote消息,转发到子Actor func (p *actor) OnRemoteReceived(m *cfacade.Message) (next bool, invoke bool) { // 设置障碍物消息转发到所有子Actor if m.FuncName == nameRemote.MapPathFind_SetBarriers || m.FuncName == nameRemote.MapPathFind_RemoveBarriers { p.Child().Each(func(iActor cfacade.IActor) { iActor.PostRemote(m) }) return } // 其它消息转发到单个子Actor // 计数器自增 p.counter++ // 根据计数器循环取模获取 actorPath 进行寻路处理 childID := cstring.ToString(p.counter % p.workerSize) if child, found := p.Child().Get(childID); found { child.PostRemote(m) } return false, false }