Beispiel #1
0
        public void Render()
        {
            int              numTicks = 0;
            DateTime         prevTick = DateTime.Now, tickTime;
            double           msSince, lag = 0.0;
            RenderCollection rc = new RenderCollection();

            while (true)
            {
                try
                {
                    if (exitEvent.WaitOne(1) == true)
                    {
                        return;
                    }
                    tickTime = DateTime.Now;
                    msSince  = (tickTime - prevTick).TotalMilliseconds + lag;
                    numTicks = (int)Math.Floor(msSince / 20.0);
                    lag      = msSince - (numTicks * 20);
                    prevTick = tickTime;
                    if (numTicks > 0)
                    {
                        rc.Clear();
                        ExecuteActions();
                        UpdateImages(numTicks, ref rc);
                        UpdateText(numTicks, ref rc);
                    }
                    if (rc.items.Count > 0)
                    {
                        _graphics.BeginScene();
                        _graphics.ClearScene(_bgColor);
                        Render(rc);
                        _graphics.EndScene();
                    }
                    else if (rc.needsclear == true)
                    {
                        _graphics.BeginScene();
                        _graphics.ClearScene(_bgColor);
                        _graphics.EndScene();
                        rc.needsclear = false;
                    }
                }
                catch (Exception)
                {
                }
            }
        }
Beispiel #2
0
        private void Render(RenderCollection rc)
        {
            List <ScarboroughItem> toRem    = new List <ScarboroughItem>();
            List <DeferredMessage> messages = new List <DeferredMessage>();

            toRem.Clear();
            foreach (ScarboroughItem si in rc.items)
            {
                try
                {
                    si.Render(_graphics);
                }
                catch (Exception ex)
                {
                    if (si.ctx != null && si.ctx.trig != null)
                    {
                        messages.Add(new DeferredMessage()
                        {
                            ctx     = si.ctx,
                            plug    = plug,
                            level   = Triggernometry.Plugin.DebugLevelEnum.Error,
                            Message = Triggernometry.I18n.Translate("internal/AuraContainer/updateerror", String.Format("Deactivating aura due to update exception: {0}", ex.Message))
                        }
                                     );
                    }
                    else
                    {
                        messages.Add(new DeferredMessage()
                        {
                            ctx     = null,
                            plug    = plug,
                            level   = Triggernometry.Plugin.DebugLevelEnum.Error,
                            Message = Triggernometry.I18n.Translate("internal/AuraContainer/updateerror", String.Format("Deactivating aura due to update exception: {0}", ex.Message))
                        }
                                     );
                    }
                    toRem.Add(si);
                }
            }
            if (toRem.Count > 0)
            {
                foreach (ScarboroughItem si in toRem)
                {
                    if (si.ctx != null && si.ctx.trig != null)
                    {
                        messages.Add(new DeferredMessage()
                        {
                            ctx     = si.ctx,
                            plug    = plug,
                            level   = Triggernometry.Plugin.DebugLevelEnum.Verbose,
                            Message = Triggernometry.I18n.Translate("internal/AuraContainer/closingaura", "Closing aura window")
                        }
                                     );
                    }
                    else
                    {
                        messages.Add(new DeferredMessage()
                        {
                            ctx     = null,
                            plug    = plug,
                            level   = Triggernometry.Plugin.DebugLevelEnum.Verbose,
                            Message = Triggernometry.I18n.Translate("internal/AuraContainer/closingaura", "Closing aura window")
                        }
                                     );
                    }
                    if (si is ScarboroughImage)
                    {
                        var myKey = imageitems.FirstOrDefault(x => x.Value == si).Key;
                        imageitems.Remove(myKey);
                    }
                    if (si is ScarboroughText)
                    {
                        var myKey = textitems.FirstOrDefault(x => x.Value == si).Key;
                        textitems.Remove(myKey);
                    }
                    si.Dispose();
                }
            }
            ProcessMessages(messages);
        }
Beispiel #3
0
        private void UpdateText(int numTicks, ref RenderCollection rc)
        {
            List <string>          toRem    = new List <string>();
            List <DeferredMessage> messages = new List <DeferredMessage>();

            toRem.Clear();
            foreach (KeyValuePair <string, ScarboroughText> si in textitems)
            {
                try
                {
                    if (si.Value.Logic(numTicks) == false)
                    {
                        toRem.Add(si.Key);
                    }
                    else
                    {
                        if (si.Value.Opacity > 0)
                        {
                            rc.Add(si.Value);
                        }
                    }
                }
                catch (Exception ex)
                {
                    if (si.Value.ctx != null && si.Value.ctx.trig != null)
                    {
                        messages.Add(new DeferredMessage()
                        {
                            ctx     = si.Value.ctx,
                            plug    = plug,
                            level   = Triggernometry.Plugin.DebugLevelEnum.Error,
                            Message = Triggernometry.I18n.Translate("internal/AuraContainer/updateerror", String.Format("Deactivating aura due to update exception: {0}", ex.Message))
                        }
                                     );
                    }
                    else
                    {
                        messages.Add(new DeferredMessage()
                        {
                            ctx     = null,
                            plug    = plug,
                            level   = Triggernometry.Plugin.DebugLevelEnum.Error,
                            Message = Triggernometry.I18n.Translate("internal/AuraContainer/updateerror", String.Format("Deactivating aura due to update exception: {0}", ex.Message))
                        }
                                     );
                    }
                    toRem.Add(si.Key);
                }
            }
            if (toRem.Count > 0)
            {
                foreach (string si in toRem)
                {
                    ScarboroughText sit = textitems[si];
                    if (sit.ctx != null && sit.ctx.trig != null)
                    {
                        messages.Add(new DeferredMessage()
                        {
                            ctx     = sit.ctx,
                            plug    = plug,
                            level   = Triggernometry.Plugin.DebugLevelEnum.Verbose,
                            Message = Triggernometry.I18n.Translate("internal/AuraContainer/closingaura", "Closing aura window")
                        }
                                     );
                    }
                    else
                    {
                        messages.Add(new DeferredMessage()
                        {
                            ctx     = null,
                            plug    = plug,
                            level   = Triggernometry.Plugin.DebugLevelEnum.Verbose,
                            Message = Triggernometry.I18n.Translate("internal/AuraContainer/closingaura", "Closing aura window")
                        }
                                     );
                    }
                    textitems.Remove(si);
                    sit.Dispose();
                }
            }
            ProcessMessages(messages);
        }
Beispiel #4
0
        //PREDICATE
        public void DoUpdate()
        {
            lock (a_Main)
            {
                if (m_up) return;
                m_up = true;
            }

            RenderCollection m_NS = new RenderCollection();
            RenderCollection m_ND = new RenderCollection();
            RenderInformation RI = Camera.CreateRenderInformation(true);
            IList<Node> N = ManagedWorld.NodeLibrary.OcTree.FindNodes(RI.BoundingFrustums[0]);

            if(USE_PORTROOMS)
                PortalRoomManager.TraverseTree(m_NS, m_ND, RI.BoundingFrustums[0]);
            foreach (Node n in N)
            {
                GraphicNode gn = n as GraphicNode;
                ILrentObject.ObjectTagger ta = n.Tag as ILrentObject.ObjectTagger;
                if (!n.Visible || gn == null || ta == null)
                    continue;
                if (USE_PORTROOMS && ta.PortalRoom != null)
                    continue;
                ILrentObject o = ta.Object;
                //if (o.Entity != null && !o.IsFreePoint && o.Entity.FadeOutRange < Vector3.Distance(RI.CameraPosition, o.Position))
                //    continue;

                if (o.File.IsLevelLrent)
                    m_NS.Add(gn);
                else m_ND.Add(gn);
            }
            m_NS.FinishCollecting();
            m_ND.FinishCollecting();

            lock (a_Ren)
            {
                m_NodesStatic = m_NS;
                m_NodesDynamic = m_ND;
            }
            m_up = false;
        }
Beispiel #5
0
 public Sorter()
 {
     m_NodesStatic = new RenderCollection();
     m_NodesDynamic = new RenderCollection();
     Camera = ManagedWorld.NodeLibrary.Camera;
     DoUpdate();
     m_Timer = new Timer(OnTime, null, 0, 33);
 }
Beispiel #6
0
        private void UpdateImages(int numTicks, ref RenderCollection rc)
        {
            List <string>          toRem    = new List <string>();
            List <DeferredMessage> messages = new List <DeferredMessage>();

            toRem.Clear();
            foreach (KeyValuePair <string, ScarboroughImage> si in imageitems)
            {
                try
                {
                    if (si.Value.Logic(numTicks) == false)
                    {
                        toRem.Add(si.Key);
                    }
                    else
                    {
                        if (si.Value.Changed == true)
                        {
                            si.Value.NeedRender = true;
                            si.Value.Changed    = false;
                        }
                        rc.Add(si.Value);
                    }
                }
                catch (Exception ex)
                {
                    if (si.Value.ctx != null && si.Value.ctx.trig != null)
                    {
                        messages.Add(new DeferredMessage()
                        {
                            ctx     = si.Value.ctx,
                            plug    = plug,
                            level   = Triggernometry.RealPlugin.DebugLevelEnum.Error,
                            Message = Triggernometry.I18n.Translate("internal/AuraContainer/updateerror", String.Format("Deactivating aura '{0}' from trigger '{1}' due to update exception: {2}", si.Key, si.Value.ctx.trig.LogName, ex.Message))
                        }
                                     );
                    }
                    else
                    {
                        messages.Add(new DeferredMessage()
                        {
                            ctx     = null,
                            plug    = plug,
                            level   = Triggernometry.RealPlugin.DebugLevelEnum.Error,
                            Message = Triggernometry.I18n.Translate("internal/AuraContainer/updateerror", String.Format("Deactivating aura '{0}' due to update exception: {1}", si.Key, ex.Message))
                        }
                                     );
                    }
                    toRem.Add(si.Key);
                }
            }
            if (toRem.Count > 0)
            {
                foreach (string si in toRem)
                {
                    ScarboroughImage sit = imageitems[si];
                    if (sit.ctx != null && sit.ctx.trig != null)
                    {
                        messages.Add(new DeferredMessage()
                        {
                            ctx     = sit.ctx,
                            plug    = plug,
                            level   = Triggernometry.RealPlugin.DebugLevelEnum.Verbose,
                            Message = Triggernometry.I18n.Translate("internal/AuraContainer/closingaura", "Closing aura window")
                        }
                                     );
                    }
                    else
                    {
                        messages.Add(new DeferredMessage()
                        {
                            ctx     = null,
                            plug    = plug,
                            level   = Triggernometry.RealPlugin.DebugLevelEnum.Verbose,
                            Message = Triggernometry.I18n.Translate("internal/AuraContainer/closingaura", "Closing aura window")
                        }
                                     );
                    }
                    imageitems.Remove(si);
                    sit.Dispose();
                }
            }
            ProcessMessages(messages);
        }