git-svn-id: svn://svn.ijw.co.nz/svn/OpenRa@1338 993157c7-ee19-0410-b2c4-bb4e9862e678
This commit is contained in:
@@ -52,7 +52,7 @@ namespace OpenRa.Game
|
|||||||
game.world.Add( mcv );
|
game.world.Add( mcv );
|
||||||
game.world.Add( new Refinery( new int2( 7, 5 ), 2 ) );
|
game.world.Add( new Refinery( new int2( 7, 5 ), 2 ) );
|
||||||
|
|
||||||
sidebar = new Sidebar(game.techTree, Race.Soviet, renderer, game.viewport);
|
sidebar = new Sidebar(Race.Soviet, renderer, game);
|
||||||
|
|
||||||
renderer.SetPalette( new HardwarePalette( renderer, game.map ) );
|
renderer.SetPalette( new HardwarePalette( renderer, game.map ) );
|
||||||
}
|
}
|
||||||
@@ -74,21 +74,9 @@ namespace OpenRa.Game
|
|||||||
lastPos = new float2(e.Location);
|
lastPos = new float2(e.Location);
|
||||||
|
|
||||||
if (e.Button == MouseButtons.Left)
|
if (e.Button == MouseButtons.Left)
|
||||||
{
|
foreach (Region region in game.viewport.Regions)
|
||||||
float2 point = new float2(e.Location) + game.viewport.Location;
|
if (region.Contains(lastPos))
|
||||||
RectangleF rect = new RectangleF(sidebar.Region.Location.ToPointF(), new SizeF(sidebar.Width, game.viewport.Height));
|
region.Clicked(e);
|
||||||
if (rect.Contains(point.ToPointF()))
|
|
||||||
{
|
|
||||||
sidebar.Build( sidebar.FindSpriteAtPoint( point ), game );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
float2 xy = (1 / 24.0f) * point;
|
|
||||||
if( game.world.orderGenerator != null )
|
|
||||||
{
|
|
||||||
IOrder order = game.world.orderGenerator.Order( new int2( (int)xy.X, (int)xy.Y ) );
|
|
||||||
game.Issue( order );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnMouseMove(MouseEventArgs e)
|
protected override void OnMouseMove(MouseEventArgs e)
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ namespace OpenRa.Game
|
|||||||
}
|
}
|
||||||
|
|
||||||
Action drawFunction;
|
Action drawFunction;
|
||||||
|
MouseEventHandler mouseHandler;
|
||||||
|
RectangleF rect;
|
||||||
|
|
||||||
static float2 MakeSize(Viewport v, DockStyle d, float size)
|
static float2 MakeSize(Viewport v, DockStyle d, float size)
|
||||||
{
|
{
|
||||||
@@ -42,7 +44,12 @@ namespace OpenRa.Game
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Region Create(Viewport v, DockStyle d, float size, Action f)
|
public void Clicked(MouseEventArgs e)
|
||||||
|
{
|
||||||
|
mouseHandler(this, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Region Create(Viewport v, DockStyle d, float size, Action f, MouseEventHandler m)
|
||||||
{
|
{
|
||||||
float2 s = MakeSize(v, d, size);
|
float2 s = MakeSize(v, d, size);
|
||||||
|
|
||||||
@@ -50,23 +57,30 @@ namespace OpenRa.Game
|
|||||||
{
|
{
|
||||||
case DockStyle.Top:
|
case DockStyle.Top:
|
||||||
case DockStyle.Left:
|
case DockStyle.Left:
|
||||||
return new Region(new float2(0,0), s, f, v);
|
return new Region(new float2(0,0), s, v, f, m);
|
||||||
|
|
||||||
case DockStyle.Right:
|
case DockStyle.Right:
|
||||||
case DockStyle.Bottom:
|
case DockStyle.Bottom:
|
||||||
return new Region(new float2( v.Width - s.X, v.Height - s.Y ), s, f, v);
|
return new Region(new float2( v.Width - s.X, v.Height - s.Y ), s, v, f, m);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Region(float2 location, float2 size, Action drawFunction, Viewport viewport)
|
Region(float2 location, float2 size, Viewport viewport, Action drawFunction, MouseEventHandler mouseHandler)
|
||||||
{
|
{
|
||||||
this.location = location;
|
this.location = location;
|
||||||
this.size = size;
|
this.size = size;
|
||||||
this.drawFunction = drawFunction;
|
this.drawFunction = drawFunction;
|
||||||
this.viewport = viewport;
|
this.viewport = viewport;
|
||||||
|
this.mouseHandler = mouseHandler;
|
||||||
|
rect = new RectangleF(location.ToPointF(), new SizeF(size.ToPointF()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Contains(float2 point)
|
||||||
|
{
|
||||||
|
return rect.Contains(point.ToPointF());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Draw(Renderer renderer)
|
public void Draw(Renderer renderer)
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ namespace OpenRa.Game
|
|||||||
|
|
||||||
SpriteRenderer spriteRenderer;
|
SpriteRenderer spriteRenderer;
|
||||||
Sprite blank;
|
Sprite blank;
|
||||||
|
Game game;
|
||||||
readonly Region region;
|
readonly Region region;
|
||||||
|
|
||||||
public Region Region
|
public Region Region
|
||||||
@@ -32,11 +33,12 @@ namespace OpenRa.Game
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Sidebar( TechTree.TechTree techTree, Race race, Renderer renderer, Viewport viewport )
|
public Sidebar( Race race, Renderer renderer, Game game )
|
||||||
{
|
{
|
||||||
this.techTree = techTree;
|
this.techTree = game.techTree;
|
||||||
region = Region.Create(viewport, DockStyle.Right, 128, Paint);
|
this.game = game;
|
||||||
viewport.AddRegion( region );
|
region = Region.Create(game.viewport, DockStyle.Right, 128, Paint, MouseHandler);
|
||||||
|
game.viewport.AddRegion( region );
|
||||||
techTree.CurrentRace = race;
|
techTree.CurrentRace = race;
|
||||||
techTree.Build("FACT", true);
|
techTree.Build("FACT", true);
|
||||||
spriteRenderer = new SpriteRenderer(renderer, false);
|
spriteRenderer = new SpriteRenderer(renderer, false);
|
||||||
@@ -47,8 +49,9 @@ namespace OpenRa.Game
|
|||||||
blank = SheetBuilder.Add(new Size((int)spriteWidth, (int)spriteHeight), 16);
|
blank = SheetBuilder.Add(new Size((int)spriteWidth, (int)spriteHeight), 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Build(string key, Game game )
|
public void Build(string key)
|
||||||
{
|
{
|
||||||
|
if (string.IsNullOrEmpty(key)) return;
|
||||||
game.world.orderGenerator = new PlaceBuilding( 1, key.ToLowerInvariant() );
|
game.world.orderGenerator = new PlaceBuilding( 1, key.ToLowerInvariant() );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,6 +118,12 @@ namespace OpenRa.Game
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MouseHandler(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
float2 point = new float2(e.Location);
|
||||||
|
Build(FindSpriteAtPoint(point));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class PlaceBuilding : IOrderGenerator
|
class PlaceBuilding : IOrderGenerator
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ namespace OpenRa.Game
|
|||||||
public TerrainRenderer(Renderer renderer, Map map, Viewport viewport)
|
public TerrainRenderer(Renderer renderer, Map map, Viewport viewport)
|
||||||
{
|
{
|
||||||
this.renderer = renderer;
|
this.renderer = renderer;
|
||||||
region = Region.Create(viewport, DockStyle.Left, viewport.Width - 128, Draw);
|
region = Region.Create(viewport, DockStyle.Left, viewport.Width - 128, Draw, delegate { });
|
||||||
viewport.AddRegion(region);
|
viewport.AddRegion(region);
|
||||||
this.map = map;
|
this.map = map;
|
||||||
|
|
||||||
|
|||||||
@@ -49,5 +49,10 @@ namespace OpenRa.Game
|
|||||||
|
|
||||||
renderer.EndFrame();
|
renderer.EndFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IEnumerable<Region> Regions
|
||||||
|
{
|
||||||
|
get { return regions; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ namespace OpenRa.Game
|
|||||||
|
|
||||||
public World(Renderer renderer, Game game)
|
public World(Renderer renderer, Game game)
|
||||||
{
|
{
|
||||||
region = Region.Create(game.viewport, DockStyle.Left, game.viewport.Width - 128, Draw);
|
region = Region.Create(game.viewport, DockStyle.Left, game.viewport.Width - 128, Draw, WorldClicked);
|
||||||
this.game = game;
|
this.game = game;
|
||||||
game.viewport.AddRegion(region);
|
game.viewport.AddRegion(region);
|
||||||
|
|
||||||
@@ -32,6 +32,16 @@ namespace OpenRa.Game
|
|||||||
|
|
||||||
int lastTime = Environment.TickCount;
|
int lastTime = Environment.TickCount;
|
||||||
|
|
||||||
|
void WorldClicked(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
float2 xy = (1 / 24.0f) * (new float2(e.Location) + game.viewport.Location);
|
||||||
|
if (orderGenerator != null)
|
||||||
|
{
|
||||||
|
IOrder order = orderGenerator.Order(new int2((int)xy.X, (int)xy.Y));
|
||||||
|
game.Issue(order);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Draw()
|
void Draw()
|
||||||
{
|
{
|
||||||
int t = Environment.TickCount;
|
int t = Environment.TickCount;
|
||||||
|
|||||||
Reference in New Issue
Block a user