-
Notifications
You must be signed in to change notification settings - Fork 0
/
RobotAI.py
44 lines (36 loc) · 1.7 KB
/
RobotAI.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from robot.components.controller.IRobotController import IRobotController
from robot.components.vision.IRobotVisionListener import IRobotVisionListener
from data.RobotVision import RobotVision
from task.CatchTask import CatchTask
from task.FindTask import FindTask
from task.IAITask import IAITask, STATUS_COMPLETED
from task.InitTask import InitTask
from task.MoveTask import MoveTask, STATUS_LOST_TARGET
class RobotAI(IRobotVisionListener):
def __init__(self,
controller: IRobotController):
self.controller = controller
self.find_task = FindTask(controller)
self.move_task = MoveTask(controller)
self.catch_task = CatchTask(controller)
self.current_task: IAITask = InitTask(controller)
def on_update_vision(self, vision: RobotVision):
if self.current_task is InitTask:
code = self.current_task.on_update_vision(vision)
if code == STATUS_COMPLETED:
self.current_task = self.find_task
if self.current_task is FindTask:
code = self.current_task.on_update_vision(vision)
if code == STATUS_COMPLETED:
self.current_task = self.move_task
if self.current_task is MoveTask:
code = self.current_task.on_update_vision(vision)
if code == STATUS_COMPLETED:
self.current_task = self.catch_task
elif code == STATUS_LOST_TARGET:
self.current_task = self.find_task
if self.current_task is CatchTask:
code = self.current_task.on_update_vision(vision)
# TODO Move back
if vision.nearest_target is not None:
self.find_task.last_target = vision.nearest_target