Пример #1
0
        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);
            }
        }
Пример #2
0
        // 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);
            }
        }
Пример #3
0
        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);
                }
            }
        }