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"); TileMix = new Package("../../../" + map.Theater + ".mix");
renderer.SetPalette(new HardwarePalette(renderer.Device, map)); 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); treeCache = new TreeCache(renderer.Device, map, TileMix);
foreach (TreeReference treeReference in map.Trees) foreach (TreeReference treeReference in map.Trees)
@@ -65,7 +65,7 @@ namespace OpenRa.Game
world.Add(new Refinery(24 * new float2(5, 7), 1)); 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() internal void Run()
@@ -99,20 +99,7 @@ namespace OpenRa.Game
void Frame() void Frame()
{ {
float2 r1 = new float2(2, -2) / viewport.Size; viewport.DrawRegions();
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();
} }
} }
} }

View File

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

View File

@@ -6,6 +6,7 @@ using BluntDirectX.Direct3D;
using OpenRa.FileFormats; using OpenRa.FileFormats;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
using System.Windows.Forms;
namespace OpenRa.Game namespace OpenRa.Game
{ {
@@ -19,9 +20,12 @@ namespace OpenRa.Game
Sprite blank; Sprite blank;
Dictionary<string, Sprite> sprites = new Dictionary<string,Sprite>(); 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.CurrentRace = race;
techTree.Build("FACT", true); techTree.Build("FACT", true);
spriteRenderer = new SpriteRenderer(renderer, false); spriteRenderer = new SpriteRenderer(renderer, false);
@@ -54,7 +58,7 @@ namespace OpenRa.Game
DrawSprite(blank, ref p); DrawSprite(blank, ref p);
} }
public void Paint(Viewport viewport) public void Paint()
{ {
float2 buildPos = viewport.Location + new float2(viewport.ClientSize.Width - 128, 0); float2 buildPos = viewport.Location + new float2(viewport.ClientSize.Width - 128, 0);
float2 unitPos = viewport.Location + new float2(viewport.ClientSize.Width - 64, 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 BluntDirectX.Direct3D;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
using System.Windows.Forms;
namespace OpenRa.Game namespace OpenRa.Game
{ {
@@ -14,13 +15,16 @@ namespace OpenRa.Game
IndexBuffer indexBuffer; IndexBuffer indexBuffer;
Sheet terrainSheet; Sheet terrainSheet;
TileSet tileSet; TileSet tileSet;
Viewport viewport;
Renderer renderer; Renderer renderer;
Map map; Map map;
public TerrainRenderer(Renderer renderer, Map map, Package tilePackage) public TerrainRenderer(Renderer renderer, Map map, Package tilePackage, Viewport viewport)
{ {
this.renderer = renderer; this.renderer = renderer;
this.viewport = viewport;
viewport.RequestRegion(AnchorStyles.Left, viewport.ClientSize.Width - 128, Draw);
this.map = map; this.map = map;
tileSet = new TileSet(tilePackage, map.TileSuffix); tileSet = new TileSet(tilePackage, map.TileSuffix);
@@ -54,7 +58,7 @@ namespace OpenRa.Game
indexBuffer.SetData(indices.ToArray()); indexBuffer.SetData(indices.ToArray());
} }
public void Draw( Viewport viewport ) public void Draw()
{ {
int indicesPerRow = map.Width * 6; int indicesPerRow = map.Width * 6;
int verticesPerRow = map.Width * 4; int verticesPerRow = map.Width * 4;

View File

@@ -7,7 +7,6 @@ using BluntDirectX.Direct3D;
namespace OpenRa.Game namespace OpenRa.Game
{ {
delegate void Renderable(Renderer renderer, Viewport viewport);
class Viewport class Viewport
{ {
readonly Size clientSize; readonly Size clientSize;
@@ -34,7 +33,7 @@ namespace OpenRa.Game
} }
List<Region> regions = new List<Region>(); 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) switch (anchor)
{ {
@@ -57,8 +56,15 @@ namespace OpenRa.Game
public void DrawRegions() 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) foreach (Region region in regions)
region.Draw(renderer, this); region.Draw(renderer, this);
renderer.EndFrame();
} }
} }
} }

View File

@@ -4,6 +4,7 @@ using System.Text;
using BluntDirectX.Direct3D; using BluntDirectX.Direct3D;
using OpenRa.FileFormats; using OpenRa.FileFormats;
using System.Drawing; using System.Drawing;
using System.Windows.Forms;
namespace OpenRa.Game namespace OpenRa.Game
{ {
@@ -11,12 +12,20 @@ namespace OpenRa.Game
{ {
List<Actor> actors = new List<Actor>(); List<Actor> actors = new List<Actor>();
SpriteRenderer spriteRenderer; 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 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); Range<float2> range = new Range<float2>(viewport.Location, viewport.Size);