More radar tweaks: Use a 2-stage animation

This commit is contained in:
Paul Chote
2010-01-09 19:37:56 +13:00
parent 918078b62e
commit 8b59e9e3a6

View File

@@ -59,8 +59,14 @@ namespace OpenRa.Game
static float2 radarOpenOrigin = new float2(Game.viewport.Width - 250, 29); static float2 radarOpenOrigin = new float2(Game.viewport.Width - 250, 29);
static float2 radarClosedOrigin = new float2(Game.viewport.Width - 250, -163); static float2 radarClosedOrigin = new float2(Game.viewport.Width - 250, -163);
float2 radarOrigin; float2 radarOrigin;
bool radarAnimating = false; float radarActivateHeight;
int radarVelocity = 15; const int radarSlideAnimationLength = 15;
int radarSlideAnimationFrame = 0;
bool radarSlideAnimating = false;
const int radarActivateAnimationLength = 5;
int radarActivateAnimationFrame = 0;
bool radarActivateAnimating = false;
// Power bar positioning // Power bar positioning
static float2 powerOrigin = new float2(Game.viewport.Width - 20, 30); static float2 powerOrigin = new float2(Game.viewport.Width - 20, 30);
@@ -172,20 +178,43 @@ namespace OpenRa.Game
public void Tick() public void Tick()
{ {
if (radarAnimating) if (radarSlideAnimating)
{ {
radarOrigin.Y += (hadRadar) ? radarVelocity : -radarVelocity; var oldOrigin = (hadRadar) ? radarClosedOrigin : radarOpenOrigin;
var newOrigin = (hadRadar) ? radarOpenOrigin : radarClosedOrigin;
radarOrigin = float2.Lerp(oldOrigin, newOrigin, radarSlideAnimationFrame*1.0f/radarSlideAnimationLength);
if (radarSlideAnimationFrame == radarSlideAnimationLength)
{
radarSlideAnimationFrame = 0;
radarSlideAnimating = false;
if (hadRadar)
{
radarActivateAnimating = true;
Sound.Play("radaron2.aud");
}
return;
}
radarSlideAnimationFrame++;
}
if (hadRadar && radarOrigin.Y >= radarOpenOrigin.Y) if (radarActivateAnimating)
{
float oldHeight = (hadRadar) ? 0 : 192;
float newHeight = (hadRadar) ? 192 : 0;
radarActivateHeight = float2.Lerp(oldHeight, newHeight, radarActivateAnimationFrame * 1.0f / radarActivateAnimationLength);
if (radarActivateAnimationFrame == radarActivateAnimationLength)
{ {
radarAnimating = false; radarActivateAnimationFrame = 0;
radarOrigin.Y = radarOpenOrigin.Y; radarActivateAnimating = false;
} if (!hadRadar)
else if (radarOrigin.Y <= radarClosedOrigin.Y) radarSlideAnimating = true;
{ return;
radarAnimating = false;
radarOrigin.Y = radarClosedOrigin.Y;
} }
radarActivateAnimationFrame++;
} }
} }
@@ -228,27 +257,30 @@ namespace OpenRa.Game
if (hasRadar != hadRadar) if (hasRadar != hadRadar)
{ {
radarAnimating = true; if (hadRadar)
Sound.Play((hasRadar) ? "radaron2.aud" : "radardn1.aud"); {
radarActivateAnimating = true;
Sound.Play("radardn1.aud");
}
else
radarSlideAnimating = true;
} }
hadRadar = hasRadar; hadRadar = hasRadar;
var isJammed = false; // todo: MRJ can do this var isJammed = false; // todo: MRJ can do this
/*
rgbaRenderer.DrawSprite((Game.LocalPlayer.Race == Race.Allies) ? radarBinAllied : radarBinSoviet,
radarOrigin,
PaletteType.Chrome);
*/
var bgSprite = SequenceProvider.GetImageFromCollection(renderer, "radar", "nobg"); var bgSprite = SequenceProvider.GetImageFromCollection(renderer, "radar", "nobg");
if (!hasRadar || radarAnimating) if (radarSlideAnimating || radarActivateAnimating)
bgSprite = (Game.LocalPlayer.Race == Race.Allies) ? SequenceProvider.GetImageFromCollection(renderer, "radar", "allied") : SequenceProvider.GetImageFromCollection(renderer, "radar", "soviet"); bgSprite = (Game.LocalPlayer.Race == Race.Allies) ? SequenceProvider.GetImageFromCollection(renderer, "radar", "allied") : SequenceProvider.GetImageFromCollection(renderer, "radar", "soviet");
rgbaRenderer.DrawSprite(bgSprite, radarOrigin, PaletteType.Chrome); rgbaRenderer.DrawSprite(bgSprite, radarOrigin, PaletteType.Chrome);
rgbaRenderer.Flush(); rgbaRenderer.Flush();
if (hasRadar && !radarAnimating) if ((hasRadar && !radarSlideAnimating) || radarActivateAnimating)
Game.minimap.Draw(radarOrigin + new float2(9,0), hasRadar, isJammed); {
RectangleF mapRect = new RectangleF(radarOrigin.X + 9, radarOrigin.Y+(192-radarActivateHeight)/2, 192, radarActivateHeight);
Game.minimap.Draw(mapRect, hasRadar, isJammed);
}
} }
void AddButton(Rectangle r, Action<bool> b) { buttons.Add(Pair.New(r, b)); } void AddButton(Rectangle r, Action<bool> b) { buttons.Add(Pair.New(r, b)); }