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