private void navigate(String data, Term root) { String[] d = data.Split(new Char[] { ';', ' ' }, StringSplitOptions.RemoveEmptyEntries); int x = Convert.ToInt32(d[0]); int y = Convert.ToInt32(d[1]); if (root.getX() == x && root.getY() == y) { //esegui il task TaskToken t = new TaskToken(); t.Id = data; AddCompleteHandlers(root); root.Fire(t); } else { for (int i = 0; i < root.Children.Count; i++) { Term child = root.Children[i]; if (child.State != ExpressionState.Complete) { navigate(data, child); //criterio di uscita dal for if (child.State == ExpressionState.Complete) { break; } } } //controllo se l'operator è completato //checkOperator(root); } }
// esegui questo metodo per eseguire un task foglia a partire dal suo ID // questo id lo puoi ricevere sia dagli Hololens via TCP // oppure lo puoi ricevere come input utente (tastiera in un main da // console o via interfaccia grafica) public void ExecuteTaskById(string id) { TaskToken token = new TaskToken() { Id = id }; if (this.Root != null) { this.Root.Fire(token); } }
public void checkOperator(Term oper) { if (oper.kind.Split(" ")[0].Equals("operator:")) { String operatorType = oper.kind.Split(" ")[1]; bool completed = true; if (operatorType.Equals("enable")) //tutti i task figli devono essere completati { for (int i = 0; i < oper.Children.Count && completed; i++) { if (oper.Children[i].State != ExpressionState.Complete) { completed = false; } } } else if (operatorType.Equals("choice")) //basta che solo uno dei figli sia completato { completed = false; for (int i = 0; i < oper.Children.Count && !completed; i++) { if (oper.Children[i].State != ExpressionState.Complete) { completed = true; } } } if (completed) { TaskToken t = new TaskToken(); t.Id = oper.Id; AddCompleteHandlers(oper); oper.Fire(t); } } }