Ejemplo n.º 1
0
 void IRenderAboveWorld.RenderAboveWorld(Actor self, WorldRenderer wr)
 {
     if (Enabled)
     {
         render.Draw(wr.Viewport);
     }
 }
 void IRenderOverlay.Render(WorldRenderer wr)
 {
     if (dirty.Count > 0)
     {
         render.Draw(wr.Viewport);
     }
 }
Ejemplo n.º 3
0
        void IRenderTerrain.RenderTerrain(WorldRenderer wr, Viewport viewport)
        {
            spriteLayer.Draw(wr.Viewport);

            foreach (var r in wr.World.WorldActor.TraitsImplementing <IRenderOverlay>())
            {
                r.Render(wr);
            }
        }
Ejemplo n.º 4
0
 void IRenderOverlay.Render(WorldRenderer wr)
 {
     render.Draw(wr.Viewport);
 }
Ejemplo n.º 5
0
        public void RenderShroud(Shroud shroud, WorldRenderer wr)
        {
            if (currentShroud != shroud)
            {
                if (currentShroud != null)
                {
                    currentShroud.CellsChanged -= DirtyCells;
                }

                if (shroud != null)
                {
                    shroud.CellsChanged += DirtyCells;
                }

                // Needs the anonymous function to ensure the correct overload is chosen
                if (shroud != null)
                {
                    visibleUnderShroud = puv => currentShroud.IsExplored(puv);
                }
                else
                {
                    visibleUnderShroud = puv => map.Contains(puv);
                }

                if (shroud != null)
                {
                    visibleUnderFog = puv => currentShroud.IsVisible(puv);
                }
                else
                {
                    visibleUnderFog = puv => map.Contains(puv);
                }

                currentShroud = shroud;
                DirtyCells(map.ProjectedCellBounds);
            }

            // We need to update newly dirtied areas of the shroud.
            // Expand the dirty area to cover the neighboring cells, since shroud is affected by neighboring cells.
            foreach (var uv in cellsDirty)
            {
                cellsAndNeighborsDirty.Add(uv);
                var cell = ((MPos)uv).ToCPos(map);
                foreach (var direction in CVec.Directions)
                {
                    cellsAndNeighborsDirty.Add((PPos)(cell + direction).ToMPos(map));
                }
            }

            foreach (var puv in cellsAndNeighborsDirty)
            {
                var uv = (MPos)puv;
                if (!tileInfos.Contains(uv))
                {
                    continue;
                }

                var tileInfo     = tileInfos[uv];
                var shroudSprite = GetSprite(shroudSprites, GetEdges(puv, visibleUnderShroud), tileInfo.Variant);
                var shroudPos    = tileInfo.ScreenPosition;
                if (shroudSprite != null)
                {
                    shroudPos += shroudSprite.Offset - 0.5f * shroudSprite.Size;
                }

                var fogSprite = GetSprite(fogSprites, GetEdges(puv, visibleUnderFog), tileInfo.Variant);
                var fogPos    = tileInfo.ScreenPosition;
                if (fogSprite != null)
                {
                    fogPos += fogSprite.Offset - 0.5f * fogSprite.Size;
                }

                shroudLayer.Update(uv, shroudSprite, shroudPos);
                fogLayer.Update(uv, fogSprite, fogPos);
            }

            cellsDirty.Clear();
            cellsAndNeighborsDirty.Clear();

            fogLayer.Draw(wr.Viewport);
            shroudLayer.Draw(wr.Viewport);
        }
Ejemplo n.º 6
0
 void IRenderShroud.RenderShroud(WorldRenderer wr)
 {
     UpdateShroud(map.ProjectedCells);
     fogLayer.Draw(wr.Viewport);
     shroudLayer.Draw(wr.Viewport);
 }
Ejemplo n.º 7
0
 public void Render(WorldRenderer wr)
 {
     render.Draw(wr.Viewport);
 }
Ejemplo n.º 8
0
 void IRenderOverlay.Render(WorldRenderer wr)
 {
     spriteLayer.Draw(wr.Viewport);
 }
Ejemplo n.º 9
0
 void IRenderOverlay.Render(WorldRenderer wr)
 {
     render.Draw(wr.Viewport);
     //Console.WriteLine("d2terrain layer call" + i);
     //i++;
 }