Repository navigation
Expand file tree
/
Copy pathSelector.py
More file actions
59 lines (40 loc) · 1.91 KB
/
Copy pathSelector.py
File metadata and controls
59 lines (40 loc) · 1.91 KB
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
from ai.Algorithm.BehaviorTree.ParentTask import ParentTask
__author__ = 'RoboCupULaval'
class Selector(ParentTask):
"""Cette parent task choisit un de ses enfants pour l'update.
Pour choisir un enfant, elle commence par le début de la liste des enfants et les essaye un par un jusqu'à ce qu'elle en trouve un qui passe le test check_condition.
it then updates that child until its finished.
Si l'enfant finit avec échec, le Selecteur continue
à parcourir la liste en cherchant un autre enfant à update. S'il ne réussit pas, le Selecteur finit avec échec .
Si l'enfant finit avec succès, le Sélecteur considère que sa tâche est fait et retourne succès."""
def __init__(self):
self.task = None
self.found = None
self.cur_pos = None
ParentTask.__init__(self)
def choose_new_task(self):
"""Choisir la nouvelle tâche à update.
@return la nouvelle tâche, ou None
si aucune n'est trouvée."""
self.task = None
self.found = False
self.cur_pos = self.subtasks.index(self.cur_task)
while self.found is not True:
if self.cur_pos == self.subtasks.__len__()-1:
self.found = True
self.task = None
break
self.cur_pos += 1
self.task = self.subtasks[self.cur_pos]
if self.task.check_condition():
self.found = True
return self.task
def child_failed(self):
"""Dans le cas où l'enfant actuel finit avec un échec,
on trouve un nouvel à update, ou si aucun enfant n'est trouvé, le parent task échoue ."""
self.cur_task = self.choose_new_task()
if self.cur_task is None:
self.task_controller.finish_with_failure()
def child_succeeded(self):
"""Si l'enfant finit avec succès."""
self.task_controller.finish_with_success()