show potential selections in band-box; FindUnits is still wrong.

This commit is contained in:
Chris Forbes
2009-10-08 22:39:26 +13:00
parent 40969087f0
commit f6eb20bbf8
5 changed files with 43 additions and 33 deletions

View File

@@ -58,17 +58,20 @@ namespace OpenRa.Game
orderGenerator.Order(game, new int2((int)xy.X, (int)xy.Y)).Apply(game);
}
public IOrderGenerator FindUnit(float2 a, float2 b)
public Unit FindUnit(float2 a, float2 b)
{
return FindUnits(game, 24 * a, 24 * b).FirstOrDefault();
}
public static IEnumerable<Unit> FindUnits(Game game, float2 a, float2 b)
{
a = 24 * a; b = 24 * b;
var min = new float2(Math.Min(a.X, b.X), Math.Min(a.Y, b.Y));
var max = new float2(Math.Max(a.X, b.X), Math.Max(a.Y, b.Y));
var rect = new RectangleF(min.X, min.Y, max.X - min.X, max.Y - min.Y);
return game.world.Actors.OfType<Unit>()
.Where(x => (x.owner == game.LocalPlayer) && (x.Bounds.IntersectsWith(rect)))
.FirstOrDefault();
.Where(x => (x.owner == game.LocalPlayer) && (x.Bounds.IntersectsWith(rect)));
}
public Pair<float2, float2>? SelectionBox()

View File

@@ -24,7 +24,7 @@ namespace OpenRa.Game
public readonly Dictionary<int, Player> players = new Dictionary<int, Player>();
// temporary, until we remove all the subclasses of Building
public Dictionary<string, Func<int2, Player, Building>> buildingCreation;
public Dictionary<string, Func<int2, Player, PlayerOwned>> buildingCreation;
public Player LocalPlayer { get { return players[localPlayerIndex]; } }
@@ -51,11 +51,12 @@ namespace OpenRa.Game
var buildings = new[] { "fact", "powr", "apwr", "barr", "atek", "stek", "dome" };
buildingCreation = buildings.ToDictionary(s => s,
s => (Func<int2, Player, Building>)(
s => (Func<int2, Player, PlayerOwned>)(
(l, o) => new Building(s, l, o, this)));
buildingCreation.Add("proc", (location, owner) => new Refinery(location, owner, this));
buildingCreation.Add("weap", (location, owner) => new WarFactory(location, owner, this));
buildingCreation.Add("3tnk", (location, owner) => new TurretedUnit("3tnk", location, owner, this));
controller = new Controller(this); // CAREFUL THERES AN UGLY HIDDEN DEPENDENCY HERE STILL
worldRenderer = new WorldRenderer(renderer, world);

View File

@@ -53,28 +53,6 @@ namespace OpenRa.Game.Graphics
spriteRenderer.Flush();
var selectedUnit = world.game.controller.orderGenerator as Unit;
if (selectedUnit != null)
{
var center = selectedUnit.CenterLocation;
var size = selectedUnit.SelectedSize;
var xy = center - 0.5f * size;
var XY = center + 0.5f * size;
var Xy = new float2( XY.X, xy.Y );
var xY = new float2( xy.X, XY.Y );
lineRenderer.DrawLine(xy, xy + new float2(4, 0), Color.White, Color.White);
lineRenderer.DrawLine(xy, xy + new float2(0, 4), Color.White, Color.White);
lineRenderer.DrawLine(Xy, Xy + new float2(-4, 0), Color.White, Color.White);
lineRenderer.DrawLine(Xy, Xy + new float2(0, 4), Color.White, Color.White);
lineRenderer.DrawLine(xY, xY + new float2(4, 0), Color.White, Color.White);
lineRenderer.DrawLine(xY, xY + new float2(0, -4), Color.White, Color.White);
lineRenderer.DrawLine(XY, XY + new float2(-4, 0), Color.White, Color.White);
lineRenderer.DrawLine(XY, XY + new float2(0, -4), Color.White, Color.White);
}
var selbox = world.game.controller.SelectionBox();
if (selbox != null)
{
@@ -86,9 +64,38 @@ namespace OpenRa.Game.Graphics
lineRenderer.DrawLine(a + b, a + b + c, Color.White, Color.White);
lineRenderer.DrawLine(a + b + c, a + c, Color.White, Color.White);
lineRenderer.DrawLine(a, a + c, Color.White, Color.White);
foreach (var u in Controller.FindUnits(world.game, selbox.Value.First, selbox.Value.Second))
DrawSelectionBox(u, Color.Yellow);
}
var selectedUnit = world.game.controller.orderGenerator as Unit;
if (selectedUnit != null)
DrawSelectionBox(selectedUnit, Color.White);
lineRenderer.Flush();
}
void DrawSelectionBox(Unit selectedUnit, Color c)
{
var center = selectedUnit.CenterLocation;
var size = selectedUnit.SelectedSize;
var xy = center - 0.5f * size;
var XY = center + 0.5f * size;
var Xy = new float2(XY.X, xy.Y);
var xY = new float2(xy.X, XY.Y);
lineRenderer.DrawLine(xy, xy + new float2(4, 0), c, c);
lineRenderer.DrawLine(xy, xy + new float2(0, 4), c, c);
lineRenderer.DrawLine(Xy, Xy + new float2(-4, 0), c, c);
lineRenderer.DrawLine(Xy, Xy + new float2(0, 4), c, c);
lineRenderer.DrawLine(xY, xY + new float2(4, 0), c, c);
lineRenderer.DrawLine(xY, xY + new float2(0, -4), c, c);
lineRenderer.DrawLine(XY, XY + new float2(-4, 0), c, c);
lineRenderer.DrawLine(XY, XY + new float2(0, -4), c, c);
}
}
}

View File

@@ -200,7 +200,7 @@ namespace OpenRa.Game
{
game.world.AddFrameEndTask(_ =>
{
Func<int2, Player, Building> newBuilding;
Func<int2, Player, PlayerOwned> newBuilding;
if (game.buildingCreation.TryGetValue(building.Name, out newBuilding))
{
Log.Write("Player \"{0}\" builds {1}", building.Owner.PlayerName, building.Name);

View File

@@ -27,20 +27,19 @@ VertexOut Simple_vp(VertexIn v) {
o.Position = float4(p.x,p.y,0,1);
o.Color.rg = v.RG.xy;
o.Color.ba = v.BA.xy;
o.Color.a = 1.0f;
// o.Color.a = 1.0f;
return o;
}
const float2 texelOffset = float2( 0, 1.0f/32.0f );
float4 Simple_fp(FragmentIn f) : COLOR0 {
return float4(1,1,1,1);
//return f.Color;
return f.Color;
}
technique high_quality {
pass p0 {
AlphaBlendEnable = false;
AlphaBlendEnable = true;
ZWriteEnable = false;
ZEnable = false;
CullMode = None;