git-svn-id: svn://svn.ijw.co.nz/svn/OpenRa@1220 993157c7-ee19-0410-b2c4-bb4e9862e678
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
30
OpenRa.Game/Viewport.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user