示例#1
0
        public void Render(double delta)
        {
            if (selections.Count == 0 || game.Graphics.LostContext)
            {
                return;
            }

            // TODO: Proper selection box sorting. But this is very difficult because
            // we can have boxes within boxes, intersecting boxes, etc. Probably not worth it.
            Vector3 camPos = game.CurrentCameraPos;

            for (int i = 0; i < selections.Count; i++)
            {
                comparer.Intersect(selections[i], camPos);
            }
            selections.Sort(comparer);

            if (vertices == null)               // lazy init as most servers don't use this.
            {
                vertices     = new VertexP3fC4b[256 * VerticesCount];
                lineVertices = new VertexP3fC4b[256 * LineVerticesCount];
                ContextRecreated();
            }

            int index = 0, lineIndex = 0;

            for (int i = 0; i < selections.Count; i++)
            {
                SelectionBox box = selections[i];
                box.Render(delta, vertices, lineVertices, ref index, ref lineIndex);
            }

            IGraphicsApi gfx = game.Graphics;

            gfx.SetBatchFormat(VertexFormat.P3fC4b);
            gfx.UpdateDynamicVb_Lines(lineVb, lineVertices,
                                      selections.Count * LineVerticesCount);

            gfx.DepthWrite    = false;
            gfx.AlphaBlending = true;
            gfx.UpdateDynamicVb_IndexedTris(vb, vertices,
                                            selections.Count * VerticesCount);
            gfx.DepthWrite    = true;
            gfx.AlphaBlending = false;
        }
示例#2
0
        public void Render(double delta)
        {
            if (selections.Count == 0)
            {
                return;
            }

            // TODO: Proper selection box sorting. But this is very difficult because
            // we can have boxes within boxes, intersecting boxes, etc. Probably not worth it.
            Vector3 camPos = game.CurrentCameraPos;

            for (int i = 0; i < selections.Count; i++)
            {
                comparer.Intersect(selections[i], camPos);
            }
            selections.Sort(comparer);
            if (vertices == null)
            {
                InitData();                 // lazy init as most servers don't use this.
            }
            int index = 0, lineIndex = 0;

            for (int i = 0; i < selections.Count; i++)
            {
                SelectionBox box = selections[i];
                box.Render(delta, vertices, lineVertices, ref index, ref lineIndex);
            }

            Graphics.SetBatchFormat(VertexFormat.Pos3fCol4b);
            Graphics.UpdateDynamicVb(DrawMode.Lines, lineVb, lineVertices, selections.Count * LineVerticesCount);

            Graphics.DepthWrite    = false;
            Graphics.AlphaBlending = true;
            Graphics.UpdateDynamicIndexedVb(DrawMode.Triangles, vb, vertices,
                                            selections.Count * VerticesCount, selections.Count * IndicesCount);
            Graphics.DepthWrite    = true;
            Graphics.AlphaBlending = false;
        }