Exemplo n.º 1
0
        public void InternalUpdate()
        {
            upmut.WaitOne();
            var iil = new List <IfInfo>();

            foreach (var ci in Ifs)
            {
                if (ci.If())
                {
                    ci.Action();
                }
                else
                {
                    if (ci.Else != null)
                    {
                        ci.Else();
                    }
                }
                if (ci.Until != null)
                {
                    if (ci.Until())
                    {
                        iil.Add(ci);
                    }
                }
            }
            foreach (var ci in iil)
            {
                Ifs.Remove(ci);
            }
            var rd = new List <DoInfo>();
            var dt = new List <DoInfo>();

            foreach (var Do in Dos)
            {
                Do.Do();
                if (Do.Until != null)
                {
                    if (Do.Until())
                    {
                        if (Do.Then != null)
                        {
                            dt.Add(Do);
                        }
                        rd.Add(Do);
                    }
                }
            }
            foreach (var dd in dt)
            {
                dd.Then();
            }
            foreach (var Do in rd)
            {
                Dos.Remove(Do);
            }
            var rw = new List <WhenInfo>();

            foreach (var w in Whens)
            {
                if (w.When())
                {
                    if (w.Unless != null)
                    {
                        if (w.Unless())
                        {
                            //rw.Add(w);
                        }
                        else
                        {
                            w.Action();
                            rw.Add(w);
                        }
                    }
                    else
                    {
                        w.Action();
                        rw.Add(w);
                    }
                }
            }
            foreach (var w in rw)
            {
                Whens.Remove(w);
            }
            if (Flows.Count > 0)
            {
                var ff = Flows[0];
                if (ff.Begun == false)
                {
                    if (ff.Init != null)
                    {
                        ff.Init();
                    }
                    ff.Begun = true;
                }
                if (ff.Logic())
                {
                    if (ff.EndLogic != null)
                    {
                        ff.EndLogic();
                    }
                    Flows.Remove(ff);
                }
            }
            List <ActInfo> rem = new List <ActInfo>();
            int            ms  = Environment.TickCount;

            foreach (var a in Acts)
            {
                if (a.NoTime)
                {
                    a.Action();
                    if (a.Until())
                    {
                        rem.Add(a);
                        continue;
                    }
                }
                if (a.Until != null)
                {
                    if (ms > (a.When))
                    {
                        a.Action();
                        if (a.Until())
                        {
                            rem.Add(a);
                            continue;
                        }
                    }
                }
                if (a.Running)
                {
                    if (ms > (a.When + a.For))
                    {
                        Console.WriteLine("Done");
                        rem.Add(a);
                        continue;
                    }
                }
                else
                {
                    if (ms > a.When)
                    {
                        a.Action();
                        if (a.Once)
                        {
                            rem.Add(a);
                        }
                        else
                        {
                            a.Running = true;
                        }
                    }
                }
            }
            foreach (var a in rem)
            {
                Acts.Remove(a);
            }
            upmut.ReleaseMutex();
        }