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(); }