git-svn-id: svn://svn.ijw.co.nz/svn/OpenRa@1237 993157c7-ee19-0410-b2c4-bb4e9862e678

This commit is contained in:
beedee
2007-07-14 07:48:25 +00:00
parent 73682d80d6
commit a0df84b641
6 changed files with 39 additions and 28 deletions

View File

@@ -51,9 +51,9 @@ namespace OpenRa.Game
TileMix = new Package("../../../" + map.Theater + ".mix");
renderer.SetPalette(new HardwarePalette(renderer.Device, map));
terrain = new TerrainRenderer(renderer, map, TileMix);
terrain = new TerrainRenderer(renderer, map, TileMix, viewport);
world = new World(renderer);
world = new World(renderer, viewport);
treeCache = new TreeCache(renderer.Device, map, TileMix);
foreach (TreeReference treeReference in map.Trees)
@@ -65,7 +65,7 @@ namespace OpenRa.Game
world.Add(new Refinery(24 * new float2(5, 7), 1));
sidebar = new Sidebar(Race.Soviet, renderer);
sidebar = new Sidebar(Race.Soviet, renderer, viewport);
}
internal void Run()
@@ -99,20 +99,7 @@ namespace OpenRa.Game
void Frame()
{
float2 r1 = new float2(2, -2) / viewport.Size;
float2 r2 = new float2(-1, 1);
renderer.BeginFrame(r1, r2, viewport.Location);
renderer.Device.EnableScissor(0, 0, viewport.ClientSize.Width - 128, viewport.ClientSize.Height);
terrain.Draw(viewport);
world.Draw(renderer, viewport);
renderer.Device.DisableScissor();
sidebar.Paint(viewport);
renderer.EndFrame();
viewport.DrawRegions();
}
}
}

View File

@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
namespace OpenRa.Game
{
@@ -9,9 +10,9 @@ namespace OpenRa.Game
{
Point location;
Size size;
Renderable drawFunction;
MethodInvoker drawFunction;
public Region(Point location, Size size, Renderable drawFunction)
public Region(Point location, Size size, MethodInvoker drawFunction)
{
this.location = location;
this.size = size;
@@ -21,7 +22,7 @@ namespace OpenRa.Game
public void Draw(Renderer renderer, Viewport viewport)
{
renderer.Device.EnableScissor(location.X, location.Y, size.Width, size.Height);
drawFunction(renderer, viewport);
drawFunction();
renderer.Device.DisableScissor();
}
}

View File

@@ -6,6 +6,7 @@ using BluntDirectX.Direct3D;
using OpenRa.FileFormats;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
namespace OpenRa.Game
{
@@ -19,9 +20,12 @@ namespace OpenRa.Game
Sprite blank;
Dictionary<string, Sprite> sprites = new Dictionary<string,Sprite>();
Viewport viewport;
public Sidebar(Race race, Renderer renderer)
public Sidebar(Race race, Renderer renderer, Viewport viewport)
{
this.viewport = viewport;
viewport.RequestRegion(AnchorStyles.Right, 128, Paint);
techTree.CurrentRace = race;
techTree.Build("FACT", true);
spriteRenderer = new SpriteRenderer(renderer, false);
@@ -54,7 +58,7 @@ namespace OpenRa.Game
DrawSprite(blank, ref p);
}
public void Paint(Viewport viewport)
public void Paint()
{
float2 buildPos = viewport.Location + new float2(viewport.ClientSize.Width - 128, 0);
float2 unitPos = viewport.Location + new float2(viewport.ClientSize.Width - 64, 0);

View File

@@ -5,6 +5,7 @@ using OpenRa.FileFormats;
using BluntDirectX.Direct3D;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
namespace OpenRa.Game
{
@@ -14,13 +15,16 @@ namespace OpenRa.Game
IndexBuffer indexBuffer;
Sheet terrainSheet;
TileSet tileSet;
Viewport viewport;
Renderer renderer;
Map map;
public TerrainRenderer(Renderer renderer, Map map, Package tilePackage)
public TerrainRenderer(Renderer renderer, Map map, Package tilePackage, Viewport viewport)
{
this.renderer = renderer;
this.viewport = viewport;
viewport.RequestRegion(AnchorStyles.Left, viewport.ClientSize.Width - 128, Draw);
this.map = map;
tileSet = new TileSet(tilePackage, map.TileSuffix);
@@ -54,7 +58,7 @@ namespace OpenRa.Game
indexBuffer.SetData(indices.ToArray());
}
public void Draw( Viewport viewport )
public void Draw()
{
int indicesPerRow = map.Width * 6;
int verticesPerRow = map.Width * 4;

View File

@@ -7,7 +7,6 @@ using BluntDirectX.Direct3D;
namespace OpenRa.Game
{
delegate void Renderable(Renderer renderer, Viewport viewport);
class Viewport
{
readonly Size clientSize;
@@ -34,7 +33,7 @@ namespace OpenRa.Game
}
List<Region> regions = new List<Region>();
public void ResquestRegion(AnchorStyles anchor, int distanceFromAnchor, Renderable drawFunction)
public void RequestRegion(AnchorStyles anchor, int distanceFromAnchor, MethodInvoker drawFunction)
{
switch (anchor)
{
@@ -57,8 +56,15 @@ namespace OpenRa.Game
public void DrawRegions()
{
float2 r1 = new float2(2.0f / clientSize.Width, -2.0f / clientSize.Height);
float2 r2 = new float2(-1, 1);
renderer.BeginFrame(r1, r2, scrollPosition);
foreach (Region region in regions)
region.Draw(renderer, this);
renderer.EndFrame();
}
}
}

View File

@@ -4,6 +4,7 @@ using System.Text;
using BluntDirectX.Direct3D;
using OpenRa.FileFormats;
using System.Drawing;
using System.Windows.Forms;
namespace OpenRa.Game
{
@@ -11,12 +12,20 @@ namespace OpenRa.Game
{
List<Actor> actors = new List<Actor>();
SpriteRenderer spriteRenderer;
Renderer renderer;
Viewport viewport;
public World(Renderer renderer) { spriteRenderer = new SpriteRenderer(renderer, true); }
public World(Renderer renderer, Viewport viewport)
{
this.renderer = renderer;
this.viewport = viewport;
viewport.RequestRegion(AnchorStyles.Left, viewport.ClientSize.Width - 128, Draw);
spriteRenderer = new SpriteRenderer(renderer, true);
}
public void Add(Actor a) { actors.Add(a); }
public void Draw(Renderer renderer, Viewport viewport)
public void Draw()
{
Range<float2> range = new Range<float2>(viewport.Location, viewport.Size);