strip a lot of dead crap from Minimap; fix bugs in prev; rudimentary input handler for minimap

This commit is contained in:
Chris Forbes
2010-04-28 11:14:21 +12:00
parent 79558dc57a
commit 2f4df42924
2 changed files with 30 additions and 23 deletions

View File

@@ -30,10 +30,10 @@ namespace OpenRA.Graphics
class Minimap class Minimap
{ {
readonly World world; readonly World world;
Sheet sheet, mapOnlySheet; Sheet sheet;
SpriteRenderer rgbaRenderer; SpriteRenderer rgbaRenderer;
LineRenderer lineRenderer; LineRenderer lineRenderer;
Sprite sprite, mapOnlySprite; Sprite sprite;
Bitmap terrain, oreLayer; Bitmap terrain, oreLayer;
Rectangle bounds; Rectangle bounds;
@@ -42,13 +42,10 @@ namespace OpenRA.Graphics
const int alpha = 230; const int alpha = 230;
public void Tick() { }
public Minimap(World world, Renderer r) public Minimap(World world, Renderer r)
{ {
this.world = world; this.world = world;
sheet = new Sheet(r, new Size(world.Map.MapSize.X, world.Map.MapSize.Y)); sheet = new Sheet(r, new Size(world.Map.MapSize.X, world.Map.MapSize.Y));
mapOnlySheet = new Sheet(r, new Size(world.Map.MapSize.X, world.Map.MapSize.Y));
lineRenderer = new LineRenderer(r); lineRenderer = new LineRenderer(r);
rgbaRenderer = r.RgbaSpriteRenderer; rgbaRenderer = r.RgbaSpriteRenderer;
@@ -59,8 +56,7 @@ namespace OpenRA.Graphics
bounds = new Rectangle(world.Map.TopLeft.X - dw, world.Map.TopLeft.Y - dh, size, size); bounds = new Rectangle(world.Map.TopLeft.X - dw, world.Map.TopLeft.Y - dh, size, size);
sprite = new Sprite(sheet, bounds, TextureChannel.Alpha); sprite = new Sprite(sheet, bounds, TextureChannel.Alpha);
mapOnlySprite = new Sprite(mapOnlySheet, bounds, TextureChannel.Alpha);
shroudColor = Color.FromArgb(alpha, Color.Black); shroudColor = Color.FromArgb(alpha, Color.Black);
ownedSpawnPoint = ChromeProvider.GetImage(r, "spawnpoints", "owned"); ownedSpawnPoint = ChromeProvider.GetImage(r, "spawnpoints", "owned");
@@ -97,16 +93,6 @@ namespace OpenRA.Graphics
return terrain; return terrain;
} }
public static Bitmap RenderTerrainBitmapWithSpawnPoints(Map map, TileSet tileset)
{
/* todo: do this a bit nicer */
var terrain = RenderTerrainBitmap(map, tileset);
foreach (var sp in map.SpawnPoints)
terrain.SetPixel(sp.X, sp.Y, Color.White);
return terrain;
}
public void Update() public void Update()
{ {
if (terrain == null) if (terrain == null)
@@ -123,8 +109,6 @@ namespace OpenRA.Graphics
oreLayer.SetPixel(x, y, Color.FromArgb(alpha, terrainTypeColors[world.Map.Theater].ColorForTerrainType(TerrainType.Ore))); oreLayer.SetPixel(x, y, Color.FromArgb(alpha, terrainTypeColors[world.Map.Theater].ColorForTerrainType(TerrainType.Ore)));
} }
mapOnlySheet.Texture.SetData(oreLayer);
if (!world.GameHasStarted || !world.Queries.OwnedBy[world.LocalPlayer].WithTrait<ProvidesRadar>().Any()) if (!world.GameHasStarted || !world.Queries.OwnedBy[world.LocalPlayer].WithTrait<ProvidesRadar>().Any())
return; return;
@@ -159,9 +143,9 @@ namespace OpenRA.Graphics
sheet.Texture.SetData(bitmap); sheet.Texture.SetData(bitmap);
} }
public void Draw(RectangleF rect, bool mapOnly) public void Draw(RectangleF rect)
{ {
rgbaRenderer.DrawSprite(mapOnly ? mapOnlySprite : sprite, rgbaRenderer.DrawSprite(sprite,
new float2(rect.X, rect.Y), "chrome", new float2(rect.Width, rect.Height)); new float2(rect.X, rect.Y), "chrome", new float2(rect.Width, rect.Height));
rgbaRenderer.Flush(); rgbaRenderer.Flush();
} }

View File

@@ -47,6 +47,29 @@ namespace OpenRA.Widgets
float? lastPowerDrainedPos; float? lastPowerDrainedPos;
string radarCollection; string radarCollection;
int2 MinimapPixelToCell(RectangleF r, int2 p)
{
return int2.Zero;
}
public override bool HandleInput(MouseInput mi)
{
if (!hasRadar || radarAnimating) return false; // we're not set up for this.
var mapRect = new RectangleF(radarOrigin.X + 9, radarOrigin.Y + (192 - radarMinimapHeight) / 2,
192, radarMinimapHeight);
if (!mapRect.Contains(mi.Location.ToPointF()))
return false;
var loc = MinimapPixelToCell(mapRect, mi.Location);
if ((mi.Event == MouseInputEvent.Down || mi.Event == MouseInputEvent.Move) && mi.Button == MouseButton.Left)
Game.viewport.Center(loc);
return true;
}
public override Widget Clone() { throw new NotImplementedException("Why are you Cloning RadarBin?"); } public override Widget Clone() { throw new NotImplementedException("Why are you Cloning RadarBin?"); }
@@ -89,7 +112,7 @@ namespace OpenRA.Widgets
radarMinimapHeight = float2.Lerp(0, 192, (radarAnimationFrame - radarSlideAnimationLength) * 1.0f / radarActivateAnimationLength); radarMinimapHeight = float2.Lerp(0, 192, (radarAnimationFrame - radarSlideAnimationLength) * 1.0f / radarActivateAnimationLength);
// Animation is complete // Animation is complete
if (radarAnimationFrame == (hasRadar ? radarSlideAnimationLength : 0)) if (radarAnimationFrame == (hasRadar ? radarSlideAnimationLength+radarActivateAnimationLength : 0))
radarAnimating = false; radarAnimating = false;
} }
@@ -121,7 +144,7 @@ namespace OpenRA.Widgets
if (radarAnimationFrame >= radarSlideAnimationLength) if (radarAnimationFrame >= radarSlideAnimationLength)
{ {
RectangleF mapRect = new RectangleF(radarOrigin.X + 9, radarOrigin.Y + (192 - radarMinimapHeight) / 2, 192, radarMinimapHeight); RectangleF mapRect = new RectangleF(radarOrigin.X + 9, radarOrigin.Y + (192 - radarMinimapHeight) / 2, 192, radarMinimapHeight);
world.Minimap.Draw(mapRect, false); world.Minimap.Draw(mapRect);
} }
} }