Begin chrome reworking

This commit is contained in:
Paul Chote
2010-01-09 13:46:46 +13:00
parent e9fd1daeba
commit 9fc2d9ecfb
3 changed files with 67 additions and 60 deletions

View File

@@ -28,6 +28,8 @@ namespace OpenRa.Game
readonly Animation sellButton;
readonly Animation pwrdownButton;
readonly Animation optionsButton;
Animation radarAnim, alliesAnim, sovietAnim;
readonly Sprite optionsTop;
readonly Sprite optionsBottom;
@@ -38,6 +40,7 @@ namespace OpenRa.Game
readonly Sprite optionsBottomLeft;
readonly Sprite optionsBottomRight;
readonly Sprite optionsBackground;
readonly Sprite radarShim;
readonly SpriteRenderer shpRenderer;
readonly Animation cantBuild;
@@ -51,11 +54,23 @@ namespace OpenRa.Game
readonly Sprite[] shimSprites;
readonly Sprite blank;
readonly int paletteColumns;
readonly int2 paletteOrigin;
// Build palette positioning
const int paletteColumns = 3;
const int paletteRows = 5;
static int2 paletteOrigin= new int2(Game.viewport.Width - paletteColumns * 64 - 9, 220);
// Radar positioning
static float2 radarSize = new float2(181, 160);
static float2 shimSize = new float2(181, 181);
static float2 radarOrigin = new float2(Game.viewport.Width - radarSize.X, 30);
// Power bar positioning
static float2 powerOrigin = new float2(radarOrigin.X-20, 30);
bool hadRadar = false;
bool optionsPressed = false;
const int MinRows = 4;
string currentTab = "Building";
static string[] groups = new string[] { "Building", "Defense", "Infantry", "Vehicle", "Plane", "Ship" };
@@ -64,12 +79,7 @@ namespace OpenRa.Game
const int NumClockFrames = 54;
public Chrome(Renderer r)
{
// Positioning of chrome elements
// Build palette
paletteColumns = 4;
paletteOrigin = new int2(Game.viewport.Width - paletteColumns * 64 - 9 - 20, 282);
{
this.renderer = r;
chromeTexture = new Sheet(renderer, "specialbin.png");
rgbaRenderer = new SpriteRenderer(renderer, true, renderer.RgbaSpriteShader);
@@ -119,6 +129,14 @@ namespace OpenRa.Game
optionsBottomRight = SpriteSheetBuilder.LoadAllSprites("dd-crnr")[3];
optionsBackground = SpriteSheetBuilder.LoadAllSprites("dd-bkgnd")[Game.CosmeticRandom.Next(4)];
// Radar
sovietAnim = new Animation("ussrradr");
sovietAnim.PlayRepeating("idle");
alliesAnim = new Animation("natoradr");
alliesAnim.PlayRepeating("idle");
radarAnim = Game.LocalPlayer.Race == Race.Allies ? alliesAnim : sovietAnim;
radarShim = SpriteSheetBuilder.LoadAllSprites("side1na")[0];
blank = SheetBuilder.Add(new Size(64, 48), 16);
sprites = groups
@@ -161,6 +179,12 @@ namespace OpenRa.Game
clock = new Animation("clock");
}
public void Tick()
{
radarAnim = Game.LocalPlayer.Race == Race.Allies ? alliesAnim : sovietAnim;
radarAnim.Tick();
}
public void Draw()
{
buttons.Clear();
@@ -178,7 +202,7 @@ namespace OpenRa.Game
PerfHistory.Render(renderer, Game.worldRenderer.lineRenderer);
DrawMinimap();
DrawRadar();
rgbaRenderer.DrawSprite(moneyBinSprite, new float2(Game.viewport.Width - 320, 0), PaletteType.Chrome);
@@ -194,7 +218,7 @@ namespace OpenRa.Game
DrawOptionsMenu();
}
void DrawMinimap()
void DrawRadar()
{
var hasRadar = Game.world.Actors.Any(a => a.Owner == Game.LocalPlayer
&& a.traits.Contains<ProvidesRadar>()
@@ -205,8 +229,28 @@ namespace OpenRa.Game
hadRadar = hasRadar;
var isJammed = false; // todo: MRJ can do this
if (hasRadar && radarAnim.CurrentSequence.Name == "idle")
radarAnim.PlayThen("open", () => radarAnim.PlayRepeating("active"));
if (hasRadar && radarAnim.CurrentSequence.Name == "no-power")
radarAnim.PlayBackwardsThen("close", () => radarAnim.PlayRepeating("active"));
if (!hasRadar && radarAnim.CurrentSequence.Name == "active")
radarAnim.PlayThen("close", () => radarAnim.PlayRepeating("no-power"));
if (isJammed && radarAnim.CurrentSequence.Name == "active")
radarAnim.PlayRepeating("jammed");
if (!isJammed && radarAnim.CurrentSequence.Name == "jammed")
radarAnim.PlayRepeating("active");
shpRenderer.DrawSprite(radarShim, radarOrigin + Game.viewport.Location, PaletteType.Chrome, shimSize);
shpRenderer.DrawSprite(radarAnim.Image, radarOrigin + Game.viewport.Location, PaletteType.Chrome, radarSize);
shpRenderer.Flush();
if (radarAnim.CurrentSequence.Name == "active")
{
// Todo: fix minimap size/position
Game.minimap.Draw(radarOrigin, hasRadar, isJammed);
}
Game.minimap.Draw(new float2(Game.viewport.Width - 247, 10), hasRadar, isJammed);
}
void AddButton(Rectangle r, Action<bool> b) { buttons.Add(Pair.New(r, b)); }
@@ -234,16 +278,6 @@ namespace OpenRa.Game
var producing = queue.CurrentItem(groupName);
var index = q.Key == currentTab ? 2 : (producing != null && producing.Done) ? 1 : 0;
// Don't let tabs overlap the bevel
if (y > paletteOrigin.Y + paletteHeight - tabHeight - 9 && y < paletteOrigin.Y + paletteHeight)
y += tabHeight;
// Stick tabs to the edge of the screen
if (y > paletteOrigin.Y + paletteHeight)
x = Game.viewport.Width - tabWidth;
rgbaRenderer.DrawSprite(q.Value[index], new float2(x, y), PaletteType.Chrome);
buttons.Add(Pair.New(new Rectangle(x, y, tabWidth, tabHeight),
@@ -283,14 +317,14 @@ namespace OpenRa.Game
void DrawPower()
{
// Add the renderer offset
var origin = powerOrigin + Game.viewport.Location;
//draw background
float2 powerOrigin = Game.viewport.Location + new float2(Game.viewport.Width - 20, paletteOrigin.Y);
shpRenderer.DrawSprite(powerLevelTopSprite, powerOrigin, PaletteType.Chrome);
shpRenderer.DrawSprite(powerLevelBottomSprite, powerOrigin + new float2(0, powerLevelTopSprite.size.Y), PaletteType.Chrome);
shpRenderer.DrawSprite(powerLevelTopSprite, origin, PaletteType.Chrome);
shpRenderer.DrawSprite(powerLevelBottomSprite, origin + new float2(0, powerLevelTopSprite.size.Y), PaletteType.Chrome);
shpRenderer.Flush();
float2 top = powerOrigin + new float2(0, 15);
float2 bottom = powerOrigin + new float2(0, powerLevelTopSprite.size.Y + powerLevelBottomSprite.size.Y) - new float2(0, 50);
float2 top = origin + new float2(0, 15);
float2 bottom = origin + new float2(0, powerLevelTopSprite.size.Y + powerLevelBottomSprite.size.Y) - new float2(0, 50);
var scale = 100;
while(Math.Max(Game.LocalPlayer.PowerProvided, Game.LocalPlayer.PowerDrained) >= scale) scale *= 2;
@@ -518,7 +552,7 @@ namespace OpenRa.Game
if (++x == columns) { x = 0; y++; }
}
while (x != 0 || y < MinRows)
while (x != 0 || y < paletteRows)
{
var rect = new Rectangle(origin.X + x * 64, origin.Y + 48 * y, 64, 48);
var drawPos = Game.viewport.Location + new float2(rect.Location);

View File

@@ -178,6 +178,7 @@ namespace OpenRa.Game
UpdatePalette(world.Actors.SelectMany(
a => a.traits.WithInterface<IPaletteModifier>()));
minimap.Update();
chrome.Tick();
orderManager.TickImmediate();

View File

@@ -10,25 +10,17 @@ namespace OpenRa.Game.Graphics
{
Sheet sheet;
SpriteRenderer rgbaRenderer;
SpriteRenderer shpRenderer;
Sprite sprite;
Bitmap terrain, oreLayer;
Animation radarAnim, alliesAnim, sovietAnim;
public void Tick() { }
public Minimap(Renderer r)
{
sheet = new Sheet(r, new Size(128, 128));
shpRenderer = new SpriteRenderer(r, true);
rgbaRenderer = new SpriteRenderer(r, true, r.RgbaSpriteShader);
sprite = new Sprite(sheet, new Rectangle(0, 0, 128, 128), TextureChannel.Alpha);
sovietAnim = new Animation("ussrradr");
sovietAnim.PlayRepeating("idle");
alliesAnim = new Animation("natoradr");
alliesAnim.PlayRepeating("idle");
radarAnim = Game.LocalPlayer.Race == Race.Allies ? alliesAnim : sovietAnim;
}
Color[] terrainTypeColors;
@@ -37,9 +29,6 @@ namespace OpenRa.Game.Graphics
public void Update()
{
radarAnim = Game.LocalPlayer.Race == Race.Allies ? alliesAnim : sovietAnim;
radarAnim.Tick();
if (!Game.world.Actors.Any(a => a.Owner == Game.LocalPlayer && a.traits.Contains<ProvidesRadar>()))
return;
@@ -114,25 +103,8 @@ namespace OpenRa.Game.Graphics
public void Draw(float2 pos, bool hasRadar, bool isJammed)
{
if (hasRadar && radarAnim.CurrentSequence.Name == "idle")
radarAnim.PlayThen("open", () => radarAnim.PlayRepeating("active"));
if (hasRadar && radarAnim.CurrentSequence.Name == "no-power")
radarAnim.PlayBackwardsThen("close", () => radarAnim.PlayRepeating("active"));
if (!hasRadar && radarAnim.CurrentSequence.Name == "active")
radarAnim.PlayThen("close", () => radarAnim.PlayRepeating("no-power"));
if (isJammed && radarAnim.CurrentSequence.Name == "active")
radarAnim.PlayRepeating("jammed");
if (!isJammed && radarAnim.CurrentSequence.Name == "jammed")
radarAnim.PlayRepeating("active");
shpRenderer.DrawSprite(radarAnim.Image, pos + Game.viewport.Location - new float2( 290-256,0), PaletteType.Chrome, new float2(290, 272));
shpRenderer.Flush();
if (radarAnim.CurrentSequence.Name == "active")
{
rgbaRenderer.DrawSprite(sprite, pos - new float2((290-256)/2, -5), PaletteType.Chrome, new float2(256, 256));
rgbaRenderer.Flush();
}
rgbaRenderer.DrawSprite(sprite, pos, PaletteType.Chrome, new float2(256, 256));
rgbaRenderer.Flush();
}
}
}