Exemple #1
0
        public void Draw(Viewport viewport)
        {
            var cells = restrictToBounds ? viewport.VisibleCellsInsideBounds : viewport.AllVisibleCells;

            // Only draw the rows that are visible.
            var firstRow = cells.CandidateMapCoords.TopLeft.V.Clamp(0, map.MapSize.Y);
            var lastRow = (cells.CandidateMapCoords.BottomRight.V + 1).Clamp(firstRow, map.MapSize.Y);

            Game.Renderer.Flush();

            // Flush any visible changes to the GPU
            for (var row = firstRow; row <= lastRow; row++)
            {
                if (!dirtyRows.Remove(row))
                    continue;

                var rowOffset = rowStride * row;

                unsafe
                {
                    // The compiler / language spec won't let us calculate a pointer to
                    // an offset inside a generic array T[], and so we are forced to
                    // calculate the start-of-row pointer here to pass in to SetData.
                    fixed (Vertex* vPtr = &vertices[0])
                        vertexBuffer.SetData((IntPtr)(vPtr + rowOffset), rowOffset, rowStride);
                }
            }

            Game.Renderer.WorldSpriteRenderer.DrawVertexBuffer(
                vertexBuffer, rowStride * firstRow, rowStride * (lastRow - firstRow),
                PrimitiveType.TriangleList, Sheet, BlendMode);

            Game.Renderer.Flush();
        }
Exemple #2
0
        public void Draw( WorldRenderer wr, Viewport viewport )
        {
            int verticesPerRow = map.Bounds.Width * 4;

            int visibleRows = (int)(viewport.Height * 1f / Game.CellSize / viewport.Zoom + 2);

            int firstRow = (int)(viewport.Location.Y * 1f / Game.CellSize - map.Bounds.Top);
            int lastRow = firstRow + visibleRows;

            if (lastRow < 0 || firstRow > map.Bounds.Height)
                return;

            if (firstRow < 0) firstRow = 0;
            if (lastRow > map.Bounds.Height) lastRow = map.Bounds.Height;

            if (world.RenderedPlayer != null && !world.RenderedShroud.Disabled && world.RenderedShroud.Bounds.HasValue)
            {
                var r = world.RenderedShroud.Bounds.Value;
                if (firstRow < r.Top - map.Bounds.Top)
                    firstRow = r.Top - map.Bounds.Top;

                if (firstRow > r.Bottom - map.Bounds.Top)
                    firstRow = r.Bottom - map.Bounds.Top;
            }

            if( lastRow < firstRow ) lastRow = firstRow;

            Game.Renderer.WorldSpriteRenderer.DrawVertexBuffer(
                vertexBuffer, verticesPerRow * firstRow, verticesPerRow * (lastRow - firstRow),
                PrimitiveType.QuadList, terrainSheet);

            foreach (var r in world.WorldActor.TraitsImplementing<IRenderOverlay>())
                r.Render( wr );
        }
Exemple #3
0
        public void Draw(WorldRenderer wr, Viewport viewport)
        {
            foreach (var kv in spriteLayers.Values)
                kv.Draw(wr.Viewport);

            foreach (var r in wr.World.WorldActor.TraitsImplementing<IRenderOverlay>())
                r.Render(wr);
        }
Exemple #4
0
        public void Draw(WorldRenderer wr, Viewport viewport)
        {
            var cells = viewport.VisibleCells;

            // Only draw the rows that are visible.
            // VisibleCells is clamped to the map, so additional checks are unnecessary
            var firstRow = cells.TopLeft.ToMPos(map).V - map.Bounds.Top;
            var lastRow = cells.BottomRight.ToMPos(map).V - map.Bounds.Top + 1;

            Game.Renderer.WorldSpriteRenderer.DrawVertexBuffer(
                vertexBuffer, rowStride * firstRow, rowStride * (lastRow - firstRow),
                PrimitiveType.QuadList, wr.Theater.Sheet);

            foreach (var r in wr.World.WorldActor.TraitsImplementing<IRenderOverlay>())
                r.Render(wr);
        }
Exemple #5
0
        public void Draw(WorldRenderer wr, Viewport viewport)
        {
            var verticesPerRow = 4*map.Bounds.Width;
            var bounds = viewport.CellBounds;
            var firstRow = bounds.Top - map.Bounds.Top;
            var lastRow = bounds.Bottom - map.Bounds.Top;

            if (lastRow < 0 || firstRow > map.Bounds.Height)
                return;

            Game.Renderer.WorldSpriteRenderer.DrawVertexBuffer(
                vertexBuffer, verticesPerRow * firstRow, verticesPerRow * (lastRow - firstRow),
                PrimitiveType.QuadList, wr.Theater.Sheet);

            foreach (var r in world.WorldActor.TraitsImplementing<IRenderOverlay>())
                r.Render(wr);
        }
Exemple #6
0
		internal WorldRenderer(World world)
		{
			this.world = world;
			Viewport = new Viewport(this, world.Map);
			palette = new HardwarePalette();

			palettes = new Dictionary<string, PaletteReference>();
			foreach (var pal in world.traitDict.ActorsWithTrait<ILoadsPalettes>())
				pal.Trait.LoadPalettes(this);

			palette.Initialize();

			Theater = new Theater(world.TileSet);
			terrainRenderer = new TerrainRenderer(world, this);

			devTrait = Exts.Lazy(() => world.LocalPlayer != null ? world.LocalPlayer.PlayerActor.Trait<DeveloperMode>() : null);
		}
Exemple #7
0
        internal WorldRenderer(World world)
        {
            this.world = world;
            Viewport = new Viewport(this, world.Map);
            palette = new HardwarePalette();

            palettes = new Cache<string, PaletteReference>(CreatePaletteReference);
            foreach (var pal in world.traitDict.ActorsWithTraitMultiple<IPalette>(world))
                pal.Trait.InitPalette(this);

            palette.Initialize();

            Theater = new Theater(world.TileSet);
            terrainRenderer = new TerrainRenderer(world, this);

            devTrait = Lazy.New(() => world.LocalPlayer != null ? world.LocalPlayer.PlayerActor.Trait<DeveloperMode>() : null);
        }
Exemple #8
0
		public void Draw(WorldRenderer wr, Viewport viewport)
		{
			var verticesPerRow = 4*map.Bounds.Width;
			var cells = viewport.VisibleCells;
			var shape = wr.world.Map.TileShape;

			// Only draw the rows that are visible.
			// VisibleCells is clamped to the map, so additional checks are unnecessary
			var firstRow = Map.CellToMap(shape, cells.TopLeft).Y - map.Bounds.Top;
			var lastRow = Map.CellToMap(shape, cells.BottomRight).Y - map.Bounds.Top + 1;

			Game.Renderer.WorldSpriteRenderer.DrawVertexBuffer(
				vertexBuffer, verticesPerRow * firstRow, verticesPerRow * (lastRow - firstRow),
				PrimitiveType.QuadList, wr.Theater.Sheet);

			foreach (var r in world.WorldActor.TraitsImplementing<IRenderOverlay>())
				r.Render(wr);
		}
Exemple #9
0
        internal WorldRenderer(World world)
        {
            World = world;
            Viewport = new Viewport(this, world.Map);

            createPaletteReference = CreatePaletteReference;

            foreach (var pal in world.TraitDict.ActorsWithTrait<ILoadsPalettes>())
                pal.Trait.LoadPalettes(this);

            foreach (var p in world.Players)
                UpdatePalettesForPlayer(p.InternalName, p.Color, false);

            palette.Initialize();

            Theater = new Theater(world.TileSet);
            terrainRenderer = new TerrainRenderer(world, this);

            devTrait = Exts.Lazy(() => world.LocalPlayer != null ? world.LocalPlayer.PlayerActor.Trait<DeveloperMode>() : null);
        }
Exemple #10
0
        public void Draw( Viewport viewport )
        {
            int indicesPerRow = map.Width * 6;
            int verticesPerRow = map.Width * 4;

            int visibleRows = (int)(viewport.Height * 1f / Game.CellSize + 2);

            int firstRow = (int)(viewport.Location.Y * 1f / Game.CellSize - map.YOffset);
            int lastRow = firstRow + visibleRows;

            if (lastRow < 0 || firstRow > map.Height)
                return;

            if (firstRow < 0) firstRow = 0;
            if (lastRow > map.Height) lastRow = map.Height;

            if (world.LocalPlayer != null && !world.LocalPlayer.Shroud.Disabled && world.LocalPlayer.Shroud.Bounds.HasValue)
            {
                var r = world.LocalPlayer.Shroud.Bounds.Value;
                if (firstRow < r.Top - map.YOffset)
                    firstRow = r.Top - map.YOffset;

                if (firstRow > r.Bottom - map.YOffset)
                    firstRow = r.Bottom - map.YOffset;
            }

            if( lastRow < firstRow ) lastRow = firstRow;

            Game.Renderer.SpriteShader.SetValue( "DiffuseTexture", terrainSheet.Texture );
            Game.Renderer.SpriteShader.Render(() =>
                Game.Renderer.DrawBatch(vertexBuffer, indexBuffer,
                    new Range<int>(verticesPerRow * firstRow, verticesPerRow * lastRow),
                    new Range<int>(indicesPerRow * firstRow, indicesPerRow * lastRow),
                    PrimitiveType.TriangleList, Game.Renderer.SpriteShader));

            foreach (var r in world.WorldActor.TraitsImplementing<IRenderOverlay>())
                r.Render();
        }
Exemple #11
0
        internal WorldRenderer(ModData modData, World world)
        {
            World = world;
            TileSize = World.Map.Grid.TileSize;
            Viewport = new Viewport(this, world.Map);

            createPaletteReference = CreatePaletteReference;

            var mapGrid = modData.Manifest.Get<MapGrid>();
            enableDepthBuffer = mapGrid.EnableDepthBuffer;

            foreach (var pal in world.TraitDict.ActorsWithTrait<ILoadsPalettes>())
                pal.Trait.LoadPalettes(this);

            foreach (var p in world.Players)
                UpdatePalettesForPlayer(p.InternalName, p.Color, false);

            palette.Initialize();

            Theater = new Theater(world.Map.Rules.TileSet);
            terrainRenderer = new TerrainRenderer(world, this);

            devTrait = Exts.Lazy(() => world.LocalPlayer != null ? world.LocalPlayer.PlayerActor.Trait<DeveloperMode>() : null);
        }
Exemple #12
0
		public void Draw(WorldRenderer wr, Viewport viewport)
		{
			terrain.Draw(viewport);
			foreach (var r in wr.World.WorldActor.TraitsImplementing<IRenderOverlay>())
				r.Render(wr);
		}
Exemple #13
0
        public void Draw( Viewport viewport )
        {
            int indicesPerRow = map.Width * 6;
            int verticesPerRow = map.Width * 4;

            int visibleRows = (int)(viewport.Height / 24.0f + 2);

            int firstRow = (int)((viewport.Location.Y) / 24.0f - map.YOffset);
            int lastRow = firstRow + visibleRows;

            if (lastRow < 0 || firstRow > map.Height)
                return;

            if (firstRow < 0) firstRow = 0;
            if (lastRow > map.Height) lastRow = map.Height;

            if (!Game.world.LocalPlayer.Shroud.HasGPS && Game.world.LocalPlayer.Shroud.bounds.HasValue)
            {
                var r = Game.world.LocalPlayer.Shroud.bounds.Value;
                if (firstRow < r.Top - map.YOffset)
                    firstRow = r.Top - map.YOffset;

                if (firstRow > r.Bottom - map.YOffset)
                    firstRow = r.Bottom - map.YOffset;
            }

            if( lastRow < firstRow ) lastRow = firstRow;

            renderer.SpriteShader.SetValue( "DiffuseTexture", terrainSheet.Texture );
            renderer.SpriteShader.Render(() =>
                renderer.DrawBatch(vertexBuffer, indexBuffer,
                    new Range<int>(verticesPerRow * firstRow, verticesPerRow * lastRow),
                    new Range<int>(indicesPerRow * firstRow, indicesPerRow * lastRow),
                    terrainSheet.Texture, PrimitiveType.TriangleList, renderer.SpriteShader));

            foreach (var r in Game.world.WorldActor.traits.WithInterface<IRenderOverlay>())
                r.Render();

            overlayRenderer.Draw();
        }