public void DrawSub(GraphicsDevice gd, WorldState state, Vector2 pxOffset)
        {
            state.PrepareCulling(pxOffset);
            var subs = Blueprint.SubWorlds.Where(sub => sub.DoDraw(state)).ToList();

            foreach (var sub in subs)
            {
                sub.SubDraw(gd, state, (pxOffsetSub) =>
                {
                    sub.Architecture.StaticDraw(gd, state, pxOffsetSub);
                    sub.Architecture.DrawDynamic(gd, state, true);
                    sub.Entities.StaticDraw(gd, state, pxOffsetSub);
                });
            }
            state.PrepareCulling(pxOffset);
        }
        public void Draw2D(GraphicsDevice gd, WorldState state)
        {
            var pxOffset = -state.WorldSpace.GetScreenOffset();
            var changes  = Blueprint.Changes;

            state.PrepareCulling(pxOffset);
            if (changes.DrawImmediate)
            {
                DrawSub(gd, state, pxOffset);
                DrawFloorBuf(gd, state);
                DrawWallBuf(gd, state, pxOffset);

                //foreach (var sub in Blueprint.SubWorlds) sub.SubDraw(gd, state, (pxOffsetSub) => { sub.Architecture.StaticDraw(gd, state, pxOffsetSub); });
            }

            DrawDynamic(gd, state, state.DrawRoofs);
        }
Exemple #3
0
        public void StaticDraw(GraphicsDevice gd, WorldState state, Vector2 pxOffset)
        {
            var changes = Blueprint.Changes;

            //state.PrepareLighting();
            state.PrepareCulling(pxOffset);

            var effect = WorldContent.RCObject;

            gd.BlendState         = BlendState.NonPremultiplied;
            effect.ViewProjection = state.ViewProjection;

            effect.SetTechnique(RCObjectTechniques.Draw);

            DrawObjBuf(gd, state, pxOffset);
            //if (false)
            //{
            //foreach (var sub in Blueprint.SubWorlds) sub.SubDraw(gd, state, (pxOffsetSub) => sub.Entities.StaticDraw(gd, state, pxOffsetSub));
            //}
        }
Exemple #4
0
        private void DrawObjBuf(GraphicsDevice gd, WorldState state, Vector2 pxOffset)
        {
            var _2d = state._2D;

            //foreach (var sub in Blueprint.SubWorlds) sub.DrawObjects(gd, state);

            _2d.SetScroll(pxOffset);
            _2d.OffsetPixel(new Vector2());
            _2d.OffsetTile(new Vector3());
            _2d.PrepareImmediate(Effects.WorldBatchTechniques.drawZSpriteDepthChannel);

            var size   = new Vector2(state._2D.LastWidth, state._2D.LastHeight);
            var mainBd = state.WorldSpace.GetScreenFromTile(state.CenterTile);
            var diff   = pxOffset - mainBd;

            state.WorldRectangle = new Rectangle((pxOffset).ToPoint(), size.ToPoint());
            state.PrepareCulling(pxOffset);

            IEnumerable <ObjectComponent> staticObj;

            if (Blueprint.Changes.Subworld)
            {
                staticObj = Blueprint.Objects;
            }
            else
            {
                staticObj = Blueprint.Changes.StaticObjects;
            }
            staticObj = staticObj.Where(x => (x.Level <= state.Level) && x.DoDraw(state)).OrderBy(x => x.DrawOrder);

            foreach (var obj in staticObj)
            {
                obj.Draw(gd, state);
            }

            _2d.EndImmediate();
        }