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

This commit is contained in:
beedee
2007-07-14 06:12:16 +00:00
parent 9ea296c34d
commit 36491edc12
6 changed files with 53 additions and 18 deletions

View File

@@ -22,6 +22,7 @@ namespace OpenRa.Game
TreeCache treeCache; TreeCache treeCache;
TerrainRenderer terrain; TerrainRenderer terrain;
Sidebar sidebar; Sidebar sidebar;
Viewport viewport;
static Size GetResolution(Settings settings) static Size GetResolution(Settings settings)
{ {
@@ -36,6 +37,7 @@ namespace OpenRa.Game
FormBorderStyle = FormBorderStyle.None; FormBorderStyle = FormBorderStyle.None;
BackColor = Color.Black; BackColor = Color.Black;
renderer = new Renderer(this, GetResolution(settings), false); renderer = new Renderer(this, GetResolution(settings), false);
viewport = new Viewport(ClientSize);
Visible = true; Visible = true;
SheetBuilder.Initialize(renderer.Device); SheetBuilder.Initialize(renderer.Device);
@@ -71,7 +73,7 @@ namespace OpenRa.Game
} }
} }
PointF scrollPos;
int x1,y1; int x1,y1;
protected override void OnMouseDown(MouseEventArgs e) protected override void OnMouseDown(MouseEventArgs e)
@@ -88,6 +90,7 @@ namespace OpenRa.Game
if (e.Button != 0) if (e.Button != 0)
{ {
PointF scrollPos = viewport.ScrollPosition;
scrollPos.X += x1 - e.X; scrollPos.X += x1 - e.X;
scrollPos.Y += y1 - e.Y; scrollPos.Y += y1 - e.Y;
@@ -96,25 +99,24 @@ namespace OpenRa.Game
scrollPos.X = Util.Constrain(scrollPos.X, new Range<float>(0, map.Width * 24 - ClientSize.Width + 128)); scrollPos.X = Util.Constrain(scrollPos.X, new Range<float>(0, map.Width * 24 - ClientSize.Width + 128));
scrollPos.Y = Util.Constrain(scrollPos.Y, new Range<float>(0, map.Height * 24 - ClientSize.Height)); scrollPos.Y = Util.Constrain(scrollPos.Y, new Range<float>(0, map.Height * 24 - ClientSize.Height));
viewport.ScrollPosition = scrollPos;
} }
} }
void Frame() void Frame()
{ {
PointF r1 = new PointF(2.0f / ClientSize.Width, -2.0f / ClientSize.Height); PointF r1 = new PointF(2.0f / viewport.ClientSize.Width, -2.0f / viewport.ClientSize.Height);
PointF r2 = new PointF(-1, 1); PointF r2 = new PointF(-1, 1);
renderer.BeginFrame(r1, r2, scrollPos); renderer.BeginFrame(r1, r2, viewport.ScrollPosition);
renderer.Device.EnableScissor(0, 0, ClientSize.Width - 128, ClientSize.Height); renderer.Device.EnableScissor(0, 0, viewport.ClientSize.Width - 128, viewport.ClientSize.Height);
terrain.Draw( ClientSize, scrollPos ); terrain.Draw(viewport);
world.Draw(renderer, world.Draw(renderer, viewport);
new Range<float>(scrollPos.X, scrollPos.X + ClientSize.Width),
new Range<float>(scrollPos.Y, scrollPos.Y + ClientSize.Height));
renderer.Device.DisableScissor(); renderer.Device.DisableScissor();
sidebar.Paint(ClientSize, scrollPos); sidebar.Paint(viewport);
renderer.EndFrame(); renderer.EndFrame();
} }

View File

@@ -64,6 +64,7 @@
<Compile Include="UnitSheetBuilder.cs" /> <Compile Include="UnitSheetBuilder.cs" />
<Compile Include="Util.cs" /> <Compile Include="Util.cs" />
<Compile Include="Vertex.cs" /> <Compile Include="Vertex.cs" />
<Compile Include="Viewport.cs" />
<Compile Include="World.cs" /> <Compile Include="World.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -54,10 +54,10 @@ namespace OpenRa.Game
DrawSprite(blank, ref p); DrawSprite(blank, ref p);
} }
public void Paint(Size clientSize, PointF scrollOffset) public void Paint(Viewport viewport)
{ {
PointF buildPos = new PointF(clientSize.Width - 128 + scrollOffset.X, scrollOffset.Y); PointF buildPos = new PointF(viewport.ClientSize.Width - 128 + viewport.ScrollPosition.X, viewport.ScrollPosition.Y);
PointF unitPos = new PointF(clientSize.Width - 64 + scrollOffset.X, scrollOffset.Y); PointF unitPos = new PointF(viewport.ClientSize.Width - 64 + viewport.ScrollPosition.X, viewport.ScrollPosition.Y);
foreach (Item i in techTree.BuildableItems) foreach (Item i in techTree.BuildableItems)
{ {
@@ -70,8 +70,8 @@ namespace OpenRa.Game
DrawSprite( sprite, ref unitPos ); DrawSprite( sprite, ref unitPos );
} }
Fill(clientSize, buildPos); Fill(viewport.ClientSize, buildPos);
Fill(clientSize, unitPos); Fill(viewport.ClientSize, unitPos);
spriteRenderer.Flush(); spriteRenderer.Flush();
} }

View File

@@ -54,14 +54,14 @@ namespace OpenRa.Game
indexBuffer.SetData(indices.ToArray()); indexBuffer.SetData(indices.ToArray());
} }
public void Draw( Size screenSize, PointF scrollPos ) public void Draw( Viewport viewport )
{ {
int indicesPerRow = map.Width * 6; int indicesPerRow = map.Width * 6;
int verticesPerRow = map.Width * 4; int verticesPerRow = map.Width * 4;
int visibleRows = (int)(screenSize.Height / 24.0f + 2); int visibleRows = (int)(viewport.ClientSize.Height / 24.0f + 2);
int firstRow = (int)(scrollPos.Y / 24.0f); int firstRow = (int)(viewport.ScrollPosition.Y / 24.0f);
int lastRow = firstRow + visibleRows; int lastRow = firstRow + visibleRows;
if (lastRow < 0 || firstRow > map.Height) if (lastRow < 0 || firstRow > map.Height)

30
OpenRa.Game/Viewport.cs Normal file
View File

@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
namespace OpenRa.Game
{
class Viewport
{
readonly Size clientSize;
PointF scrollPosition;
public PointF ScrollPosition
{
get { return scrollPosition; }
set { scrollPosition = value; }
}
public Size ClientSize
{
get { return clientSize; }
}
public Viewport(Size clientSize)
{
this.clientSize = clientSize;
}
}
}

View File

@@ -19,8 +19,10 @@ namespace OpenRa.Game
public void Add(Actor a) { actors.Add(a); } public void Add(Actor a) { actors.Add(a); }
public void Draw(Renderer renderer, Range<float> xr, Range<float> yr) public void Draw(Renderer renderer, Viewport viewport)
{ {
Range<float> xr = new Range<float>(viewport.ScrollPosition.X, viewport.ScrollPosition.X + viewport.ClientSize.Width);
Range<float> yr = new Range<float>(viewport.ScrollPosition.Y, viewport.ScrollPosition.Y + viewport.ClientSize.Height);
foreach (Actor a in actors) foreach (Actor a in actors)
{ {
Sprite[] images = a.CurrentImages; Sprite[] images = a.CurrentImages;