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