public void Draw() { RefreshPalette(); if (world.IsShellmap && !Game.Settings.Game.ShowShellmap) { return; } var bounds = Game.viewport.ViewBounds(world); Game.Renderer.EnableScissor(bounds.Left, bounds.Top, bounds.Width, bounds.Height); terrainRenderer.Draw(this, Game.viewport); foreach (var a in world.traitDict.ActorsWithTraitMultiple <IRenderAsTerrain>(world)) { foreach (var r in a.Trait.RenderAsTerrain(a.Actor)) { r.Sprite.DrawAt(r.Pos, this.GetPaletteIndex(r.Palette), r.Scale); } } foreach (var a in world.Selection.Actors) { if (!a.Destroyed) { foreach (var t in a.TraitsImplementing <IPreRenderSelection>()) { t.RenderBeforeWorld(this, a); } } } Game.Renderer.Flush(); if (world.OrderGenerator != null) { world.OrderGenerator.RenderBeforeWorld(this, world); } foreach (var image in SpritesToRender()) { image.Sprite.DrawAt(image.Pos, this.GetPaletteIndex(image.Palette), image.Scale); } // added for contrails foreach (var a in world.ActorsWithTrait <IPostRender>()) { if (!a.Actor.Destroyed) { a.Trait.RenderAfterWorld(this, a.Actor); } } if (world.OrderGenerator != null) { world.OrderGenerator.RenderAfterWorld(this, world); } shroudRenderer.Draw(this); Game.Renderer.DisableScissor(); foreach (var g in world.Selection.Actors.Where(a => !a.Destroyed) .SelectMany(a => a.TraitsImplementing <IPostRenderSelection>()) .GroupBy(prs => prs.GetType())) { foreach (var t in g) { t.RenderAfterWorld(this); } } Game.Renderer.Flush(); }
public void Draw() { RefreshPalette(); if (world.IsShellmap && !Game.Settings.Game.ShowShellmap) { return; } var renderables = GenerateRenderables(); var bounds = Game.viewport.ViewBounds(world); Game.Renderer.EnableScissor(bounds.Left, bounds.Top, bounds.Width, bounds.Height); terrainRenderer.Draw(this, Game.viewport); Game.Renderer.Flush(); for (var i = 0; i < renderables.Count; i++) { renderables[i].Render(this); } // added for contrails foreach (var a in world.ActorsWithTrait <IPostRender>()) { if (!a.Actor.Destroyed) { a.Trait.RenderAfterWorld(this, a.Actor); } } if (world.OrderGenerator != null) { world.OrderGenerator.RenderAfterWorld(this, world); } var renderShroud = world.RenderPlayer != null ? world.RenderPlayer.Shroud : null; shroudRenderer.Draw(this, renderShroud); if (devTrait.Value != null && devTrait.Value.ShowDebugGeometry) { for (var i = 0; i < renderables.Count; i++) { renderables[i].RenderDebugGeometry(this); } } Game.Renderer.DisableScissor(); foreach (var g in world.Selection.Actors.Where(a => !a.Destroyed) .SelectMany(a => a.TraitsImplementing <IPostRenderSelection>()) .GroupBy(prs => prs.GetType())) { foreach (var t in g) { t.RenderAfterWorld(this); } } Game.Renderer.Flush(); }