package lib import ( "sync" ) type IScene interface { Run(robot IRobot) error Info() SceneInfo } type scene struct { ai *MyAI Name string Desc string callerQueue *Queue[ICaller] //确定运行的caller队列 status uint32 //场景状态 lock sync.Mutex } // 创建场景 func NewScene(ai *MyAI, param SceneParam) *scene { s := &scene{ ai: ai, Name: param.Name, Desc: param.Desc, callerQueue: NewQueue[ICaller](), } ai.scenes = append(ai.scenes, s) return s } // 给场景添加调用器 func (s *scene) AddCaller(caller ICaller) { s.callerQueue.Add(caller) } // 列表 func (s *scene) CallerList() []ICaller { return s.callerQueue.List() } // 取出 func (s *scene) PopCaller() ICaller { action, err := s.callerQueue.Pop() if err != nil { return nil } return action } // 启用场景 func (s *scene) Enable(name string) { for _, v := range s.ai.scenes { if v.Name == name { v.status = STATUS_ENABLE } else { v.status = STATUS_DISENABLE } } } //禁用场景 func (s *scene) Disable(name string) { for _, v := range s.ai.scenes { if v.Name == name { v.status = STATUS_DISENABLE } } }